资源描述
实验一 存储器块清零一、实验目的1. 掌握汇编程序设计及其调试程序方法2 掌握存储器的读写方法二、实验内容1. 编写程序,将外部数据存储器中0100H-01FFH单元的内容全部清零。2. 修改程序,将存储器中0100H-01FFH单元的内容置成 0FFH,0FEH,0FDH,01H,00H。三、程序框图 图1 数据块清零程序框图四、程序清单BlockEQU4000HORG0000HMOVDPTR, #Block ; DPTR = _ MOVR0, #0 ; R0 = _ CLRA ; A = _Loop: MOVXDPTR, A ; DPTR = _ INCDPTR ; DPTR = _ DJNZR0, Loop ; R0 = _ , Z = _ , PC = _ LJMP$ ; R0 = _ , PC = _ END五、实验步骤1. 新建汇编文件(文件名.ASM),输入源程序,另存于D: M51的目录下。2. 汇编源程序。3. 分别用单步、断点和连续执行的方法调试程序,并观察寄存器和存储器的变化。实验二 数据块移动一、实验目的1. 掌握汇编程序设计及其调试程序方法。2 掌握数据块的移动方法。二、实验内容 将指定源首地址和长度的存储块移到指定目标位置1编写程序,用地址加一的方法将0000H-00FFH单元的内容复制到0100H-01FFH的存储单元中。2编写程序,用地址减一的方法完成上述功能。三、程序框图图2 程序框图1 图3 程序框图2四、实验步骤1. 新建汇编文件(文件名.ASM),输入源程序,另存于D: M51的目录下。2. 汇编源程序。3. 分别用单步、断点和连续执行的方法调试程序,并观察寄存器和存储器的变化。五、程序清单991 用地址加一的方法实现数据块移动; 0000H -00FFH - 0100H-01FFHDATA1 EQU 0000HDATA2 EQU 0100H ORG 0000H MOV DPTR,#DATA2 MOV P2, DPH MOV R0, DPL MOV DPTR, #DATA1 MOV R7,#00HLoop1: MOVX A, DPTR MOVX R0, A INC DPTR INC R0 CJNE R0, #00H, Goon1 INC P2Goon1: DJNZ R7, Loop1 LJMP $ END2 用地址减一的方法实现数据块移动; 0000H -00FFH - 0100H-01FFHDATA1 EQU 00FFHDATA2 EQU 01FFH ORG 0000H MOV DPTR,#DATA2 MOV P2, DPH MOV R0, DPL MOV DPTR, #DATA1 MOV R7,#00HLoop1: MOVX A, DPTR MOVX R0, A DEC DPL MOV A, DPL CJNE A, #00H, Coon1 DEC DPHCoon1: DEC R0 CJNE R0, #00H, Goon2 DEC P2Goon2: DJNZ R7, Loop1 LJMP $ END五、思考题 当源数据块的地址与目标数据块的地址重叠时,将会发生什么情况?应采用哪种方法编写程序,才能保证所复制的数据与源数据完全一致。 先运行实验一的第二段程序,将本次实验的目标地址修改为0180H,观察哪个程序运行结果正确。再将本次实验的目标地址分别修改为0080H,观察哪个程序运行结果正确。实验三 二进制到BCD码转换一、 实验目的1掌握简单的数值转换算法2基本了解数值的各种表达方法二、实验内容计算机中的数值有各种表达方式,掌握各种数制之间的转换是单片机应用的基础。1. 编写一个双字节二进制数到压缩BCD码的转换子程序,其:入口条件:待转换的双字节二进制数在R6、R7中。出口信息:转换后的三字节压缩码整数在R3、R4、R5中。2 编写一个双字节二进制数到分离BCD码的转换子程序,其:入口条件:待转换的双字节二进制数在R6、R7中出口信息:转换后的分离码在5AH5FH的6个单元中。3. 编写程序,将20H、21H的双字节二进制数转换为分离码存放在5AH5FH的6个单元中。三、 程序框图四、程序清单;主程序XSQ EQU 60H ORG 0000H MOV R6, #0FFH MOV R7,#0FFHLCALL FLBCD ;调分离BCD码程序 SJMP $;二进制数转换分离BCD码程序FLBCD: LCALL HB2 ;调BCD码转换程序 MOV A, R3 ANL A, #0F0H SWAP A MOV XSQ, A MOV A, R3 ANL A, #0FH MOV XSQ+1, A MOV A, R4 ANL A, #0F0H SWAP A MOV XSQ+2, A MOV A, R4 ANL A, #0FH MOV XSQ+3, A MOV A, R5 ANL A, #0F0H SWAP A MOV XSQ+4, A MOV A, R5 ANL A, #0FH MOV XSQ+5, A RET;二进制数转换压缩BCD码子程序;入口条件:待转换的十六进制数在R6、R7中,;出口信息:转换后的BCD码在R3、R4、R5中HB2: CLRA; MOVR3, A ; MOVR4, A MOV R5, A MOVR2, #10H;双字节需循环16次HB20:MOVA, R7;高位移到CY中 RLCA MOVR7, AMOVA, R6RLCAMOVR6, AMOVA, R5;BCD码带进位自身相加ADDCA, R5DAA;十进制调整MOVR5, AMOVA, R4ADDCA, R4DAAMOVR4, AMOVA, R3ADDCA, R3MOVR3, A ;万位不超过6不用调整DJNZR2, HB20;16位没有处理完转 RET五、实验步骤 分别用单步、断点和连续执行的方法调试程序,并观察寄存器和存储器的变化。六、思考题 如何将分立BCD码和压缩BCD码转换成二进制码。实验四 四位压缩BCD码加法实验一、 实验目的1了解设计压缩BCD码加法程序的方法2掌握加法指令、十进制调整指令的使用方法。二、实验内容把30H、31H单元中的四位十进制数与32H、33H单元中的四位十进制数相加,结果存放在30H、31H、32H单元。(数据存放格式为低位在前,高位在后)程序运行前,应先将30H-33H单元的加数和被加数赋值。执行结果填在表1-1中。表1预置被加数预置被加数程序运行结果(30H)(31H)(32H)(33H)(30H)(31H)(32H)十进制34127856三、 程序框图 四、 程序清单 DATA1 EQU 30H ; 加数地址DATA2 EQU 32H ; 被加数地址 ORG 0000H MOV R0, #DATA1 MOV R1, #DATA2 MOV A, R0 ADD A, R1 DA A MOV R0, A INC R0 INC R1 MOV A, R0 ADDC A, R1 DA A MOV R0, A INC R0 CLR A ADDC A, #0 MOV R0, A SJMP $ END实验五 布尔操作实验一、 实验目的1掌握位操作指令的使用方法2了解用程序实现组合逻辑电路的功能二、实验内容用程序实现图6所示组合逻辑电路的功能位地址: 07H 06H 05H 04H 03H 02H 01H 00HVWUXYZQ字节地址: 20H 三、 程序清单QBIT00H ZBIT02HYBIT03HXBIT04HUBIT05HWBIT06HVBIT07H 表2执行前执行后(20H)F0(20H)F4(20H)(20H)ORG0000HMOVC, VORLC, WMOVPSW.4, CMOVC, XORLC, /YANLC, PSW.4ANLC, /ZMOVQ, CSJMP$END 程序执行前,将表2中值填入20H单元,执行结果填入表中,并对执行结果加以说明。实验六 排序实验一、实验目的了解数据排序的简单算法。二、实验内容寄存器50H5FH单元中存放16个数据,编写一个程序将数据按照从小到大的次序排列。“冒泡排序”算法是:从第一个数据开始相邻的数据比较,若次序不对,两数据交换位置,第一遍比较(N-1)次后,最大的数据已排到数组的尾部,第二遍仅需比较(N-2)就够了,共比较(N-1)遍就完成排序,这样共有两重循环。带标志位的“冒泡排序”算法:设置一个标志位,进入外循环时标志位清0,在内循环中相邻两数交换位置时,标志位置1,内循环结束后测试标志位,若为0表示内循环没有进行数据交换,数据排序已经完成,可以结束外循环,不必循环(N-1)遍,从而节省了操作时间。三、程序框图 四、程序清单Size EQU 10H ; 数据个数Array EQU 50H ; 数据起始地址Change EQU 0 ; 交换标志 ORG 0000H MOV R6, #Size-1SORT: MOV A, R6 MOV R7, A MOV R0, #Array CLR ChangeSORT1: MOV A, R0 MOV R2, A INC R0 MOV B, R0 CJNE A, B, SORT2 SJMP SORT3SORT2: JC SORT3 ; 前小后大, 不交换 SETB Change ; 前大后小, 置交换标志 XCH A, R0 ; 交换 DEC R0 XCH A, R0 INC R0SORT3: DJNZ R7, SORT1 JNB Change, SORT4 DJNZ R6, SORTSORT4: LJMP $ END实验七 I/O接口实验一一、实验目的1、 掌握单片机I/O接口的使用方法。2、 熟悉延时子程序的编写和使用。二、实验内容用P1口设计一个交通信号控制器,分别用红、黄、绿两组发光二极管作为交通指示信号。程序使两组发光二极管同时按红、黄、绿和绿、黄、红循环点亮。 修改程序, 使红、绿灯点亮时间比黄灯点亮时间长一倍。三、实验电路及连线连线连接孔1连接孔21P1.7L02P1.6L13P1.5L24P1.3L65P1.2L56P1.1L4四、程序框图 四、程序清单 ORG 0000HLOOP: MOV A, #88H MOV R2, #3OUTP1: MOV P1, A RL A ;右移一位 CALL DELAY DJNZ R2, OUTP1 LJMP LOOPDELAY: ;延时程序 MOV R6, #0 MOV R7, #0DELAY1: DJNZ R7, $ DJNZ R6, DELAY1 RET查指令表可知:执行DJNZ指令需两个机器周期时间,当晶振为 6MHz 时,一个机器周期为12/6MHz(S),执行延时程序所需时间为:(256+1)256212/6 = 263168 (S) 实验八 I/O接口实验二一、实验目的1、 了解单片机与外设传送信息的方式。2、 掌握查询方式的原理、特点及编程方法。二、实验内容假设在工业过程控制中,有一台机器当K1=0时 正常工作,L0(绿灯)亮,一旦出现故障(K2=0),则绿灯灭,停止工作,同L2(红灯)闪烁报警,待故障排除(K2=1)时,解除报警,继续工作(红灯灭。绿灯亮)。完成硬件连接,并编写程序,编写程序,用单片机实现这样的过程。三、实验电路及连线连线连接孔1连接孔21P1.7L02P1.6L13P1.3S04P1.2S1四、程序框图 五、程序清单通过查询开关K1、K2的输入状态,ORG0000H决定输出控制状态:是绿灯亮(正常工MAIN:MOVP1,#0FH作),还是红灯闪烁(故障报警)。L1:JBP1.3, L1 L2:CPLP1.7ACALLDLYJBP1.2, L2CLRP1.7SETBP1.6L3:LCALLDLYJNBP1.2, L3SJMPMAINDLY:MOVR6, #80HMOVR7, #00HDLY1:DJNZR7, $DJNZR6, DLY1RET 六、思考题 修改程序,实现在任何时候断开K1时, 均能使绿灯熄灭。 实验九 外部中断实验一、实验目的1、 了解单片机与外设传送信息的方式。2、 掌握中断方式的原理、特点及编程方法。二、实验内容 当INT0中断时,读取开关K1、K2的状态,并用LED0、LED1指示出K1、K2的状态。完成硬件连接,并编写程序,实现上述功能。 三、实验电路及连线连线连接孔1连接孔21P1.7L02P1.6L13P1.3S04P1.2S15INT0单脉冲输出四、程序框图 四、程序清单ORG0000HLJMPMAINORG0013HLJMPWBINT MAIN:MOVP1, #0FHSETBIT0SETBEX0SETBEASJMP$WBINT:MOVP1, #0FHMOVC, P1.3CPLCMOVP1.7, CMOVC, P1.2CPLC MOVP1.6, C MOVR7, #80HMOVR6, #00HWBINT1: DJNZR6, $ DJNZ R7, WBINT1 RETI实验十 数码管显示实验一、实验目的1、 掌握数码管动态显示的编程方法。2、 了解输出端口的扩展方法。二、实验内容1. 用两片8D锁存器74HC374扩展两个8位输出口,实现对数码管的显示控制。2. 设计一个数码管的动态显示程序,将显示缓冲区5AH-5FH中的内容在数码管上显示出来。三、 实验电路及连线连线:KEY_CS 连接CS0 字形代码表字形DPgfedcba字形码0001111113FH10000011006H2010110115BH3010011114FH40110011066H5011011016DH6011111017DH70000011107H8011111117FH9011011116FHA0111011177HB011111007CHC0011100139HD010111105EHE0111100179HF0111000171H暗0000000000H段码输出地址:8004H;位码输出地址:8002H四、实验说明1 六个数码管的8 位段码、6位位码是由两片74LS374输出控制,实现动态方式显示。位码经ULN2003倒相驱动后,选择相应的显示位。将KEY/LED CS 接到CS0 上,则段码地址为8004H,位码地址为8002H。2. 调用显示程序前,应先在显示缓冲区5AH5FH存入六个字节00H0FH的显示数据。五、程序框图程序框图如图所示。六、程序框图OUTBIT EQU 8002H ; 位控制口OUTSEG EQU 8004H ; 段控制口XSQ EQU 5AH ; 显示缓冲 ORG 0000H LJMP MAIN MAIN: MOV SP, #60H MOV XSQ, #01H MOV XSQ+1, #02H MOV XSQ+2, #03H MOV XSQ+3, #04H MOV XSQ+4, #05H MOV XSQ+5, #06HMAIN1: LCALL DISP LJMP MAINDISP: MOV R2, #00100000B ; 从左边开始显示 MOV R1, #6 ; 共6个数码管 MOV R0, #XSQDISP1: MOV DPTR, #OUTBIT MOV A,#0 MOVX DPTR, A ;关所有数码管 MOV A, R0 MOV DPTR, #LEDMAP MOVC A, A+DPTR ;查表取段码 MOV DPTR, #OUTSEG MOVX DPTR, A ;输出段码 MOV A, R2 MOV DPTR, #OUTBIT MOVX DPTR, A ;输出位码 RR A ;为显示下一位作准备 MOV R2, A INC R0 MOV R7, #00H DJNZ R7, $ ;延时 DJNZ R1, DISP1 RETLEDMAP: ; 数码管段码表 DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H DB 00H END七、思考题延时时间延长至1秒以上,观察程序执行结果有何变化。实验十一 键盘扫描、显示实验一、实验目的1、 掌握键盘扫描原理及编程方法。2、 掌握输入、输出端口的扩展方法及键盘、显示电路的设计方法。二、实验内容在数码管显示实验电路的基础上,用8路双向驱动器74LS245扩展4路输入端口,与位码输出端口组成键盘扫描电路,并编写一个键盘扫描和数码显示程序,把按键输入的键码在数码管上显示出来。实验程序可分为三个模块1. 主程序:循环调用显示模块和键盘扫描模块,如果有键按下,则将所按下的键码送显示缓冲区。2. 显示模块:将显示缓冲区的内容在数码管上动态显示。3. 键盘扫描模块:扫描键盘,并获取按键的键码。三、 实验电路及连线连线:KEY_CS 连接CS0段码输出地址:8004H;列扫描地址:8002H行码地址:8001H四、实验说明实验箱提供了一个64的小键盘,向列扫描地址(8002H)逐列输出低电平,然后从行码地址(8001H)读回。如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的延时,防止键盘抖动。地址中的X 是由KEY/LED CS 决定,参见地址译码。做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。以便用相应的地址来访问。例如将KEY/LED CS信号接CS0 上,则列扫描地址为8002H,行码地址为8001H。列扫描码还可以分时用作LED的位选通信号。五、程序框图五、程序清单OUTBIT EQU 8002H ; 位控制口OUTSEG EQU 8004H ; 段控制口JPIN EQU 8001h ; 键盘读入口XSW EQU 20H ; 按键显示位置XSQ EQU 5AH ; 显示缓冲 ORG 0000H LJMP MAINMAIN: MOV SP, #60H MOV XSQ, #20H ;清显示 MOV XSQ+1, #20H MOV XSQ+2, #20H MOV XSQ+3, #20H MOV XSQ+4, #20H MOV XSQ+5, #20H MOV XSW, #XSQ ;MAIN1: LCALL DISP ;调显示程序 LCALL JPSM ;调键盘扫描 CJNE A, #10H, MAIN2MAIN2: JNC MAIN1 ;非数字键转 MOV R0,XSW CJNE R0, #XSQ+6, MAIN3MAIN3: JC MAIN4 ;非第六位转 MOV XSQ, #10H ; MOV XSQ+1, #10H MOV XSQ+2, #10H MOV XSQ+3, #10H MOV XSQ+4, #10H MOV XSQ+5, #10H MOV R0, #XSQ ;从最高位显示MAIN4: MOV R0, A INC R0 MOV XSW, R0 ;保存显示指针 LJMP MAIN1JPSM: MOV DPTR, #OUTBIT MOV P2, DPH MOV R0, #LOW(JPIN) MOV R1, #11011111B MOV R2, #6 ;扫描列数JPSM1: MOV A, R1 MOVX DPTR, A ;输出列码 RR A MOV R1, A MOVX A, R0 ;读行码 CPL A ANL A, #0FH JNZ JPSM2 ;该列有键入 DJNZ R2, JPSM1 MOV A, #0FFH ;没有键按下转 LJMP JPSM7JPSM2: MOV R1, A ;键值 = 列 X 4 + 行 MOV A, R2 DEC A RL A RL A MOV R2, A ;R2= (R-1)*4 MOV A, R1 ;R1 为读入的行值 MOV R1, #4JPSM3: RRC A ;移位找出所在行 JC JPSM4 INC R2 ;R2 = R2+ 行值 DJNZ R1, JPSM3JPSM4: MOV A,R2 ;取出键码 MOV DPTR, #JMBIAO MOVC A, A+DPTR MOV R2, AJPSM5: MOV DPTR, #OUTBIT ; 等键释放 CLR A MOVX DPTR, A MOV R7, #0 MOV R6, #0JPSM6: DJNZ R6, $; DJNZ R7, JPSM6 MOVX A, R0 CPL A ANL A, #0FH JNZ JPSM5 MOV A,R2JPSM7: RETJMBIAO: ; 键码定义 DB 16H, 15H, 14H, 0FFH DB 13H, 12H, 11H, 10H DB 0DH, 0CH, 0BH, 0AH DB 0EH, 03H, 06H, 09H DB 0FH, 02H, 05H, 08H DB 00H, 01H, 04H, 07HDISP: MOV R2, #00100000B ;先显示高位 MOV R1, #6 ;共6个数码管 MOV R0, #XSQDISP1: MOV DPTR, #OUTBIT MOV A,#0 MOVX DPTR, A ;关显示 MOV A, R0 MOV DPTR, #LEDMAP MOVC A, A+DPTR ;查表取段码 MOV DPTR, #OUTSEG MOVX DPTR, A ;输出段码 MOV A, R2 MOV DPTR, #OUTBIT MOVX DPTR, A ;输出位码 RR A ;准备显示下一位 MOV R2, A INC R0 MOV R7, #00H DJNZ R7, $ ;延时 DJNZ R1, DISP1 RETLEDMAP: ;数码管段码表 DB 3FH,06H,5BH,4FH;不带小数点 DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H DB 0BFH,86H,0DBH,0CFH ;带小数点 DB 0E6H,0EDH,0FDH,87H DB 0FFH,0EFH,0F7H,0FCH DB 0B9H,0DEH,0F9H,0F1H DB 00H END实验十二 计数器实验一、实验目的掌握8031内部定时器/计数器的使用方法。二、实验内容内部定时器T0工作于计数器模式和方式1,对P3.4(T0)引脚的输入脉冲进行计数。并将计数值在数码管显示出来。三、实验电路及连线 显示电路见实验十。连线连接孔1连接孔21CS0KEY/LED_CS 2T0单脉冲输出 CS0 - - - - - KEY/LED_CS T0 - - - - - 单脉冲输出四、实验说明当定时器T0工作在计数器方式时,可对T0(P3.4)引脚上的外部脉冲进行计数,外部脉冲每出现一个下降沿,由TH0、TL0组成的计数器就加一。由于单片机识别一个从1到0的跳变需两个机器周期,(24个振荡周期),则输入脉冲的最高频率为fosc/24。 实验系统的fosc=6MHz,则输入脉冲的最高频率为250 KHz。五、程序框图五、程序清单OUTBIT EQU 8002H ; 位控制口OUTSEG EQU 8004H ; 段控制口XSQ EQU 5AH ; 显示缓冲 ORG 0000H LJMP MAINMAIN: MOV SP, #60H MOV XSQ, #20H ;清显示 MOV XSQ+1, #20H MOV XSQ+2, #20H MOV XSQ+3, #20H MOV XSQ+4, #20H MOV XSQ+5, #20H MOV TMOD, #05H ;T0:方式1,记数器 MOV TH0, #0 MOV TL0, #0 SETB TR0 ; 开始记数MAIN1: LCALL DISP ;调显示程序 MOV A, TH0 ;显示记数值高位 SWAP A ANL A, #0FH MOV XSQ, A MOV A, TH0 ANL A, #0FH MOV XSQ+1, A MOV A, TL0 ;显示记数值低位 SWAP A ANL A, #0FH MOV XSQ+2, A MOV A, TL0 ANL A, #0FH MOV XSQ+3, A LJMP MAIN1DISP: MOV R2, #00100000B ;从左边开始显示 MOV R1, #4 ; 共6个数码管 MOV R0, #XSQDISP1: MOV DPTR, #OUTBIT MOV A,#0 MOVX DPTR, A ; 关所有数码管 MOV A, R0 MOV DPTR, #LEDMAP MOVC A, A+DPTR ;查表取段码 MOV DPTR, #OUTSEG MOVX DPTR, A ;输出段码 MOV A, R2 MOV DPTR, #OUTBIT MOVX DPTR, A ;输出位码 RR A ;为显示下一位作准备 MOV R2, A INC R0 MOV R7, #00H DJNZ R7, $ ;延时 DJNZ R1, DISP1 RETLEDMAP: ; 数码管段码表 DB 3FH, 06H, 5BH, 4FH ;不带小数点 DB 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH DB 39H, 5EH, 79H, 71H DB 0BFH, 86H, 0DBH, 0CFH ;带小数点 DB 0E6H, 0EDH, 0FDH, 87H DB 0FFH, 0EFH, 0F7H, 0FCH DB 0B9H, 0DEH, 0F9H, 0F1H DB 00H END六、思考题修改程序,将计数值用十进制显示。实验十三 定时器实验电子时钟一、实验目的1. 掌握8031内部定时器/计数器的使用和编程方法。2. 进一步掌握中断处理程序的编程方法。3. 进一步掌握数码管的动态显示方法。二、实验内容利用定时器T0和数码管显示电路,设计一个电子时钟,显示格式:XX XX XX ,由左至右分别为:时、分、秒。定时器每100S中断一次,在中断服务程序中,对中断次数进行计数,计数10000次就是1秒。然后再对秒计数得到分和小时值,并送入显示缓冲区。显示子程序模块可参照实验十数码管显示实验。三、实验电路及连线 显示电路见实验十。连接孔1连接孔2CS0KEY/LED_CS 四、实验说明定时工作方式,其实质也是一种计数方式,只不过计数脉冲由内部提供,每个机器周期计数器加一,因此计数速率固定为fosc/12。因为实验系统的晶振是6MHZ,当工作于方式2时,即8位自动重装方式定时器,定时器100us中断一次, 定时常数=206. 然后对100us中断次数计数10000次,就是1秒钟.4、 在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。五、程序框图六、程序清单OUTBIT EQU 8002H ; 位控制口OUTSEG EQU 8004H ; 段控制口Hour EQU 40h ;时Minute EQU 41h ;分Second EQU 42h ;秒C100ms EQU 43h ;1/100秒XSQ EQU 5AH ;显示缓冲T100ms EQU 65536-5000 ;定时常数 ORG 0000H LJMP MAIN ORG 000BH LJMP T0INT ;T0中断入口MAIN: MOV SP, #60H MOV XSQ, #20H ;清显示 MOV XSQ+1, #20H MOV XSQ+2, #20H MOV XSQ+3, #20H MOV XSQ+4, #20H MOV XSQ+5, #20H MOV Hour, #0 MOV Minute, #0 MOV Second, #0 MOV C100ms, #100 MOV TMOD, #01h ;T0:方式1, 定时器 MOV TH0, #HIGH(T100ms) ;定时常数 MOV TL0, #LOW(T100ms) ;定时常数 MOV IE, #82H ; EA=1, IT0 = 1 SETB TR0 ; 启动定时器0MAIN1: LCALL DISP ;调显示程序 LJMP MAIN1; 定时器0 中断程序T0INT: PUSH PSW PUSH ACC MOV TL0, #HIGH(T100ms);定时常数 MOV TH0, #LOW(T100ms) DEC C100ms ;1/100秒 MOV A, C100ms JNZ TINT2 ;转到返回 MOV C100ms, #100 INC Second ;秒1 MOV A, Second CJNE A, #60, TINT1 ;转到送显示 MOV Second, #0 INC Minute ;分1 MOV A, Minute CJNE A, #60, TINT1 ;转到送显示 MOV Minute, #0 INC Hour ;时1 MOV A, Hour CJNE A, #24, TINT1 ;转到送显示 MOV Hour, #0TINT1: MOV A, Hour ;送显示 MOV B, #10 DIV AB MOV XSQ, A ;时高位 MOV A, B ADD A, #10H ;加小数点 MOV XSQ+1, A MOV A, Minute MOV B, #10 DIV AB MOV XSQ+2, A
展开阅读全文