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

📄 456.lst

📁 随着CPU技术的发展
💻 LST
📖 第 1 页 / 共 4 页
字号:
A51 MACRO ASSEMBLER  456                                                                    23/03/08 16:07:03 PAGE     1


DOS MACRO ASSEMBLER A51 X4.86
OBJECT MODULE PLACED IN 456.O
ASSEMBLER INVOKED BY: C:\OMF51\BIN\A51.EXE K:\456\456.AQD DB SB XR RB(0) PR(456.LST) OJ(456.O) 

LOC  OBJ            LINE     SOURCE

  0030                 1                 TEMP_H EQU 30H
  0031                 2                 TEMP_L EQU 31H
  0032                 3                 TEMP_NUM EQU 32H
  0033                 4                 TEMP_BCD EQU 33H
  0034                 5                 COUNTER_H EQU 34H
  0035                 6                 COUNTER_L EQU 35H
  0036                 7                 BCD_H EQU 36H
  0037                 8                 BCD_L EQU 37H
  0036                 9                 COUNTER EQU 36H
  0000                10                 FLAG1 BIT 00H
  0093                11                             DQ BIT P1.3
  0092                12                 LCD_E BIT P1.2
  0090                13                 LCD_RS BIT P1.0
  0091                14                 LCD_RW BIT P1.1
  0080                15                 LCD_DB EQU P0
  0094                16                 SWITCH BIT P1.4
  0095                17                 LARUM BIT P1.5
                      18     
                      19     
0000                  20                 ORG 0000H
0000 020030           21                 LJMP MAIN
                      22                 
0030                  23                 ORG 0030H
0030 758170           24     MAIN:       MOV SP,#70H
0033 D295             25                 SETB LARUM
0035 758905           26                 MOV TMOD,#05H       ;设定计数器0工作方式
0038 1201B5           27                 LCALL INI_1602      ;LCD初始化子程序调用
003B 120281           28                 LCALL TEXT
003E C294             29                 CLR SWITCH
                      30     
0040 120049           31     CYC:        LCALL TEMP          ;DS1820温度检测子程序调用
0043 1200CF           32                             LCALL CONVERSION    ;温度值转换子程序调用
0046 020040           33                 LJMP CYC            ;循环检测跳转
                      34     
                      35     ;********************************************************
                      36     ;                     DS1820温度检测模块
                      37     ;********************************************************
                      38     
0049 D293             39     TEMP:           SETB DQ
004B 120157           40     LP1:            LCALL INI_1820     ;DS18B20初始化子程序调用
004E 200003           41                 JB FLAG1,LP2
0051 02004B           42                             LJMP LP1           ;若DS18B20不存在则反复检测
                      43     
0054 74CC             44     LP2:            MOV A,#0CCH       ;DS1820跳过ROM匹配指令------0CCH
0056 120097           45                             LCALL WRITE_1820  ;调用DS1820写入子程序
0059 7444             46                             MOV A,#44H        ;发出温度转换命令
005B 120097           47                             LCALL WRITE_1820  ;调用DS1820写入子程序
                      48     
005E 1201AE           49                 LCALL MON      ;借用延时执行显示程序,提高利用率(模数转换)
0061 1202AD           50                 LCALL DP
                      51                 
0064 120157           52     CBA:            LCALL INI_1820     ;重新初始化
0067 200003           53                             JB FLAG1,ABC
006A 020064           54                             LJMP CBA
006D 74CC             55     ABC:        MOV A,#0CCH        ;跳过ROM匹配
006F 120097           56                             LCALL WRITE_1820   ;调用DS1820写入子程序
0072 74BE             57                             MOV A,#0BEH        ;DS1820读温度命令 ----0BEH
0074 120097           58                             LCALL WRITE_1820   ;调用DS1820写入子程序
A51 MACRO ASSEMBLER  456                                                                    23/03/08 16:07:03 PAGE     2

0077 1200AC           59                             LCALL READ_18200   ;调用DS1820读取子程序读取温度
007A 22               60                             RET
                      61        
                      62     ;------------------读DS18B20子程序,从DS18B20中读出一个字节的数据
007B 7A08             63     READ_1820:      MOV R2,#8
007D C3               64     RE1:            CLR C
007E D293             65                             SETB DQ
0080 00               66                             NOP
0081 00               67                             NOP
0082 C293             68                             CLR DQ
0084 00               69                             NOP
0085 00               70                             NOP
0086 00               71                             NOP
0087 D293             72                             SETB DQ
0089 7B07             73                             MOV R3,#7
008B DBFE             74                             DJNZ R3,$
008D A293             75                             MOV C,DQ
008F 7B17             76                             MOV R3,#23
0091 DBFE             77                             DJNZ R3,$
0093 13               78                             RRC A
0094 DAE7             79                             DJNZ R2,RE1
0096 22               80                             RET
                      81     
                      82     ;-------------------写DS18B20子程序
0097 7A08             83     WRITE_1820:     MOV R2,#8     ;写入位数
0099 C3               84                             CLR C
009A C293             85     WR1:            CLR DQ       ;拉低总线,写开始
009C 7B06             86                             MOV R3,#6    ;延时12us+2us
009E DBFE             87                             DJNZ R3,$
00A0 13               88                             RRC A       ;移入一位给CY
00A1 9293             89                             MOV DQ,C    ;送出
00A3 7B14             90                             MOV R3,#20 ;延时40us+2us
00A5 DBFE             91                             DJNZ R3,$
00A7 D293             92                             SETB DQ     ;释放总线,写一位结束
00A9 DAEF             93                 DJNZ R2,WR1  ;判断一个字节数据写入
00AB 22               94                 RET
                      95        
                      96     ;-------------------读DS18B20子程序,从DS18B20中读出两个字节的温度数据
00AC 7C02             97     READ_18200:     MOV R4,#2         ;将温度高位和低位从DS18B20中读出
00AE 7931             98                             MOV R1,#TEMP_L    ;低位存入TEMP_L,高位存入TEMP_H
00B0 7A08             99     READ1:          MOV R2,#8         ;一字节判断
00B2 C3              100     READ2:          CLR C
00B3 D293            101                             SETB DQ
00B5 00              102                             NOP
00B6 00              103                             NOP
00B7 C293            104                             CLR DQ   ;拉低总线,读开始
00B9 00              105                 NOP      ;1us
00BA 00              106                             NOP      ;1us
00BB D293            107                             SETB DQ   ;1us
00BD 7B05            108                             MOV R3,#5   ;1us
00BF DBFE            109                             DJNZ R3,$    ;10us     延时14us
00C1 A293            110                 MOV C,DQ     ;读入信号
00C3 7B17            111                             MOV R3,#23
00C5 DBFE            112                             DJNZ R3,$    ;46us
00C7 13              113                             RRC A        ;读取信号移入A
00C8 DAE8            114                             DJNZ R2,READ2 ;循环读取
00CA F7              115                             MOV @R1,A
00CB 19              116                             DEC R1
00CC DCE2            117                             DJNZ R4,READ1
00CE 22              118                             RET
                     119     
                     120     ;-------------------将从DS18B20中读出的温度数据进行转换
00CF E531            121     CONVERSION:     MOV A,TEMP_L
00D1 54F0            122                             ANL A,#0F0H ; 舍去温度低位中小数点后的四位温度数值
00D3 C4              123                             SWAP A
00D4 F532            124                             MOV TEMP_NUM,A
A51 MACRO ASSEMBLER  456                                                                    23/03/08 16:07:03 PAGE     3

                     125     
00D6 E530            126                     MOV A,TEMP_H
00D8 5407            127                             ANL A,#07H
00DA C4              128                             SWAP A
00DB 4532            129                             ORL A,TEMP_NUM
00DD F532            130                             MOV TEMP_NUM,A ; 保存变换后的温度数据
                     131     
00DF E531            132                 MOV A,TEMP_L
00E1 30E302          133                             JNB ACC.3,TEMP_COV1 ; 四舍五入温度值
00E4 0532            134                             INC TEMP_NUM
                     135     
00E6 1200EA          136     TEMP_COV1:  LCALL BIN_BCD
00E9 22              137                             RET
                     138        
                     139     ;-------------------将16进制的温度数据转换成压缩BCD码
00EA 9000F3          140     BIN_BCD:        MOV DPTR,#TEMP_TAB
00ED E532            141                             MOV A,TEMP_NUM
00EF 93              142                             MOVC A,@A+DPTR
00F0 F533            143                             MOV TEMP_BCD,A
00F2 22              144                             RET
                     145     
00F3                 146     TEMP_TAB:
00F3 00010203        147     DB 00H,01H,02H,03H,04H,05H,06H,07H
00F7 04050607                
00FB 08091011        148     DB 08H,09H,10H,11H,12H,13H,14H,15H
00FF 12131415                
0103 16171819        149     DB 16H,17H,18H,19H,20H,21H,22H,23H
0107 20212223                
010B 24252627        150     DB 24H,25H,26H,27H,28H,29H,30H,31H
010F 28293031                
0113 32333435        151     DB 32H,33H,34H,35H,36H,37H,38H,39H
0117 36373839                
011B 40414243        152     DB 40H,41H,42H,43H,44H,45H,46H,47H
011F 44454647                
0123 48495051        153     DB 48H,49H,50H,51H,52H,53H,54H,55H
0127 52535455                
012B 56575859        154     DB 56H,57H,58H,59H,60H,61H,62H,63H
012F 60616263                
0133 64656667        155     DB 64H,65H,66H,67H,68H,69H,70H,71H
0137 68697071                
013B 72737475        156     DB 72H,73H,74H,75H,76H,77H,78H,79H
013F 76777879                
0143 80818283        157     DB 80H,81H,82H,83H,84H,85H,86H,87H
0147 84858687                
014B 88899091        158     DB 88H,89H,90H,91H,92H,93H,94H,95H
014F 92939495                
0153 96979899        159     DB 96H,97H,98H,99H
                     160     
                     161     ;-------------------DS18B20初始化程序
0157 D293            162     INI_1820:       SETB DQ      ;释放总线
0159 00              163                             NOP
015A C293            164                             CLR DQ       ;拉低总线
015C 1201A4          165                 LCALL DELAY2     ;延时512us
015F D293            166                             SETB DQ           ;释放总线
0161 1201A9          167                 LCALL DELAY1      ;延时64us
0164 309303          168                 JNB DQ,TSR1       ;判断DS1820存在信号
0167 02016F          169                 LJMP TSR2
016A D200            170     TSR1:           SETB FLAG1        ;置标志位1,表示DS1820存在
016C 020174          171                             LJMP TSR3
016F C200            172     TSR2:           CLR FLAG1         ;清标志位1,表示DS1820不存在
0171 020178          173                             LJMP TSR4
0174 7864            174     TSR3:           MOV R0,#100       ;延时200us
0176 D8FE            175                 DJNZ R0,$
0178 D293            176     TSR4:           SETB DQ
017A 22              177                             RET
                     178        
A51 MACRO ASSEMBLER  456                                                                    23/03/08 16:07:03 PAGE     4

                     179     ;------------------重新写DS18B20暂存存储器设定值
017B 200001          180     RE_CONFIG:              JB FLAG1,RE_CONFIG1 ; 若DS18B20存在,转RE_CONFIG1
017E 22              181                     RET
017F 74CC            182     RE_CONFIG1:             MOV A,#0CCH ; 发SKIP ROM命令
0181 120097          183                     LCALL WRITE_1820
0184 744E            184                                 MOV A,#4EH ; 发写暂存存储器命令
0186 120097          185                                 LCALL WRITE_1820
                     186     
0189 7400            187                                 MOV A,#00H ; TH(报警上限)中写入00H
018B 120097          188                                 LCALL WRITE_1820
018E 7400            189                                 MOV A,#00H ; TL(报警下限)中写入00H
0190 120097          190                                 LCALL WRITE_1820
0193 747F            191                                 MOV A,#7FH ; 选择12位温度分辨率
0195 120097          192                                 LCALL WRITE_1820
0198 22              193                                 RET
                     194        
                     195     ;------------------延时子程序
0199 7F00            196     DELAY:                  MOV R7,#00H      ;延时132ms
019B DF01            197     MIN:                    DJNZ R7,YS500
019D 22              198                     RET
                     199     
019E 1201A4          200     YS500:                  LCALL DELAY2
01A1 02019B          201                                 LJMP MIN
                     202     
01A4 7E00            203     DELAY2:                 MOV R6,#00H      ;延时512us
01A6 DEFE            204                                 DJNZ R6,$
01A8 22              205                                 RET

⌨️ 快捷键说明

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