求援DS18B20汇编程序有问题请帮我看看 点击:623 | 回复:0



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2004-05-23 19:55:00
楼主
我的程序读不出来.谁能把程序(已通过)发给我看看吗。这是我的程序不能正确显示,你也可以帮我看看那里错了。谢谢了!!!这是我毕业设计中的一段。很紧急!!1   ;温度转换和读取   ;|---------------------------获取单个ds1820转化的温度值的应用程序,P1.3接ds1820 |    TEMPER_L EQU 16H    TEMPER_H EQU 15H    TEMPER_NUM EQU 17H    TEMPER_P EQU 18H    DQ BIT P1.3       ORG 0000H    AJMP MAIN       ORG 0020H   MAIN: MOV SP,#60H    LCALL GET_TEMP    SJMP $   GET_TEMP:    CLR EA ;使用ds1820一定要禁止任何中断产生    LCALL INT ;调用初使化子程序    MOV A,#0CCH    LCALL WRITE ;送入跳过ROM命令    MOV A, #44H    LCALL WRITE ;送入温度转换命令    LCALL INT ;温度转换完全,再次初使化ds1820    MOV A,#0CCH    LCALL WRITE ;送入跳过ROM命令    MOV A,#0BEH    LCALL WRITE ;送入读温度暂存器命令    LCALL READ    MOV TEMPER_L,A ;读出温度值低字节存入TEMPER_L    LCALL READ    MOV TEMPER_H,A ; 读出谩度值高字节存入TEMPER_H    LCALL TEMPER_COV ;将从DS18B20中读出的温度数据进行转换    SETB EA    RET      INT:CLR EA ;初始化ds1820子程序   L0:CLR DQ ;ds1820总线为低复位电平    MOV R2,#200   L1:CLR DQ    DJNZ R2,L1 ;总线复位电平保持400us    SETB DQ ;释放ds1820总线    MOV R2,#30   L4:DJNZ R2,L4 ;释放ds1820总线保持60us    CLR C ;清存在信号    ORL C,DQ    JC L0 ;存在吗?不存在则重新来    MOV R6,#80   L5:ORL C,DQ    JC L3    DJNZ R6,L5    SJMP L0   L3:MOV R2,#240   L2:DJNZ R2,L2    RET      WRITE:CLR EA ;向ds1820写操作命令子程序    MOV R3,#8 ;写入ds1820的bit数,一个字节8个bit   WR1:SETB DQ    MOV R4,#8    RRC A ;把一个字节data(A)分成8个bit环移给 C    CLR DQ ;开始写入ds1820总线要处于复位(低)状态   WR2:DJNZ R4,WR2 ;ds1820总线复位保持16us    MOV DQ,C ;写入一个bit    MOV R4,#20   WR3:DJNZ R4,WR3 ;等待40us    DJNZ R3,WR1 ;写入下一个bit    SETB DQ ;重新释放ds1820总线    RET      READ: CLR EA    MOV R6,#8 ;连续读8个bit   RE1:CLR DQ ;读前总线保持为低    MOV R4,#4    NOP    SETB DQ ;开始读总线释放   RE2:DJNZ R4,RE2 ;持续8us    MOV C,DQ ;从ds1820总线读得一个bit    RRC A ;把读得的位值环移给 A    MOV R5,#30   RE3:DJNZ R5,RE3 ;持续60us    DJNZ R6,RE1 ;读下一个bit    SETB DQ ;重新释放ds1820总线    RET      ;-------------------将从DS18B20中读出的温度数据进行转换   TEMPER_COV:MOV TEMPER_P,#80H    MOV A,TEMPER_L ;判定小数点后精度    JNB ACC.3,TEMPER_COV0    MOV TEMPER_P,#85H      TEMPER_COV0:MOV A,#0F0H    ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值    SWAP A    MOV TEMPER_NUM,A    MOV A,TEMPER_H    ANL A,#07H    SWAP A    ORL A,TEMPER_NUM    MOV TEMPER_NUM,A ; 保存变换后的温度数据   ;-------------------将16进制的温度数据转换成压缩BCD码    MOV A,TEMPER_NUM    MOV B,#100    DIV AB    MOV TEMPER_NUM,A ;TEMPER_NUM存入百位    MOV A,#10    XCH A,B    DIV AB ;A是BCD码的十位B是个位    MOV TEMPER_H,A    MOV TEMPER_L,B   ;-------------------显示温度部分    MOV R0,TEMPER_NUM ;百位    MOV R1,#01H    LCALL TRT    MOV R0,TEMPER_H ;十位    MOV R1,#02H    LCALL TRT    MOV R0,TEMPER_L ;个位    MOV R1,#03H    LCALL TRT    MOV R0,TEMPER_P ;小数    MOV R1,#04H    LCALL TRT    RET      ;TRT为发送LED显示子程序


热门招聘
相关主题

官方公众号

智造工程师