《2022年2022年汇编语言时钟程序 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编语言时钟程序 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、;- ; 时钟程序; 定时器 T0 中断服务中产生时钟数据; 在定时器T1 中断服务程序中动态显示8 个数码管。; P1 口接七段数码管的段码,P2.2、P2.3、P2.4 口接数码管的位控制码。; 设计:黄有全; 2009 年 11 月 1 日;- ;定义变量名称Hour EQU 30H Min EQU 31H Sec EQU 32H MS EQU 3BH Hour_10 EQU 33H Hour_0 EQU 34H ;37H;实验板用37H Hgan1 EQU 35H Min_10 EQU 36H ;39H; 实验板用39H Min_0 EQU 37H ;34H; 实验板用36H Hgan
2、2 EQU 38H Sec_10 EQU 39H ;36H; 实验板用36H Sec_0 EQU 3AH LED1 EQU 40H LED2 EQU 41H LED3 EQU 42H LED4 EQU 43H LED5 EQU 44H LED6 EQU 45H LED7 EQU 46H LED8 EQU 47H ORG 0000H LJMP MAIN ORG 000BH LJMP CREATE_DA TA ;定时器 T0 中断处理, 完成时间基准产生与时间、日期处理。ORG 001BH LJMP DISPLAY ;定时器 T1 中断处理,完成动态显示功能。ORG 0030H MAIN: LCA
3、LL INITIAIL ;初始化程序模块MM0: LCALL KEY_PRO ;按键处理模块LCALL CHANGE_DATA ;数据转换模块LCALL CHANGE_DIS ;显示段码转换模块LJMP MM0 ;- ;初始化程序模块名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - ;- INITIAIL: MOV SP, #50H ;设置堆栈指针为68H。MOV Hour,#23 ;设置要小时初始值为23 MOV Min, #5
4、6 ;设置要分钟初始值为56 MOV Sec, #28 ;设置要秒初始值值为28 MOV MS,#0 MOV IE,#8AH ;开中断,开定时器T1 中断MOV IP,#02H ;T0 优先级为1,T1 优先级为0. MOV TMOD,#11H ;T0、T1 为定时方式1 MOV TH0,#3CH ; 定时 50ms 初始值MOV TL0,#0B0H MOV TH1,#0F8H ; 定时 2ms 初始值MOV TL1,#30H SETB TR0 ;启动定时器T1 SETB TR1 RET ;- ;按键处理模块;- KEY_PRO: MOV A,P3 CPL A ANL A,#0FH CJNE
5、A, #01H, KEY2 MOV A,Hour CJNE A,#23,KH_INC MOV HOUR,#0 LJMP KEY_END KEY2: CJNE A,#02H,KEY3 MOV A,Hour CJNE A,#0,KH_DEC MOV Hour,#1 LJMP KEY_END KEY3: CJNE A,#04H,KEY4 MOV A,Min CJNE A,#59,KM_INC MOV Min,#0 LJMP KEY_END KEY4: CJNE A,#08H,KEY_END MOV A,Min CJNE A,#0,KM_DEC MOV Min,#59 名师资料总结 - - -精品资料
6、欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - LJMP KEY_END KH_INC: INC Hour LJMP KEY_END KH_DEC: DEC Hour LJMP KEY_END KM_INC: INC Min LJMP KEY_END KM_DEC: DEC Min LJMP KEY_END KEY_END: LCALL DELAY200MS RET ;- ;T0 中断服务程序;产生时钟数据;产生秒钟、分钟和小时数据;- CREATE_DATA
7、: PUSH Acc ;累加器 ACC 入栈,在中断服务中用到A,保护 A 的值。MOV TH0,#45H ;定时 50ms 初始值的计算值是3CE8H,由于有中断过程MOV TL0,#0feh ;时间消耗、晶体频率不准等原因,校正后是45FEH 。MOV A,MS CJNE A, #20,MS_INC ;毫秒 MS 不是 20,去毫秒增一。MOV MS,#00 ; 毫秒 MS 是 20,毫秒单元清0. MOV A,SEC CJNE A, #59,SEC_INC ; 秒 S EC 不是 59,去秒增一MOV SEC, #0 ; 秒 SEC 是 59,秒单元清0. MOV A,MIN CJNE
8、A, #59,MIN_INC ;分 MIN 不是 59,去分增一。MOV MIN,#0 ;分 MIN 是 59,分单元清0. MOV A,HOUR CJNE A, #23,HOUR_INC ;小时 HOUR 不是 23,去分增一。MOV HOUR, #00 ;小时是 23,小时单元清0. JMP CREATE_RET ;返回MS_INC: INC MS ;毫秒增 1 JMP CREATE_RET ; SEC_INC: INC SEC ;秒增 1 JMP CREATE_RET ; MIN_INC: INC MIN ;分增 1 JMP CREATE_RET HOUR_INC: INC HOUR ;
9、小时增 1 CREATE_RET: POP ACC ;出栈,恢复A 的值。RETI ;返回;- 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - ;数据转换模块;将数据转换为十位和个位。转换结果保存到显示内容保存区。;- CHANGE_DIS: MOV A,Hour ;小时转换个位和十位MOV B,#10 DIV AB MOV Hour_10,A ;保存小时十位MOV Hour_0, B ;保存小时个位MOV Hgan1,#20
10、; 横杆 1 的代码MOV A,Min ;分转换个位和十位MOV B,#10 DIV AB MOV Min_10,A ;保存分的十位MOV Min_0, B ;保存分的个位MOV Hgan2,#20 ;横杆 2 的代码MOV A,Sec ;秒小时转换个位和十位MOV B,#10 DIV AB MOV Sec_10,A ;保存秒的十位MOV Sec_0, B ;保存秒的个位RET ;- ;数据转换模块;将要显示的数据转换为共阳极显示段码,保存到显示段码区保存;显示内容转换为显示段码;- CHANGE_DATA: MOV DPTR, #DISCODE ; 设置显示段码表的表头指针MOV R4, #
11、8 ;用 R4 做循环计数器,8 个数码管显示8次为初始值MOV R1, #33H ;设置数据指针,指向要显示的第1 个数MOV R0, #40H ; 设置显示段码区指针,CC0: MOV A, R1 ;取显示数据MOVC A, A+DPTR ;查表,获取数码管显示代码MOV R0, A ;显示段码送LED 代码区保存INC R1 INC R0 DJNZ R4,CC0 ;8 位转换没有完毕,跳转到DD0 ,完毕返回。RET ;- ;T1 中断,完成显示功能;在 T1 中断服务程序中进行显示,显示很稳定。;每 2ms 中断一次,每次中断显示一个位的数字,8 次一个循环。;- 名师资料总结 - -
12、 -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - DISPLAY: SETB RS0 ;修改寄存器区。 在中断服务中用区1 的寄存器, 保护区 0 的寄存器不受影响。MOV TH1,#0F8H ; 定时 2ms 初始值MOV TL1,#30H CJNE R4,#8,DISP0 MOV R4, #0 ;用 R4 做循环计数器,8 个数码管显示8 次为初始值MOV R3, #11100011B ;用 R3 做为显示位码指针,设置指向第1 位 LED ;M
13、OV R3, #11111000B ; 实验板的位码初始值MOV R1, #40H ;设置数据指针,指向要显示的第1 个数DISP0: MOV P1, R1 ;取显示代码数据,送接在端口P1 的数码管MOV P2, R3 ;送显示位码INC R1 ;修改数据指针,指向下一个要显示的数据INC R4 ;修改显示位数指针,下次中断显示下一个位。INC R3 ;增 4,修改显示位码,指向下一个要显示的位INC R3 INC R3 INC R3 CLR RS0 ;恢复寄存器区0。RETI ;- ;延时 200ms 程序;- DELAY200MS: MOV R7,#200 ;延时 200ms DD1:
14、MOV R6,#200 ;延时 1ms DD2: NOP NOP NOP DJNZ R6,DD2 DJNZ R7,DD1 RET ;- ;共阳极数码管显示代码表;0、1、2、3、 4、5、6、7、8、9、A、b、 C、d、E、F、H、L、P、灭、 - 。;8 位二进制中,第7 位接小数点,第0 位接 a 段。;- DISCODE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H, 83H,0C6H,0A1H,86H,8EH,89H,0C7H,8CH,0FFH,0BFH END 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -