11.sdi
来自「我的大学单片机课程案例和ppt」· SDI 代码 · 共 87 行
SDI
87 行
,,, ORG 0H
0000,02 00 30,, LJMP START
,,, ORG 0003H ;INT0中断处理程序入口地址
0003,01 9C,, AJMP EXTINT0 ;跳转到EXINT0
,,, ORG 000BH ;定时/计数器0中断处理程序入口地址
000B,01 79,, AJMP TIMER0INT ;跳转到TIMER0INT
,,, ORG 0013H ;INT1中断处理程序入口地址
0013,01 AB,, AJMP EXTINT1 ;跳转到EXINT1
,,, ORG 30H
0030,,START,START:
0030,D2 AA,, SETB EX1 ;开外部中断1
0032,D2 A8,, SETB EX0 ;开外部中断0
0034,D2 8A,, SETB IT1 ;外部中断1由下降沿触发
0036,D2 88,, SETB IT0 ;外部中断0由下降沿触发
,,,
0038,75 89 01,, MOV TMOD,#00000001B ;定时0工作于方式1(16位)
003B,75 8C B1,, MOV TH0,#0B1H
003E,75 8A E0,, MOV TL0,#0E0H ;设定定时时间20ms
0041,D2 A9,, SETB ET0 ;开定时/计数器0允许
0043,C2 8C,, CLR TR0 ;关闭定时器
0045,D2 AF,, SETB EA ;开总中断允许
0047,7B 32,, MOV R3,#50 ;计溢出次数50×20ms=1S
,,,
0049,75 80 FF,, MOV P0,#0FFH ;P0口置1
004C,75 A0 00,, MOV P2,#0H ;P2口清0
004F,75 30 00,, MOV 30H,#0 ;初始显示00
0052,75 31 00,, MOV 31H,#0 ;
0055,90 00 B2,, MOV DPTR,#TABLE ;将数据表TABLE的首地址赋给DPTR
0058,,SCANK,SCANK:
0058,7C 02,, MOV R4,#2 ;数码管数目赋给R4
005A,79 30,, MOV R1,#30H ;R1装显示内容的地址
005C,7A 80,, MOV R2,#10000000B ;R2装位选信号
,,,
,,,
005E,E7,DISPLAY,DISPLAY:MOV A,@R1 ;R1中的数据作为地址,取数据给A
005F,93,, MOVC A,@A+DPTR;将(A+DPTR)地址中的值赋给A
0060,8A A0,, MOV P2,R2 ;选择第一个数码管
0062,F5 80,, MOV P0,A ;送到P0口数码管显示
0064,12 00 70,, LCALL DELAY ;显示延时
0067,EA,, MOV A,R2 ;位选信号右移
0068,03,, RR A ;
0069,FA,, MOV R2,A ;
006A,09,, INC R1 ;下一个显示的内容的地址
006B,DC F1,, DJNZ R4,DISPLAY;没显示完转DISPLAY
006D,02 00 58,, LJMP SCANK ;重新开始扫描
,,,
0070,,DELAY,DELAY:
0070,7E 02,, MOV R6,#2
0072,7F 64,D3,D3: MOV R7,#100
0074,DF FE,D4,D4: DJNZ R7,D4
0076,DE FA,, DJNZ R6,D3
0078,22,, RET
0079,,TIMER0INT,TIMER0INT: ;定时器0中断服务程序
0079,C0 D0,, PUSH PSW
007B,75 8C B1,, MOV TH0,#0B1H
007E,75 8A E0,, MOV TL0,#0E0H ;重置定时时间20ms
0081,DB 16,, DJNZ R3,TRUESC;不到1S退出中断程序
0083,7B 32,, MOV R3,#50 ;重新赋溢出计数值
0085,05 30,, INC 30H ;个位加1
0087,E5 30,, MOV A,30H ;
0089,B4 0A 0D,, CJNE A,#10,TRUESC;判断个位加到10否?
008C,75 30 00,, MOV 30H,#0 ;加到10重新赋0
008F,05 31,, INC 31H ;十位加1
0091,E5 31,, MOV A,31H ;
0093,B4 02 03,, CJNE A,#2,TRUESC;判断加到2否?
0096,75 31 00,, MOV 31H,#0 ;加到2重新赋0
0099,D0 D0,TRUESC,TRUESC: POP PSW
009B,32,, RETI ;
,,,
009C,C0 D0,EXTINT0,EXTINT0:PUSH PSW ;外部中断0服务程序
009E,75 8C B1,, MOV TH0,#0B1H
00A1,75 8A E0,, MOV TL0,#0E0H ;重置定时时间20ms
00A4,7B 32,, MOV R3,#50 ;重新赋溢出计数值
00A6,D2 8C,, SETB TR0 ;启动定时器
00A8,D0 D0,, POP PSW
00AA,32,, RETI ;中断返回
,,,
00AB,C0 D0,EXTINT1,EXTINT1:PUSH PSW ;外部中断1服务程序
00AD,C2 8C,, CLR TR0 ;关闭定时器
00AF,D0 D0,, POP PSW
00B1,32,, RETI ;中断返回
00B2,C0 F9 A4 B0,TABLE,TABLE: DB 0C0H,0F9H,0A4H,0B0H ;0,1,2,3
00B6,99 92 82 F8,, DB 99H,92H,82H,0F8H,80H,90H ;4,5,6,7,8,9
000E,,, END
,,,
,,,
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?