任务是利用中断进行数制转换,并利用数码管显示转换前后数字、原理图放下面
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
复制代码
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|