打印

今年刚开单片机课程,问大家一个18B20问题

[复制链接]
1987|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianheyun|  楼主 | 2011-3-28 19:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
tianheyun|  楼主 | 2011-3-28 19:57 | 只看该作者
俺把程序补上吧...          DQ BIT P3.3         //18B20单口数据总线         
                  TEMP EQU 36H         //读出(温度)高速暂存器(ram)的2个字节去掉小数和负数的存放单元
                   RS BIT P2.0         //1602 命令.数据选择端
                   RW BIT P2.1   //1602 写读( 数据.命令)选择端
                   E  BIT P2.2        //1602 脉冲控制
                   COM EQU 40H  //1602命令存放单元
                   DAT EQU 41H         //1602 数据存放单元
                  ORG 0000H
                  AJMP MAIN                  
                  ORG 0020H
MAIN:  LCALL init_1602           //1602液晶初始化
A5:   LCALL TEMP                  //温度转换及采集
       LCALL DOWITH            //温度数据处理
           lcall display_1602                //1602液晶显示
           SJMP A5

TEM:  LCALL INIT_1820  //温度采集子程序
     MOV A,#0CCH         //跳过ROM
     LCALL WRITE
     MOV A,#44H                //温度转换指令
     LCALL WRITE
         mov r2,#50                          //延时最少750ms
m5:         LCALL DELAY_10MS
         djnz r2,m5
         LCALL INIT_1820
     MOV A,#0CCH
     LCALL WRITE
     MOV A,#0BEH                //读暂存器温度指令
     LCALL WRITE
         LCALL INIT_1820       
         LCALL READ
         RET

INIT_1820:  SETB DQ         //初始化子程序
            NOP
                        NOP                  
M3:        CLR DQ          
                        MOV R3,#35                //总线拉低延时480-960us之间        700us
                        LCALL DELAY1
                        SETB DQ
                        MOV R3,#20          //总线释放延时15-60us之间         40us
                    DJNZ R3,$
                        JNB DQ,M2         //判断DQ是否被拉低
                        AJMP M3
M2:                        MOV R3,#7
            LCALL DELAY1        //存在(应答)脉冲时间 60—240us        140us
                        SETB DQ
                        MOV R3,#15
                        LCALL DELAY1                    
                        NOP
                    RET

WRITE:    CLR C                  //写入子程序
          MOV R2,#8         
          setb dq
L1:       nop
                  nop                                //两次写入的位数据保持至少1Us
          CLR DQ                   //写时间片开始
          MOV R3,#4           //拉低总线至1us以上         8us
                  DJNZ R3,$
                  RRC A
                   MOV DQ,C                   //写入数据
                  MOV R3,#40
                  DJNZ R3,$                   //15us—60us内18b20进行数据采样        80      
                  DJNZ R2,L1
                  SETB DQ
                  RET

READ:      MOV R1,#2                //读子程序
          MOV R0,#30H        //低八位存放30h单元
M6:                    MOV R2,#8
          SETB DQ          
                  CLR A                                
M4:      nop                          //两次写入的位数据保持至少1Us
                  nop
          CLR C       
                  CLR DQ                  //读时间片开始
          MOV R3,#2                  //拉低总线至1us以上  4us
                  DJNZ R3,$
                  SETB DQ                   //释放总线
                  MOV R3,#3                   //从读时间片开始15us内主机进行数据采用        6us
                  DJNZ R3,$                 
                  MOV C,DQ                     //读数据线
                  RRC A
              MOV R3,#35
                   DJNZ R3,$                //读时间片最少60us—120us之间           70us       
                   SETB DQ
                  DJNZ R2,M4
                  MOV @R0,A
                  INC R0                 //高八位存放31h单元
                     DJNZ R1,M6
                  RET   

DOWITH:  MOV A,30H        //数据处理子程序(2个温度寄存器) 只保留高字节的低3位和低字节的高4位 组成新的字节转换成十进制存放在百位33h 十位34h 个位35h单元
             ANL A,#0F0H
             SWAP A
             MOV TEMP,A
             MOV A,31H
             ANL A,#07H
             SWAP A
             ORL A,TEMP
             MOV B,#100
             DIV AB
             MOV 33H,A
                 MOV A,B
                 MOV B,#10
                 DIV AB
                 MOV 34H,A
             MOV 35H,B
             RET





display_1602:
    MOV DPTR,#TABL
    MOV COM,#83H                         //1602第一行显示温度值
        LCALL WRITE_1602_COM
        MOV A,33H
    MOVC A,@A+DPTR
        MOV DAT,A
        lcall WRITE_1602_DAT
    MOV COM,#84H
        LCALL WRITE_1602_COM
        MOV A,34H
        MOVC A,@A+DPTR         //转换成ASCII码让液晶显示
        MOV DAT,A
        lcall WRITe_1602_DAT
    MOV COM,#85H
        LCALL WRITE_1602_COM
        MOV A,35H
    MOVC A,@A+DPTR
        MOV DAT,A
        lcall WRITE_1602_DAT
        ret
TABL:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H         

INIT_1602: MOV COM,#38H
           LCALL  WRITE_1602_COM                   //初始化1602
                   MOV COM,#06H
           LCALL  WRITE_1602_COM
                   MOV COM,#01H
           LCALL  WRITE_1602_COM
                   MOV COM,#0FH
           LCALL  WRITE_1602_COM
                   RET

WRITE_1602_COM:         CLR RS
                 CLR rw
                                 SETB E                                         //向1602写命令
                                 MOV p0,COM
                                 MOV R7,#200
                                 LCALL DELAY_10MS
                                 DJNZ R7,$
                                 CLR E
                                 RET

WRITe_1602_DAT:   SETB RS                         //向1602写数据
                 CLR rw
                                 SETB E
                                 MOV p0,DAT
                                MOV R7,#200
                                 LCALL DELAY_10MS
                                 DJNZ R7,$
                                 CLR E
                                 RET               

DELAY1:MOV R2,#5                  //20us 延时改变R3可改变延时
M1:   NOP
           DJNZ R2,M1
           DJNZ R3,DELAY1
           RET


DELAY_10ms: MOV R7,#10
W2:        MOV R6,#250
W1:        NOP
                        NOP
                        DJNZ R6,W1
                        DJNZ R7,W2
                        RET       
                end

使用特权

评论回复
板凳
stycx| | 2011-3-28 20:01 | 只看该作者
找c语言的代码吧  汇编估计没几个人有耐心看

使用特权

评论回复
地板
TAOXINSUN| | 2011-3-28 20:31 | 只看该作者
发个c看看

使用特权

评论回复
5
tianheyun|  楼主 | 2011-3-28 21:00 | 只看该作者
学校只教汇编,我无语了,难道就这样解决不成了吗

使用特权

评论回复
6
huangqi412| | 2011-3-28 21:45 | 只看该作者
先找别人现成的看看吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

157

帖子

1

粉丝