找回密码
 立即注册

QQ登录

只需一步,快速开始

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

18B20这个程序怎么改才能在12c5a60s2单片机上使用?汇编语言

[复制链接]
跳转到指定楼层
楼主
ID:261025 发表于 2020-6-3 12:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在的这个程序在at89s51上完全正常  在12c5a60s2上只显示0.0   怎么修改才能让它在12c5a60s2上使用

                                                                                   
                                                                        DQ      BIT      P3.0;   18b20                                                                                 
                                                                            TEMPL       DATA  26H                    
                                                                                TEMPH       DATA  27H        
                                                                                                                                                                                       
                                                                                TEMPHC      DATA  2AH
                                        TEMPLC      DATA  2BH
                                                                                TEMP_ZH     DATA  2CH

                                                                                FLAG    EQU      6EH                          ;温度标志位
                  
                    MAIN:      
                                                                            LCALL   RE_TEMP   ; 读温度                                                                                             
                                                                                LCALL   CONVER    ; 处理温度  
                                                                                LCALL   DISPBCD    ; BCD 码温度值                                                                                          
                                                                                LCALL   DISPLAY_INT ; 显示温度                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                        LJMP MAIN
;***************************************************************     
;温度读取                                   
;************************************************************  ***                                 
                                        RE_TEMP:                                                            
                                                                                SETB      DQ                                                              
                                                                                ACALL                  INIT_18B20                                                   
                                                                                JB                          FLAG, ST                                                         
                                                                                RET                                                                  
                                        ST:                                                                  
                                                                                MOV                         A, #0CCH                                                        
                                                                                ACALL                  WRITE_18B20                                                   
                                                                                MOV                          A, #44H                                                         
                                                                                ACALL                  WRITE_18B20                                                   
                                                                                ACALL                  INIT_18B20                                                   
                                                                                MOV                          A, #0CCH                                                        
                                                                                ACALL                  WRITE_18B20                                                   
                                                                                MOV                          A, #0BEH                                                        
                                                                                ACALL                 WRITE_18B20                                                   
                                                                                ACALL                 READ_18B20                                                   
                                                                                RET   
;***************************************************************     
;写DS18B20                                   
;***************************************************************                                   
                                        WRITE_18B20:                                                         
                                                                                MOV                   R2, #8                                                         
                                                                                CLR                   C                                                               
                                        WR1:                                                                                 
                                                                                CLR                   DQ                                                              
                                                                                MOV                   R3, #6                                                         
                                                                                DJNZ                  R3, $                                                         
                                                                                RRC                   A                                                               
                                                                                MOV                   DQ, C                                                           
                                                                                MOV                   R3, #23                                                         
                                                                                DJNZ                  R3, $                                                         
                                                                                SETB                  DQ                                                            
                                                                                NOP                                                                                   
                                                                                DJNZ                  R2, WR1                                                        
                                                                                SETB                  DQ                                                            
                                                                                RET                                                                                                                                                         
;***************************************************************     
;初始化DS18B20                                
;***************************************************************                                
                                        INIT_18B20:                                                         
                                                                                SETB      DQ                                                            
                                                                                NOP                                                                                   
                                                                                CLR                   DQ                                                              
                                                                                MOV                   R1, #3                                                         
                                        DLY:                      MOV                   R0, #107                                                        
                                                                                DJNZ                  R0, $                                                         
                                                                                DJNZ                  R1, DLY                                                        
                                                                                SETB                  DQ                                                            
                                                                                NOP                                                                                 
                                                                                NOP                                                                                 
                                                                                NOP                                                                                   
                                                                                MOV                   R0, #25H                                                        
                                        T2:                 JNB       DQ, T3                                                         
                                                                                DJNZ      R0, T2                                                         
                                                                                JMP       T4                                                              
                                    T3:                        SETB      FLAG                                                           
                                                                                JMP       T5                                                              
                                        T4:                 CLR       FLAG                                                            
                                                                                JMP       T7                                                              
                                        T5:                 MOV       R0, #117                                                        
                                        T6:                 DJNZ      R0, T6                                                         
                                        T7:                 SETB      DQ                                                            
                                                                                RET                                                                  
                                                                                
;***************************************************************     
;读DS18B20                                 
;***************************************************************                                                                                          
;从DS18B20中读出温度低位、高位和报警值TH、TL
;存入26H、27H、28H、29H
;============================================================
READ_18B20:  
         MOV R4,#4            ; 将温度高位和低位从DS18B20中读出
         MOV R1,#26H          ; 存入26H、27H、28H、29H
RE00:    MOV R2,#8
RE01:    CLR C
         SETB DQ
         NOP
         NOP
         CLR DQ         ;读前总线保持为低
         NOP
         NOP
         NOP
         SETB DQ        ;开始读总线释放
         MOV R3,#09           ;延时18微妙
         DJNZ R3,$
         MOV C,DQ      ;从DS18B20总线读得一个BIT
         MOV R3,#23
         DJNZ R3,$            ;等待46微妙
         RRC A                ;把读得的位值环移给A
         DJNZ R2,RE01         ;读下一个BIT
         MOV @R1,A
         INC R1
         DJNZ R4,RE00
         RET                                                                                          
;***************************************************************     
;温度转换                                    
;***************************************************************                                
CONVER:                                                              
;  处理温度 BCD 码子程序
;****************************************************
CONVTEMP:      MOV  A,TEMPH       ;判温度是否零下
               ANL  A,#80H
               JZ  TEMPC1         ;温度零上转
               CLR  C
               MOV  A,TEMPL       ;二进制数求补(双字节)
               CPL  A             ;取反加1
               ADD  A,#01H
               MOV  TEMPL,A
               MOV  A,TEMPH       ;-
               CPL  A
               ADDC  A,#00H
               MOV  TEMPH,A          ;TEMPHC HI =符号位
               MOV  TEMPHC,#0BH
               SJMP  TEMPC11

TEMPC1:        MOV  TEMPHC,#0AH     ;
TEMPC11:       MOV  A,TEMPHC
               SWAP  A
               MOV  TEMPHC,A
               MOV  A,TEMPL
               ANL  A,#0FH             ;乘0.0625
               MOV  DPTR,#TEMPDOTTAB
               MOVC  A,@A+DPTR
               MOV  TEMPLC,A            ;TEMPLC  LOW=小数部分 BCD

               MOV  A,TEMPL             ;整数部分
               ANL  A,#0F0H
               SWAP  A
               MOV  TEMPL,A
               MOV  A,TEMPH
               ANL  A,#0FH
               SWAP  A
               ORL  A,TEMPL
               MOV  TEMP_ZH,A           ;组合后的值存入TEMP_ZH
               LCALL  HEX2BCD1
               MOV  TEMPL,A
               ANL  A,#0F0H
               SWAP  A
               ORL  A,TEMPHC            ;TEMPHC LOW = 十位数 BCD
               MOV  TEMPHC,A
               MOV  A,TEMPL
               ANL  A,#0FH
               SWAP  A                  ;TEMPLC HI = 个位数 BCD
               ORL  A,TEMPLC
               MOV  TEMPLC,A
               MOV  A,R7
               JZ  TEMPC12
               ANL  A,#0FH
               SWAP  A
               MOV  R7,A
               MOV  A,TEMPHC            ;TEMPHC HI = 百位数 BCD
               ANL  A,#0FH
               ORL  A,R7
               MOV  TEMPHC,A
TEMPC12:       RET
;===========================================================
;显示区 BCD 码温度值刷新子程序
;===========================================================
DISPBCD:      MOV  A,TEMPLC
              ANL  A,#0FH
              MOV  70H,A                 ;小数位
              MOV  A,TEMPLC
              SWAP  A
              ANL  A,#0FH
              MOV  71H,A                 ;个位
              MOV  A,TEMPHC
              ANL  A,#0FH
              MOV  72H,A                 ;十位
              MOV  A,TEMPHC
              SWAP  A
              ANL  A,#0FH
              MOV  73H,A                 ;百位
              MOV  A,TEMPHC
              ANL  A,#0F0H
              CJNE  A,#010H,DISPBCD0
              SJMP  DISPBCD2
;========================================
DISPBCD0:     MOV  A,TEMPHC
              ANL  A,#0FH
              JNZ  DISPBCD2               ;十位数是0
              MOV  A,TEMPHC
              SWAP  A
              ANL  A,#0FH
              MOV  73H,#0AH            ;符号位不显示
              MOV  72H,A               ;十位数显示符号
DISPBCD2:     RET
;***************************************************************     
;显示温度整数部分                                    
;***************************************************************                                                                     
DISPLAY_INT:   
;百位                                                                                 
                                                          MOV A,73H;
                                                          MOV                          DPTR, #TAB                                                      
                                                          MOVC      A,@A+DPTR
                                                          MOV P0,A;
                                                          CLR P1.4
                                                          CALL  XSYS
                                                          SETB P1.4;
;十位
DIST:                                                     MOV A,72H;   
                                              MOV                          DPTR, #TAB                                                      
                                                          MOVC      A,@A+DPTR
                                                          MOV P0,A;
                                                          CLR P1.5
                                                          CALL  XSYS
                                                          SETB P1.5;
;个位
DISY:                                               MOV A,71H;                                          
                                                          MOV                          DPTR, #TAB                                                      
                                                          MOVC      A,@A+DPTR
                                                          MOV P0,A;
                                                          CLR P1.6
                                                          CLR P0.7
                                                          CALL  XSYS
                                                          SETB P0.7;
                                                          SETB P1.6;
;小数
                                                          MOV A,70H;
                                                          MOV                          DPTR, #TAB                                                      
                                                          MOVC      A,@A+DPTR
                                                          MOV P0,A;
                                                          CLR P1.7
                                                          CALL  XSYS
                                                          SETB P1.7;
                                                                                                                                                                                                                                                         
                        RET                                                                  

;===================================================================
;显示延时
XSYS:
DELAY200US:                        ;@11.0592MHz
        NOP
        NOP
        NOP
        PUSH 30H
        PUSH 31H
        MOV 30H,#2
        MOV 31H,#179
NES:
        DJNZ 31H,NES
        DJNZ 30H,NES
        POP 31H
        POP 30H
        RET

;***************************************************************
;单字节十六进制转 BCD
;******************************************************
HEX2BCD1:   MOV  B,#064H         
            DIV  AB               
            MOV  R7,A            
            MOV  A,#0AH
            XCH  A,B
            DIV  AB               
            SWAP  A
            ORL  A,B
            RET
;***************************************************************
; 数据查表
;***************************************************************                                       
          TAB:           DB  0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h,0FFH,0BFH; ;共阳
                         ;                0         1          2           3        4   5        6        7         8         9         空           -
        
;  小数部分码表
;-----------------------------------------------------------
TEMPDOTTAB:  DB   00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
             DB   06H,07H,08H,08H,09H,09H

;====================================================

             END


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

使用道具 举报

沙发
ID:142666 发表于 2020-6-3 21:19 | 只看该作者
晕了,汇编,C语言的要吗?
回复

使用道具 举报

板凳
ID:261025 发表于 2020-6-4 10:00 | 只看该作者
yxj141 发表于 2020-6-3 21:19
晕了,汇编,C语言的要吗?

C语言玩不转  稍微改点就出错
这个程序问题已解决了  网上有个帖子也是类似的问题  他边讲解变修改最后能正常工作了  我参考他的程序用他说的软件生成了汇编延时解决的  看他的C语言真简单  轮到汇编程序真长
回复

使用道具 举报

地板
ID:401564 发表于 2020-6-4 10:53 | 只看该作者
其它代码不用动,只改动延时部分就可以了
你要对着STC12C5A60S2的汇编指令慢慢的修改延时就可以了,12C系列的指令时钟和AT89S51是不一样的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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