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 + -
显示快捷键?