11.asm
来自「我的大学单片机课程案例和ppt」· 汇编 代码 · 共 87 行
ASM
87 行
ORG 0H
LJMP START
ORG 0003H ;INT0中断处理程序入口地址
AJMP EXTINT0 ;跳转到EXINT0
ORG 000BH ;定时/计数器0中断处理程序入口地址
AJMP TIMER0INT ;跳转到TIMER0INT
ORG 0013H ;INT1中断处理程序入口地址
AJMP EXTINT1 ;跳转到EXINT1
ORG 30H
START:
SETB EX1 ;开外部中断1
SETB EX0 ;开外部中断0
SETB IT1 ;外部中断1由下降沿触发
SETB IT0 ;外部中断0由下降沿触发
MOV TMOD,#00000001B ;定时0工作于方式1(16位)
MOV TH0,#0B1H
MOV TL0,#0E0H ;设定定时时间20ms
SETB ET0 ;开定时/计数器0允许
CLR TR0 ;关闭定时器
SETB EA ;开总中断允许
MOV R3,#50 ;计溢出次数50×20ms=1S
MOV P0,#0FFH ;P0口置1
MOV P2,#0H ;P2口清0
MOV 30H,#0 ;初始显示00
MOV 31H,#0 ;
MOV DPTR,#TABLE ;将数据表TABLE的首地址赋给DPTR
SCANK:
MOV R4,#2 ;数码管数目赋给R4
MOV R1,#30H ;R1装显示内容的地址
MOV R2,#10000000B ;R2装位选信号
DISPLAY:MOV A,@R1 ;R1中的数据作为地址,取数据给A
MOVC A,@A+DPTR;将(A+DPTR)地址中的值赋给A
MOV P2,R2 ;选择第一个数码管
MOV P0,A ;送到P0口数码管显示
LCALL DELAY ;显示延时
MOV A,R2 ;位选信号右移
RR A ;
MOV R2,A ;
INC R1 ;下一个显示的内容的地址
DJNZ R4,DISPLAY;没显示完转DISPLAY
LJMP SCANK ;重新开始扫描
DELAY:
MOV R6,#2
D3: MOV R7,#100
D4: DJNZ R7,D4
DJNZ R6,D3
RET
TIMER0INT: ;定时器0中断服务程序
PUSH PSW
MOV TH0,#0B1H
MOV TL0,#0E0H ;重置定时时间20ms
DJNZ R3,TRUESC;不到1S退出中断程序
MOV R3,#50 ;重新赋溢出计数值
INC 30H ;个位加1
MOV A,30H ;
CJNE A,#10,TRUESC;判断个位加到10否?
MOV 30H,#0 ;加到10重新赋0
INC 31H ;十位加1
MOV A,31H ;
CJNE A,#2,TRUESC;判断加到2否?
MOV 31H,#0 ;加到2重新赋0
TRUESC: POP PSW
RETI ;
EXTINT0:PUSH PSW ;外部中断0服务程序
MOV TH0,#0B1H
MOV TL0,#0E0H ;重置定时时间20ms
MOV R3,#50 ;重新赋溢出计数值
SETB TR0 ;启动定时器
POP PSW
RETI ;中断返回
EXTINT1:PUSH PSW ;外部中断1服务程序
CLR TR0 ;关闭定时器
POP PSW
RETI ;中断返回
TABLE: DB 0C0H,0F9H,0A4H,0B0H ;0,1,2,3
DB 99H,92H,82H,0F8H,80H,90H ;4,5,6,7,8,9
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?