⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad1405.lst

📁 ds18b20的驱动程序
💻 LST
字号:
A51 MACRO ASSEMBLER  AD1405                                                               09/22/2008 19:31:29 PAGE     1


MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN AD1405.OBJ
ASSEMBLER INVOKED BY: D:\Program Files\Keil\C51\BIN\A51.EXE AD1405.ASM SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ; 文件名:AD1405.ASM
                       2     ; 程序功能:数字温度计 ,已调好
                       3     
  0020                 4            A_BIT   EQU  20H     ;存放个位数变量
  0021                 5            B_BIT   EQU  21H     ;存放十位数变量
  0038                 6            FLAG    EQU  38H     ;DS18B20是否存在标志
  00A5                 7            DQ      EQU  P2.5    ;DQ引脚由P2.5控制  
0000                   8       MAIN:                     ;主程序标号
0000 1108              9            ACALL  RE_TEMP      ;对传感器设置及读取 
0002 118B             10            ACALL   TURN     ;转化温度子程序        
0004 119C             11            ACALL DISPLAY        ;显示子程序
0006 80F8             12            JMP MAIN             ;循环                   
                      13      
0008                  14       RE_TEMP:         ;对DS18B20初始化及读取
0008 D2A5             15            SETB   DQ           
000A 1125             16            ACALL  RESET_1820    ;调用复位子程序
000C 203801           17            JB   FLAG, ST        ;判断DS1820是否存在?
000F 22               18            RET                                           
                      19      
0010                  20       ST:                       ; DS18B20存在
0010 74CC             21            MOV   A,#0CCH        ;跳过ROM匹配 
0012 114F             22            ACALL WRITE_1820     ;写入数据
0014 7444             23            MOV  A,#44H          ;发出温度转换命令
0016 114F             24            ACALL WRITE_1820     ;写入数据 
0018 1125             25            ACALL  RESET_1820    ;准备读温度前先复位
001A 74CC             26            MOV  A,#0CCH         ;跳过ROM匹配
001C 114F             27            ACALL WRITE_1820     ;写入数据
001E 74BE             28            MOV  A,#0BEH         ;发出读温度命令
0020 114F             29            ACALL WRITE_1820     ;写入数据
0022 1167             30            ACALL READ_1820      ;读出温度数据         
0024 22               31            RET                                         
                      32     
0025                  33       RESET_1820:  ;复位(有具体的时序要求)                       
0025 D2A5             34            SETB  DQ       
0027 00               35            NOP
0028 C2A5             36            CLR   DQ       
                      37      ;――――――――――――
                      38      ;主机发出延时537微秒的复位低脉冲
002A 7903             39            MOV  R1,#3
002C 786B             40        DLY: MOV  R0,#107
002E D8FE             41            DJNZ R0,$
0030 D9FA             42            DJNZ R1,DLY
                      43      ;――――――――――――
                      44      ;然后拉高数据线
0032 D2A5             45            SETB  DQ        
0034 00               46            NOP
0035 00               47            NOP
0036 00               48            NOP
                      49      ;――――――――――――  
0037 7825             50            MOV  R0,#25H        
0039 30A504           51        T2: JNB   DQ ,T3       ;等待DS18B20回应
003C D8FB             52            DJNZ  R0, T2
003E 8004             53            JMP  T4          
                      54      ;――――――――――――
0040 D238             55        T3: SETB  FLAG      ;置标志位,表示DS1820存在
0042 8004             56            JMP  T5
                      57      ;――――――――――――
0044 C238             58        T4: CLR   FLAG     ;清标志位,表示DS1820不存在     
A51 MACRO ASSEMBLER  AD1405                                                               09/22/2008 19:31:29 PAGE     2

0046 8004             59            JMP  T7
                      60       ;――――――――――――
0048 7875             61        T5: MOV  R0,#117
004A D8FE             62        T6: DJNZ R0,T6           ;时序要求延时一段时间
                      63      ;――――――――――――
004C D2A5             64        T7: SETB   DQ        
004E 22               65            RET                                           
                      66      ;――――――――――――
                      67     
004F                  68       WRITE_1820: ;写入DS18B20(有具体的时序要求)
004F 7A08             69            MOV  R2,#8           ;一共8位数据
0051 C3               70            CLR  C
0052                  71         WR1:
0052 C2A5             72            CLR  DQ            ;总线低位,开始写入  
0054 7B07             73            MOV  R3,#7
0056 DBFE             74            DJNZ R3,$            ;保持16微秒以上
0058 13               75            RRC  A  ;把字节DATA分成8个BIT环移给C
0059 92A5             76            MOV  DQ,  C        ;写入一个BIT
005B 7B17             77            MOV  R3,#23
005D DBFE             78            DJNZ R3,$            ;等待
005F D2A5             79            SETB  DQ           ;重新释放总线
0061 00               80            NOP
0062 DAEE             81            DJNZ R2,WR1          ;写入下一个BIT
0064 D2A5             82            SETB  DQ          
0066 22               83            RET                                            
                      84     
0067                  85        READ_1820: ;将温度高位和低位从DS18B20中读出
0067 7C02             86            MOV  R4,#2           ; 读出两个字节的数据
0069 7929             87            MOV  R1,#29H     ;低位存入29H,高位存入28h
006B                  88        RE0:
006B 7A08             89            MOV R2,#8           ;数据一共有8位
006D                  90        RE1:                  
006D C3               91            CLR C
006E D2A5             92            SETB  DQ          
0070 00               93            NOP
0071 00               94            NOP                                 
0072 C2A5             95            CLR   DQ          ;读前总线保持为低               
0074 00               96            NOP
0075 00               97            NOP
0076 00               98            NOP
0077 D2A5             99            SETB  DQ          ;开始读总线释放                 
0079 7B09            100            MOV   R3,#9
007B                 101        RE2:   
007B DBFE            102            DJNZ  R3,RE2        ;延时18微妙
007D A2A5            103           MOV C, DQ         ;从总线读到一个BIT                  
007F 7B17            104           MOV R3,#23
0081                 105       RE3:                    ;
0081 DBFE            106           DJNZ R3,RE3         ;等待100秒
0083 13              107           RRC  A              ;把读得的位价值环移给A
0084 DAE7            108           DJNZ  R2,RE1        ;读下一个BIT
0086 F7              109           MOV  @R1,A
0087 19              110           DEC  R1
0088 DCE1            111           DJNZ R4,RE0
008A 22              112           RET                                         
                     113     
008B                 114       TURN: 
008B E529            115           MOV  A,29H
008D A240            116           MOV  C,40H          ;将28中的最低位移入C
008F 13              117           RRC  A
0090 A241            118           MOV  C,41H
0092 13              119           RRC  A
0093 A242            120           MOV  C,42H
0095 13              121           RRC  A
0096 A243            122           MOV  C,43H
0098 13              123           RRC  A
0099 F529            124           MOV  29H,A
A51 MACRO ASSEMBLER  AD1405                                                               09/22/2008 19:31:29 PAGE     3

009B 22              125           RET                                           
                     126     
009C                 127       DISPLAY:   ;将29H中的十六进制数成10进制
009C E529            128           MOV  A,29H         
009E 75F00A          129           MOV  B,#10             ;10进制/10=10进制
00A1 84              130           DIV  AB
00A2 F521            131           MOV  B_BIT, A        ;十位在A
00A4 85F020          132           MOV  A_BIT, B        ;个位在B
00A7 9000D6          133           MOV  DPTR,#TABLE     ;指定查表启始地址
00AA 7804            134           MOV  R0,#4
00AC                 135       DP1:
00AC 79FA            136           MOV R1, #250          ;显示1000次
00AE                 137       LOOP:
00AE E520            138           MOV A,A_BIT          ;取个位数
00B0 93              139           MOVC A,@A+DPTR       ;查个位数的7段代码
00B1 F580            140           MOV  P0,A            ;送出个位的7段代码
00B3 C2A1            141           CLR  P2.1            ;开个位显示
00B5 11C9            142           ACALL DELAY          ;
00B7 D2A1            143           SETB  P2.1
00B9 E521            144           MOV A,B_BIT          ;取十位数
00BB 93              145           MOVC  A,@A+DPTR      ;查十位数的7段代码
00BC F580            146           MOV  P0,A            ;送出个十位的7段代码
00BE C2A0            147           CLR  P2.0            ;开十位显示
00C0 11C9            148           ACALL  DELAY         ;显示1MS
00C2 D2A0            149           SETB  P2.0
00C4 D9E8            150           DJNZ  R1,LOOP        ;250次没完循环
00C6 D8E4            151           DJNZ  R0,DP1         ;4个250次没完循环
00C8 22              152           RET                                         
00C9                 153        DELAY:  ;10Ms延时
00C9 7C05            154           MOV  R4,#5
00CB 7E64            155               MOV  R6,#100
00CD 7FFA            156               MOV  R7, #250
00CF DFFE            157           DJNZ R7,$
00D1 DEFE            158               DJNZ R6, $
00D3 DCFE            159               DJNZ R4, $
00D5 22              160           RET                                           
                     161     
                     162     
00D6                 163       TABLE:       ;数码管共阳极0~9代码
00D6 C0F9A4B0        164           DB 0C0H,0F9H,0A4H,0B0H,99H
00DA 99                      
00DB 9282F880        165           DB 92H,82H,0F8H,80H,90H                       
00DF 90                      
                     166     
                     167           END                                          
                                
                             
A51 MACRO ASSEMBLER  AD1405                                                               09/22/2008 19:31:29 PAGE     4

SYMBOL TABLE LISTING
------ ----- -------


N A M E             T Y P E  V A L U E   ATTRIBUTES

A_BIT. . . . . . .  N NUMB   0020H   A   
B. . . . . . . . .  D ADDR   00F0H   A   
B_BIT. . . . . . .  N NUMB   0021H   A   
DELAY. . . . . . .  C ADDR   00C9H   A   
DISPLAY. . . . . .  C ADDR   009CH   A   
DLY. . . . . . . .  C ADDR   002CH   A   
DP1. . . . . . . .  C ADDR   00ACH   A   
DQ . . . . . . . .  B ADDR   00A0H.5 A   
FLAG . . . . . . .  N NUMB   0038H   A   
LOOP . . . . . . .  C ADDR   00AEH   A   
MAIN . . . . . . .  C ADDR   0000H   A   
P0 . . . . . . . .  D ADDR   0080H   A   
P2 . . . . . . . .  D ADDR   00A0H   A   
RE0. . . . . . . .  C ADDR   006BH   A   
RE1. . . . . . . .  C ADDR   006DH   A   
RE2. . . . . . . .  C ADDR   007BH   A   
RE3. . . . . . . .  C ADDR   0081H   A   
READ_1820. . . . .  C ADDR   0067H   A   
RESET_1820 . . . .  C ADDR   0025H   A   
RE_TEMP. . . . . .  C ADDR   0008H   A   
ST . . . . . . . .  C ADDR   0010H   A   
T2 . . . . . . . .  C ADDR   0039H   A   
T3 . . . . . . . .  C ADDR   0040H   A   
T4 . . . . . . . .  C ADDR   0044H   A   
T5 . . . . . . . .  C ADDR   0048H   A   
T6 . . . . . . . .  C ADDR   004AH   A   
T7 . . . . . . . .  C ADDR   004CH   A   
TABLE. . . . . . .  C ADDR   00D6H   A   
TURN . . . . . . .  C ADDR   008BH   A   
WR1. . . . . . . .  C ADDR   0052H   A   
WRITE_1820 . . . .  C ADDR   004FH   A   


REGISTER BANK(S) USED: 0 

ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -