找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1856|回复: 0
打印 上一主题 下一主题
收起左侧

关于单片机汇编语言实现进制转换

[复制链接]
跳转到指定楼层
楼主
今天学习了中断,任务是利用中断进行数制转换,并利用数码管显示转换前后数字、原理图放下面

PS:本次进制转换为16进制转换为10进制,只是例子
照例先说我的思路:
1. 我在主程序先对P1置零(为了让十六进制数从0开始)
2. 然后对P1进行加1的操作,并循环以及延时(为了容易看清是否转换)
3. 配置中断,开启外部中断0,设置触发方式为电平触发,开启中断总控制(这里的配置务必跟着自己的电路图来,这里是我电路图对对应的配置)
4. 编写中断子程序,里面对P1做除法,除以0x64H0x100D配(由于是两位十六进制最多百位数,所以除以100)为了得到百位数,并将移到P2(这里刚 好高位为0,不影响)作百位数,并对剩下来的余数进行除10得到新的商,字节内交换后,将交换后新商加上新的余数移入P0,得到十位数和个位数。
5. 退出中断返回

DIV AB   结果:A/B的商放入A,余数放入B

原理图:


代码如下:
  1.                 ORG 00H
  2.                 LJMP 30H                ;turn to main
  3.                 ORG 03H
  4.                 LJMP 0200H
  5.                
  6.         
  7.                 ORG 30H
  8. MAIN:        MOV P1, #00H        ;hex
  9.                 MOV P0, #00H        ;low2_dec
  10.                 MOV P2, #00H        ;high1_dec
  11.                 SETB EX0                ;open it
  12.                 SETB IT0
  13.                 SETB EA                        ;open total switch
  14. HERE:        INC P1
  15.                 MOV R7, #0FFH
  16.                 DJNZ R7, $
  17.                 SJMP HERE
  18.                 ORG 0200H
  19. EXCHANGE:        
  20.                 MOV B, #64H                ;div with 100 for P2-high1_dec
  21.                 MOV A, P1
  22.                 DIV AB
  23.                 MOV P2, A
  24.                 MOV A, B                ;save remainder;
  25.                 MOV B, #0AH                ;div with 10 for P0-low2_dec
  26.                 DIV AB
  27.                 SWAP A
  28.                 ADD A, B
  29.                 MOV P0, A
  30.                 RETI
  31. END
复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表