今天学习了中断,任务是利用中断进行数制转换,并利用数码管显示转换前后数字、原理图放下面
PS:本次进制转换为16进制转换为10进制,只是例子
照例先说我的思路:
1. 我在主程序先对P1置零(为了让十六进制数从0开始)
2. 然后对P1进行加1的操作,并循环以及延时(为了容易看清是否转换)
3. 配置中断,开启外部中断0,设置触发方式为电平触发,开启中断总控制(这里的配置务必跟着自己的电路图来,这里是我电路图对对应的配置)
4. 编写中断子程序,里面对P1做除法,除以0x64H即0x100D配(由于是两位十六进制最多百位数,所以除以100)为了得到百位数,并将商移到P2(这里刚 好高位为0,不影响)作百位数,并对剩下来的余数进行除10得到新的商,字节内交换后,将交换后新商加上新的余数移入P0,得到十位数和个位数。
5. 退出中断返回
DIV AB 结果:A/B的商放入A,余数放入B
原理图:
代码如下:- ORG 00H
- LJMP 30H ;turn to main
- ORG 03H
- LJMP 0200H
-
-
- ORG 30H
- MAIN: MOV P1, #00H ;hex
- MOV P0, #00H ;low2_dec
- MOV P2, #00H ;high1_dec
- SETB EX0 ;open it
- SETB IT0
- SETB EA ;open total switch
- HERE: INC P1
- MOV R7, #0FFH
- DJNZ R7, $
- SJMP HERE
- ORG 0200H
- EXCHANGE:
- MOV B, #64H ;div with 100 for P2-high1_dec
- MOV A, P1
- DIV AB
- MOV P2, A
- MOV A, B ;save remainder;
- MOV B, #0AH ;div with 10 for P0-low2_dec
- DIV AB
- SWAP A
- ADD A, B
- MOV P0, A
- RETI
- END
复制代码
|