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

📄 18b2.lst

📁 18b20通过对外界温度的采集把收集的信号通过数据转换和处理后通过数码管进行显示。
💻 LST
字号:
A51 MACRO ASSEMBLER  18B2                                                                 04/25/2008 09:07:01 PAGE     1


MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN 18b2.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 18b2.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

  0036                 1     TEMPER_L EQU  36H ;从DS18B20中读回高位,低位暂存区
  0035                 2           TEMPER_H EQU 35H ;
  0060                 3           TEMPER_NUM EQU 60H;温度值存储
  0061                 4           TEMPER_GE EQU 61H
  0062                 5           TEMPER_SHI EQU 62H
  0063                 6           TEMPER_SAVE EQU 63H
  0000                 7           FLAG1  BIT   00H
  0001                 8           FLAG2  BIT   01H
                       9           
  00A7                10           DQ     BIT   P2.7;单总线口
0000                  11             ORG  0000H
0000 0130             12             AJMP MAIN
0030                  13             ORG  0030H
0030 758170           14           MAIN: MOV SP,#70H 
0033 120040           15                      LCALL   GET_TEMPER 
0036 1200CE           16                      LCALL   TEMPER_COV 
0039 12011C           17               LCALL   DISPLAY
003C 020030           18                      LJMP    MAIN
003F 00               19                      NOP 
                      20           ;**************************************************
                      21           ;读出转换后的温度值 
                      22           ;**************************************************
0040                  23           GET_TEMPER: 
0040 D2A7             24                     SETB      DQ ; 定时入口 
0042 1200F6           25           BCD:      LCALL     INIT_1820 
0045 200003           26                     JB            FLAG1,S22 
0048 020042           27                     LJMP      BCD ; 若DS18B20不存在则返回 
004B 120144           28           S22:     LCALL     DELAY1 
004E 74CC             29                    MOV        A,#0CCH ; 跳过ROM匹配------0CC命令
0050 120092           30                    LCALL     WRITE_1820 
0053 7444             31           MOV A,#44H ; 发出温度转换命令 
0055 120092           32           LCALL WRITE_1820 
0058 00               33           NOP 
0059 12013F           34           LCALL DELAY 
005C 1200F6           35           CBA:LCALL INIT_1820 
005F 200003           36           JB FLAG1,ABC 
0062 02005C           37           LJMP CBA 
0065 120144           38           ABC:LCALL DELAY1 
0068 74CC             39           MOV A,#0CCH ; 跳过ROM匹配 
006A 120092           40           LCALL WRITE_1820 
006D 74BE             41           MOV A,#0BEH ; 发出读温度命令 
006F 120092           42           LCALL WRITE_1820 
0072 1200AA           43           LCALL READ_18200 ;READ_1820 
0075 22               44           RET 
                      45           ;**************************************************************
                      46           ;读DS18B20的程序,从DS18B20中读出一个字节的数据 
                      47           ;**************************************************************
0076                  48           READ_1820: 
0076 7A08             49           MOV R2,#8 
0078                  50           RE1: 
0078 C3               51           CLR C 
0079 D2A7             52           SETB DQ 
007B 00               53           NOP 
007C 00               54           NOP 
007D C2A7             55           CLR DQ 
007F 00               56           NOP 
0080 00               57           NOP 
0081 00               58           NOP 
A51 MACRO ASSEMBLER  18B2                                                                 04/25/2008 09:07:01 PAGE     2

0082 D2A7             59           SETB DQ 
0084 7B07             60           MOV R3,#7 
0086 DBFE             61           DJNZ R3,$ 
0088 A2A7             62           MOV C,DQ 
008A 7B17             63           MOV R3,#23 
008C DBFE             64           DJNZ R3,$ 
008E 13               65           RRC A 
008F DAE7             66           DJNZ R2,RE1 
0091 22               67           RET 
                      68           ;******************************************************
                      69           ;写DS18B20的程序 
                      70           ;******************************************************
0092                  71           WRITE_1820: 
0092 7A08             72           MOV R2,#8 
0094 C3               73           CLR C 
0095                  74           WR1: 
0095 C2A7             75           CLR DQ 
0097 7B06             76           MOV R3,#6 
0099 DBFE             77           DJNZ R3,$ 
009B 13               78           RRC A 
009C 92A7             79           MOV DQ,C 
009E 7B17             80           MOV R3,#23 
00A0 DBFE             81           DJNZ R3,$ 
00A2 D2A7             82           SETB DQ 
00A4 00               83           NOP 
00A5 DAEE             84           DJNZ R2,WR1 
00A7 D2A7             85           SETB DQ 
00A9 22               86           RET
                      87           ;**************************************************** 
                      88           ;读DS18B20的程序,从DS18B20中读出两个字节的温度数据 
                      89           ;****************************************************
00AA                  90           READ_18200: 
00AA 7C02             91           MOV R4,#2 ; 将温度高位和低位从DS18B20中读出 
00AC 7936             92           MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H) 
00AE                  93           RE00: 
00AE 7A08             94           MOV R2,#8 
00B0                  95           RE01: 
00B0 C3               96           CLR C 
00B1 D2A7             97           SETB DQ 
00B3 00               98           NOP 
00B4 00               99           NOP 
00B5 C2A7            100           CLR DQ 
00B7 00              101           NOP 
00B8 00              102           NOP 
00B9 00              103           NOP 
00BA D2A7            104           SETB DQ 
00BC 7B07            105           MOV R3,#7 
00BE DBFE            106           DJNZ R3,$ 
00C0 A2A7            107           MOV C,DQ 
00C2 7B17            108           MOV R3,#23 
00C4 DBFE            109           DJNZ R3,$ 
00C6 13              110           RRC A 
00C7 DAE7            111           DJNZ R2,RE01 
00C9 F7              112           MOV @R1,A 
00CA 19              113           DEC R1 
00CB DCE1            114           DJNZ R4,RE00 
00CD 22              115           RET 
                     116           ;;**************************************************** 
                     117           ;将从DS18B20中读出的温度数据进行转换
                     118           ;;****************************************************  
00CE                 119           TEMPER_COV: 
00CE 74F0            120           MOV A,#0F0H 
00D0 5536            121           ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值 
00D2 C4              122           SWAP A 
00D3 F560            123           MOV TEMPER_NUM,A ;得到低四位
00D5 E536            124           MOV A,TEMPER_L 
A51 MACRO ASSEMBLER  18B2                                                                 04/25/2008 09:07:01 PAGE     3

00D7 30E302          125           JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值 
00DA 0560            126           INC TEMPER_NUM 
                     127     
00DC                 128           TEMPER_COV1: 
00DC 856061          129               mov temper_ge,temper_num
00DF E535            130           MOV A,TEMPER_H 
00E1 5407            131           ANL A,#07H 
                     132          
                     133           ;得到高四位,再与低四位相或得到值
00E3 75F010          134           MOV b,#16
00E6 A4              135                mul ab
00E7 2561            136                add a,temper_ge
00E9 75F00A          137                mov b,#10
00EC 84              138                div ab
00ED F562            139                mov temper_shi,a
                     140     
00EF 85F061          141                mov temper_ge,b        ; 保存变换后的温度数据 
00F2 12011C          142             lcall display
00F5 22              143           RET
                     144           ;;**************************************************** 
                     145           ;将16进制的温度数据转换成压缩BCD码 
                     146           ;;****************************************************
                     147           
                     148           
                     149        
                     150         
                     151       
                     152         
                     153         
                     154          
                     155           ;****************************************************
                     156           ;DS18B20初始化程序 
                     157           ;;****************************************************
00F6                 158           INIT_1820: 
00F6 D2A7            159           SETB DQ 
00F8 00              160           NOP 
00F9 C2A7            161           CLR DQ 
00FB 78FA            162           MOV R0,#250
00FD                 163           TSR1: 
00FD D8FE            164           DJNZ R0,TSR1 ; 延时520us 
00FF D2A7            165           SETB DQ 
0101 7825            166           MOV R0,#25H ;96US-25H 
0103                 167           TSR2: 
0103 D8FE            168           DJNZ R0,TSR2 
0105 30A703          169           JNB DQ,TSR3;如D0为低则复位成功,DS18B20存在 
0108 020110          170           LJMP TSR4 ; 延时 
010B                 171           TSR3: 
010B D200            172           SETB FLAG1 ; 置标志位,表示DS1820存在 
010D 020115          173           LJMP TSR5 
0110                 174           TSR4: 
0110 C200            175           CLR FLAG1 ; 清标志位,表示DS1820不存在 
0112 020119          176           LJMP TSR7 
0115                 177           TSR5: 
0115 786B            178           MOV R0,#06BH ;200US 
0117                 179           TSR6: 
0117 D8FE            180           DJNZ R0,TSR6 ; 延时 
0119                 181           TSR7: 
0119 D2A7            182           SETB DQ ;拉高总线
011B 22              183           RET 
                     184           ;*************************************************
                     185           ;数码显示程序
                     186           ;*************************************************
011C                 187           Display:
011C 900149          188            MOV DPTR,#disptab
011F E561            189            MOV  A,TEMPER_GE
0121 93              190            MOVC A,@A+DPTR
A51 MACRO ASSEMBLER  18B2                                                                 04/25/2008 09:07:01 PAGE     4

0122 2480            191                add a,#80h
0124 F580            192            MOV P0,A
0126 D2A1            193            setb P2.1
0128 313F            194            CALL DELAY
012A 313F            195            CALL DELAY
012C C2A1            196            clr P2.1
012E 900149          197            MOV DPTR,#disptab
0131 E562            198            MOV  A,TEMPER_SHI
0133 93              199            MOVC A,@A+DPTR
0134 F580            200            MOV P0,A
0136 D2A0            201            setb P2.0
0138 313F            202            CALL DELAY
013A 313F            203            CALL DELAY
013C C2A0            204            clr P2.0
013E 22              205            RET
013F                 206               DELAY:
013F 7EFA            207           MOV R6,#250;延时500us
0141 DEFE            208           DJNZ R6,$ 
0143 22              209           RET 
0144 7F20            210           DELAY1:MOV R7,#20H 
0146 DFFE            211           DJNZ R7,$ 
0148 22              212           RET 
0149 C0F9A4B0        213           disptab:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
014D 999282F8                
0151 8090                    
                     214                     
                     215                                       end
A51 MACRO ASSEMBLER  18B2                                                                 04/25/2008 09:07:01 PAGE     5

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


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

ABC. . . . . . . .  C ADDR   0065H   A   
ACC. . . . . . . .  D ADDR   00E0H   A   
B. . . . . . . . .  D ADDR   00F0H   A   
BCD. . . . . . . .  C ADDR   0042H   A   
CBA. . . . . . . .  C ADDR   005CH   A   
DELAY. . . . . . .  C ADDR   013FH   A   
DELAY1 . . . . . .  C ADDR   0144H   A   
DISPLAY. . . . . .  C ADDR   011CH   A   
DISPTAB. . . . . .  C ADDR   0149H   A   
DQ . . . . . . . .  B ADDR   00A0H.7 A   
FLAG1. . . . . . .  B ADDR   0020H.0 A   
FLAG2. . . . . . .  B ADDR   0020H.1 A   
GET_TEMPER . . . .  C ADDR   0040H   A   
INIT_1820. . . . .  C ADDR   00F6H   A   
MAIN . . . . . . .  C ADDR   0030H   A   
P0 . . . . . . . .  D ADDR   0080H   A   
P2 . . . . . . . .  D ADDR   00A0H   A   
RE00 . . . . . . .  C ADDR   00AEH   A   
RE01 . . . . . . .  C ADDR   00B0H   A   
RE1. . . . . . . .  C ADDR   0078H   A   
READ_1820. . . . .  C ADDR   0076H   A   
READ_18200 . . . .  C ADDR   00AAH   A   
S22. . . . . . . .  C ADDR   004BH   A   
SP . . . . . . . .  D ADDR   0081H   A   
TEMPER_COV . . . .  C ADDR   00CEH   A   
TEMPER_COV1. . . .  C ADDR   00DCH   A   
TEMPER_GE. . . . .  N NUMB   0061H   A   
TEMPER_H . . . . .  N NUMB   0035H   A   
TEMPER_L . . . . .  N NUMB   0036H   A   
TEMPER_NUM . . . .  N NUMB   0060H   A   
TEMPER_SAVE. . . .  N NUMB   0063H   A   
TEMPER_SHI . . . .  N NUMB   0062H   A   
TSR1 . . . . . . .  C ADDR   00FDH   A   
TSR2 . . . . . . .  C ADDR   0103H   A   
TSR3 . . . . . . .  C ADDR   010BH   A   
TSR4 . . . . . . .  C ADDR   0110H   A   
TSR5 . . . . . . .  C ADDR   0115H   A   
TSR6 . . . . . . .  C ADDR   0117H   A   
TSR7 . . . . . . .  C ADDR   0119H   A   
WR1. . . . . . . .  C ADDR   0095H   A   
WRITE_1820 . . . .  C ADDR   0092H   A   


REGISTER BANK(S) USED: 0 

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

⌨️ 快捷键说明

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