找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3178|回复: 5
收起左侧

单片机温度计汇编语言详细注释 数码管显示

[复制链接]
ID:542680 发表于 2019-5-24 19:50 | 显示全部楼层 |阅读模式
数码管温度计.png

单片机源程序如下:
  1. RG 0000H  ;目标程序存放地址从0000H开始
  2. DQ EQU P0.0          ;赋值DQ为P0.0
  3. MOV DPTR,#TAB ;数据指针地址
  4. ACALL CHU ;初始化序列
  5.            MOV A,#0CCH ;发送忽略ROM指令
  6.         ACALL XUS ;调用数据发送子程序
  7.         MOV A,#4EH ;发送写暂存器指令
  8.         ACALL XUS ;调用数据发送子程序
  9.         MOV A,#7DH ;设定TH上限报警值125℃
  10.         ACALL XUS ;调用数据发送子程序
  11.         MOV A,#0B7H ;设定TL下限报警值零下55℃
  12.         ACALL XUS ;调用数据发送子程序
  13.         MOV A,#03H ;设定默认精度12位
  14.         ACALL XUS ;调用数据发送子程序
  15.         MOV A,#0CCH ;发送忽略ROM指令
  16.         ACALL XUS ;调用数据发送子程序
  17.         MOV A,#48H ;发送拷贝暂存器指令,将暂存器的数据保存至EEPROM
  18.         ACALL XUS ;调用数据发送子程序
  19.     ACALL SI  ;调用延时子程序大于10us即可
  20. LSP:ACALL CHU ;初始化序列
  21.            MOV A,#0CCH ;发送忽略ROM指令
  22.         ACALL XUS ;调用数据发送子程序
  23.         MOV A,#44H ;发送温度转换指令
  24.         ACALL XUS ;调用数据发送子程序
  25.         ACALL YUA  ;调用延时子程序
  26.         ACALL YUA  ;调用延时子程序
  27. VPA:ACALL SXI  ;调用温度处理模块程序
  28.         MOV B,A          ;第一次温度值放于寄存器B
  29.         ACALL SXI ;调用温度处理模块子程序
  30.         CJNE A,B,VPA ;比较两次温度是否相等
  31.         ACALL ACS  ;调用温度数据裁分程序
  32.     MOV A,15H  ;拷贝数据位数标志
  33.         CJNE A,#0FFH,LSL  ;判断数据位数
  34.         MOV A,R4  ;获取百位数据
  35.         ACALL ZXM ;调用字形码查询子程序
  36.         MOV P3,#01H         ;百位数码管开启
  37.         MOV P2,A  ;加载百位数码管字形码
  38.         ACALL YUA ;调用延时子程序
  39.     SJMP LSC  ;转移至十位数码管显示程序段
  40. LSL:MOV A,13H  ;拷贝温度数据符号标志
  41.     CJNE A,#0F0H,LSC ;判断温度正负值
  42.         MOV A,14H  ;拷贝十位标志位
  43.     CJNE A,#0FFH,IEC ;判断数据是否是2位数据
  44.     MOV P3,#01H         ;开启百位数码管
  45.         MOV P2,#0BFH  ;显示负号字形码
  46.         ACALL YUA  ;调用延时子程序
  47.         SJMP YYV ;转移至个位数据程序段
  48. IEC:MOV P3,#02H        ;单独开启十位数码管
  49.     MOV P2,#0BFH  ;显示负号字形码
  50.         ACALL YUA  ;调用延时子程序
  51.         SJMP POB  ;转移至个位数码管
  52. LSC:MOV A,14H  ;拷贝十位数据标志
  53.     CJNE A,#0FFH,POB ;判断数据是否是十位数据
  54. YYV:MOV A,R3 ;拷贝十位温度值
  55.         ACALL ZXM  ;调用字形码查询子程序
  56.         MOV P3,#02H        ;单独开启十位数码管
  57.         MOV P2,A   ;加载温度值数据
  58.         ACALL YUA  ;调用延时子程序
  59. POB:MOV A,R2  ;拷贝个位温度值数据
  60.     ACALL ZXM        ;调用字形码查询子程序
  61.         MOV P3,#04H         ;单独开启个位数码管
  62.         MOV P2,A  ;加载个位数据值
  63.         ACALL YUA ;调用延时子程序
  64.         MOV A,R5  ;拷贝错误标志寄存器数据
  65.         CJNE A,#0CCH,LSP ;判断数据是否正常接收,由从机产生的未知错误
  66.         SJMP $   ;数据接收严重错误,或设置错误,等待用户修改



  67. CHU:CLR DQ   ;初始化开始                                 //初始化序列//
  68.         MOV 10H,#240  ;设定复位脉冲480us
  69.         DJNZ 10H,$                ;复位脉冲需要 X>480us
  70.         SETB DQ     ;复位脉冲发送结束
  71.         MOV 10H,#30 ;设定存在脉冲等待时间
  72.         DJNZ 10H,$ ;等待时间需要15us-60us
  73.         MOV 10H,#60  ;设定存在脉冲存在时间(小于等于)≤180us
  74. EPC:JB DQ,CPE      ;检测是否有存在脉冲  k=30us
  75.         SJMP SPC     ;检测到存在脉冲
  76. CPE:DJNZ 10H,EPC ;判断存在脉冲存在时间是否超出?  k=120us
  77.     SJMP CHU  ;未检测到存在脉冲,重新初始化序列
  78. SPC:JNB DQ,SPC ;等待存在脉冲结束
  79.     RET                           ;初始化序列完成,程序返回!!!






  80. XUS:MOV 11H,#8 ;定义数据字节字数8bit         //数据发送程序//
  81. RKP:CLR DQ ;写时序开始        
  82.     RRC A ;加载发送数据           
  83.         MOV 10H,#28        ;设定数据保持时间  
  84.         JNC EBP ;判断数据写时序段         
  85.         SETB DQ        ;数据写1时序               
  86. EBP:DJNZ 10H,$ ;写时序保持56us
  87.     SETB DQ        ;据写时序结束数         
  88.         DJNZ 11H,RKP ;数据字节数
  89.         RET                                   ;数据发送完成,程序返回!!!


复制代码



回复

使用道具 举报

ID:99987 发表于 2019-5-25 15:48 | 显示全部楼层
此汇编程序不完整,无法工作。
回复

使用道具 举报

ID:559519 发表于 2019-6-14 12:58 | 显示全部楼层
程序不完整  TAB表格并没有定义   缺少0-9的LED显示定义
回复

使用道具 举报

ID:981034 发表于 2021-11-26 10:01 | 显示全部楼层
没法编译
回复

使用道具 举报

ID:404454 发表于 2022-2-10 09:31 | 显示全部楼层
会用汇编的都是牛人。
回复

使用道具 举报

ID:1032257 发表于 2022-6-18 09:27 来自手机 | 显示全部楼层
有没有大佬能补充一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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