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

📄 ex10-4.sdi

📁 ds18b20温度采集及数码管显示
💻 SDI
📖 第 1 页 / 共 3 页
字号:
022B,20 54 45 4D,M_ERROR2,M_ERROR2: DB   " TEMP: ----     ",0
,,,
,,,;****************************DS18B20复位子程序 *****************************
023C,D2 B3,RST,RST:    SETB DQ
023E,00,,        NOP
023F,C2 B3,,        CLR DQ
0241,78 6B,,        MOV R0,#6BH         ;主机发出延时复位低脉冲
0243,79 04,,        MOV R1,#04H
0245,D8 FE,TSR1,TSR1:   DJNZ R0,$
0247,78 6B,,        MOV R0,#6BH
0249,D9 FA,,        DJNZ R1,TSR1
024B,D2 B3,,        SETB DQ                 ;拉高数据线
024D,00,,        NOP
024E,00,,        NOP
024F,00,,        NOP
0250,78 32,,        MOV R0,#32H
0252,30 B3 05,TSR2,TSR2:   JNB DQ,TSR3             ;等待DS18B20回应
0255,D8 FB,,        DJNZ R0,TSR2
0257,02 02 5F,,        JMP TSR4             ; 延时
025A,D2 00,TSR3,TSR3:   SETB FLAG1           ; 置1标志位,表示DS1820存在
025C,02 02 64,,        JMP TSR5
025F,C2 00,TSR4,TSR4:   CLR FLAG1            ; 清0标志位,表示DS1820不存在
0261,02 02 68,,        JMP TSR7
0264,78 6B,TSR5,TSR5:   MOV R0,#06BH
0266,D8 FE,TSR6,TSR6:   DJNZ R0,$            ; 时序要求延时一段时间
0268,D2 B3,TSR7,TSR7:   SETB DQ
026A,22,,        RET
,,,
,,,;************************ DS18B20暂存器操作子程序 ***************************
026B,20 00 01,RE_18B20,RE_18B20:JB  FLAG1,RE_18B20A
026E,22,,        RET
026F,,RE_18B20A,RE_18B20A:
026F,12 02 3C,,LCALL  RST
0272,74 CC,,        MOV  A,#0CCH                    ;跳过ROM匹配
0274,12 02 C5,,        LCALL  WRITE
0277,,WR_SCRAPD,WR_SCRAPD:
0277,74 4E,,        MOV  A,#4EH                     ;写暂器
0279,12 02 C5,,        LCALL  WRITE
027C,E5 27,,        MOV  A,TEMP_TH                  ;TH(报警上限)
027E,12 02 C5,,        LCALL  WRITE
0281,E5 28,,        MOV  A,TEMP_TL                  ;TL(报警下限)
0283,12 02 C5,,        LCALL  WRITE
0286,74 7F,,        MOV  A,#7FH                     ;12位精度
0288,12 02 C5,,        LCALL  WRITE
028B,22,,        RET
,,,
,,,;************************ 复制暂存器子程序 *******************************
028C,12 02 3C,WRITE_E2,WRITE_E2:LCALL  RST
028F,74 CC,,        MOV  A,#0CCH            ;跳过ROM匹配
0291,12 02 C5,,        LCALL  WRITE
0294,74 48,,        MOV  A,#48H             ;把暂存器里的温度报警值拷贝到EEROM
0296,12 02 C5,,        LCALL  WRITE
0299,22,,        RET
,,,
,,,;*********************** 重读EEROM子程序 ********************************
029A,12 02 3C,READ_E2,READ_E2:LCALL  RST
029D,74 CC,,        MOV  A,#0CCH            ;跳过ROM匹配
029F,12 02 C5,,        LCALL  WRITE
02A2,74 B8,,        MOV  A,#0B8H            ;把EEROM里的温度报警值拷贝回暂存器
02A4,12 02 C5,,        LCALL  WRITE
02A7,22,,        RET
,,,
,,,;************************ 将自定义字符写入LCD的CGRAM中 *********************
02A8,,STORE_DATA,STORE_DATA:
02A8,74 40,,        MOV  A,#40H
02AA,12 05 23,,        LCALL  WCOM
02AD,7A 08,,        MOV  R2,#08H
02AF,90 02 BD,,        MOV  DPTR,#D_DATA
02B2,7B 00,,        MOV  R3,#00H
02B4,EB,S_DATA,S_DATA: MOV  A,R3
02B5,93,,        MOVC  A,@A+DPTR
02B6,12 05 31,,        LCALL  WDATA                    ;写入数据
02B9,0B,,        INC  R3
02BA,DA F8,,        DJNZ  R2,S_DATA
02BC,22,,        RET
02BD,0C 12 12 0C,D_DATA,D_DATA: DB  0CH,12H,12H,0CH,00H,00H,00H,00H
,,,;***********************  DS18B20数据写入操作子程序 ************************
02C5,7A 08,WRITE,WRITE:  MOV R2,#8               ;一共8位数据
02C7,C3,,        CLR  C
02C8,C2 B3,WR1,WR1:    CLR DQ                          ;开始写入DS18B20总线要处于复位(低)状态
02CA,7B 07,,        MOV R3,#07
02CC,DB FE,,        DJNZ R3,$               ;总线复位保持16微妙以上
02CE,13,,        RRC A                   ;把一个字节DATA 分成8个BIT环移给C
02CF,92 B3,,        MOV DQ,C                        ;写入一位
02D1,7B 3C,,        MOV R3,#3CH
02D3,DB FE,,        DJNZ R3,$               ;等待100微妙
02D5,D2 B3,,        SETB DQ                         ;重新释放总线
02D7,00,,        NOP
02D8,DA EE,,        DJNZ R2,WR1             ;写入下一位
02DA,D2 B3,,        SETB DQ
02DC,22,,        RET
,,,
,,,;********************** DS18B20数据读取操作子程序  **************************
02DD,7C 04,READ,READ:    MOV R4,#4              ;将温度低位、高位、TH、TL从DS18B20中读出
02DF,79 25,,         MOV R1,#TEMPL          ;存入25H、26H、27H、28H单元
02E1,7A 08,RE00,RE00:    MOV R2,#8
02E3,C2 D7,RE01,RE01:    CLR CY
02E5,D2 B3,,         SETB DQ
02E7,00,,         NOP
02E8,00,,         NOP
02E9,C2 B3,,         CLR DQ                         ;读前总线保持为低
02EB,00,,         NOP
02EC,00,,         NOP
02ED,00,,         NOP
02EE,D2 B3,,         SETB DQ                        ;开始读总线释放
02F0,7B 09,,         MOV R3,#09             ;延时18微妙
02F2,DB FE,,         DJNZ R3,$
02F4,A2 B3,,         MOV C,DQ                       ;从DS18B20总线读得一位
02F6,7B 3C,,         MOV R3,#3CH
02F8,DB FE,,         DJNZ R3,$              ;等待100微妙
02FA,13,,         RRC A                  ;把读得的位值环移给A
02FB,DA E6,,         DJNZ R2,RE01           ;读下一位
02FD,F7,,         MOV @R1,A
02FE,09,,         INC R1
02FF,DC E0,,         DJNZ R4,RE00
0301,22,,         RET
,,,
,,,;************************ 温度值 BCD 码处理子程序 *************************
0302,E5 26,CONVTEMP,CONVTEMP:      MOV  A,TEMPH       ;判温度是否零下
0304,54 08,,               ANL  A,#08H
0306,60 17,,               JZ  TEMPC1         ;温度零上转
0308,C3,,               CLR  C
0309,E5 25,,               MOV  A,TEMPL       ;二进制数求补(双字节)
030B,F4,,               CPL  A             ;取反加1
030C,24 01,,               ADD  A,#01H
030E,F5 25,,               MOV  TEMPL,A
0310,E5 26,,               MOV  A,TEMPH
0312,F4,,               CPL  A
0313,34 00,,               ADDC  A,#00H
0315,F5 26,,               MOV  TEMPH,A
0317,75 29 0B,,                           MOV   TEMPHC,#0BH            ;负温度标志
031A,75 2B 0B,,                           MOV   TEMPFC,#0BH
031D,80 06,,               SJMP  TEMPC11
031F,75 29 0A,TEMPC1,TEMPC1:        MOV  TEMPHC,#0AH         ;正温度标志
0322,75 2B 0A,,                           MOV   TEMPFC,#0AH
0325,E5 29,TEMPC11,TEMPC11:       MOV  A,TEMPHC
0327,C4,,               SWAP  A
0328,F5 29,,               MOV  TEMPHC,A
032A,E5 25,,               MOV  A,TEMPL
032C,54 0F,,               ANL  A,#0FH              ;乘0.0625
032E,90 03 76,,               MOV  DPTR,#TEMPDOTTAB
0331,93,,               MOVC  A,@A+DPTR
0332,F5 2A,,               MOV  TEMPLC,A            ;TEMPLC LOW=小数部分 BCD
0334,E5 25,,               MOV  A,TEMPL             ;整数部分
0336,54 F0,,               ANL  A,#0F0H             ;取出高四位
0338,C4,,               SWAP  A
0339,F5 25,,               MOV  TEMPL,A
033B,E5 26,,               MOV  A,TEMPH             ;取出低四位
033D,54 0F,,               ANL  A,#0FH
033F,C4,,               SWAP  A
0340,45 25,,               ORL  A,TEMPL             ;重新组合
0342,F5 24,,               MOV  TEMP_ZH,A
0344,12 03 68,,               LCALL  HEX2BCD1
0347,F5 25,,               MOV  TEMPL,A
0349,54 F0,,               ANL  A,#0F0H
034B,C4,,               SWAP  A
034C,45 29,,               ORL  A,TEMPHC            ;TEMPHC LOW = 十位数 BCD
034E,F5 29,,               MOV  TEMPHC,A
0350,E5 25,,               MOV  A,TEMPL
0352,54 0F,,               ANL  A,#0FH
0354,C4,,               SWAP  A                  ;TEMPLC HI = 个位数 BCD
0355,45 2A,,               ORL  A,TEMPLC
0357,F5 2A,,               MOV  TEMPLC,A
0359,EC,,               MOV  A,R4
035A,60 0B,,               JZ  TEMPC12
035C,54 0F,,               ANL  A,#0FH
035E,C4,,               SWAP  A
035F,FC,,               MOV  R4,A
0360,E5 29,,               MOV  A,TEMPHC            ;TEMPHC HI = 百位数 BCD
0362,54 0F,,               ANL  A,#0FH
0364,4C,,               ORL  A,R4
0365,F5 29,,               MOV  TEMPHC,A
0367,22,TEMPC12,TEMPC12:       RET
,,,
,,,;************************ 二-十进制转换子程序 *****************************
0368,75 F0 64,HEX2BCD1,HEX2BCD1:     MOV  B,#064H
036B,84,,              DIV  AB
036C,FC,,              MOV  R4,A
036D,74 0A,,              MOV  A,#0AH
036F,C5 F0,,              XCH  A,B
0371,84,,              DIV  AB
0372,C4,,              SWAP  A
0373,45 F0,,              ORL  A,B
0375,22,,              RET
0376,00 00 01 01,TEMPDOTTAB,TEMPDOTTAB:   DB   00H,00H,01H,01H,02H,03H,03H,04H  ; 小数部分码表
037E,05 05 06 06,,         DB   05H,05H,06H,06H,07H,08H,08H,09H
,,,
,,,;********************** 查询温度报警值子程序 ***************************
0386,90 03 BA,LOOK_ALARM,LOOK_ALARM:       MOV  DPTR,#M_ALAX2    ;指针指到显示信息区
0389,74 02,,          MOV  A,#2                     ;显示在第二行
038B,12 04 E7,,          LCALL  LCD_PRINT
038E,74 C6,,          MOV  A,#0C6H
0390,12 03 CB,,          LCALL  TEMP_BJ1
0393,E5 27,,          MOV  A,TEMP_TH                ;加载TH数据
0395,75 2F 03,,          MOV  LCD_X,#3                 ;设置显示位置
0398,12 03 E0,,          LCALL  SHOW_DIG2H             ;显示数据
039B,74 CE,,          MOV  A,#0CEH
039D,12 03 CB,,          LCALL  TEMP_BJ1
03A0,E5 28,,          MOV  A,TEMP_TL                ;加载TL数据
03A2,75 2F 0C,,          MOV  LCD_X,#12                ;设置显示位置
03A5,12 04 10,,          LCALL  SHOW_DIG2L             ;显示数据
03A8,22,,          RET
03A9,20 4C 4F 4F,M_ALAX1,M_ALAX1:  DB   " LOOK ALERT CODE",0
03BA,54 48 3A 20,M_ALAX2,M_ALAX2:  DB   "TH:      TL:    ",0
03CB,12 05 23,TEMP_BJ1,TEMP_BJ1: LCALL WCOM
03CE,90 03 DE,,          MOV  DPTR,#BJ2                ;指针指到显示信息区
03D1,79 00,,          MOV  R1,#0
03D3,78 02,,          MOV  R0,#2
03D5,E9,BBJJ2,BBJJ2:    MOV  A,R1
03D6,93,,          MOVC A,@A+DPTR
03D7,12 05 31,,          LCALL  WDATA
03DA,09,,          INC R1
03DB,D8 F8,,          DJNZ  R0,BBJJ2
03DD,22,,          RET
03DE,00 43,BJ2,BJ2:      DB  00H,"C"
,,,
,,,;************************** LCD显示子程序 **********************************
03E0,75 F0 64,SHOW_DIG2H,SHOW_DIG2H: MOV  B,#100
03E3,84,,          DIV  AB

⌨️ 快捷键说明

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