📄 temp.src
字号:
; SOURCE LINE # 81
CLR flag
?C0005:
; TempDelay(10); //20
; SOURCE LINE # 82
MOV R7,#0AH
LCALL _TempDelay
; _nop_();
; SOURCE LINE # 83
NOP
; _nop_();
; SOURCE LINE # 84
NOP
; D18B20 = 1;
; SOURCE LINE # 85
SETB D18B20
; }
; SOURCE LINE # 86
RET
; END OF Init18b20
;
; /************************************************************
; *Function:向18B20写入一个字节
; *parameter:
; *Return:
; *Modify:
; *************************************************************/
; void WriteByte (unsigned char idata wr) //单字节写入
RSEG ?PR?_WriteByte?TEMP
L?0032:
USING 0
L?0033:
LCALL Init18b20
MOV R7,#0CCH
_WriteByte:
USING 0
; SOURCE LINE # 94
;---- Variable 'wr?241' assigned to Register 'R5' ----
MOV R5,AR7
; {
; SOURCE LINE # 95
; unsigned char idata i;
; for (i=0;i<8;i++)
; SOURCE LINE # 97
CLR A
MOV R0,#LOW (i?242)
MOV @R0,A
?C0007:
; {
; SOURCE LINE # 98
; D18B20 = 0;
; SOURCE LINE # 99
CLR D18B20
; _nop_();
; SOURCE LINE # 100
NOP
; D18B20=wr&0x01;
; SOURCE LINE # 101
MOV A,R5
RRC A
MOV D18B20,C
; TempDelay(3); //delay 45 uS //5
; SOURCE LINE # 102
MOV R7,#03H
LCALL _TempDelay
; _nop_();
; SOURCE LINE # 103
NOP
; _nop_();
; SOURCE LINE # 104
NOP
; D18B20=1;
; SOURCE LINE # 105
SETB D18B20
; wr >>= 1;
; SOURCE LINE # 106
MOV A,R5
CLR C
RRC A
MOV R5,A
; }
; SOURCE LINE # 107
MOV R0,#LOW (i?242)
INC @R0
MOV A,@R0
CLR C
SUBB A,#08H
JC ?C0007
; }
; SOURCE LINE # 108
?C0010:
RET
; END OF _WriteByte
;
; /************************************************************
; *Function:读18B20的一个字节
; *parameter:
; *Return:
; *Modify:
; *************************************************************/
; unsigned char ReadByte (void) //读取单字节
RSEG ?PR?ReadByte?TEMP
ReadByte:
USING 0
; SOURCE LINE # 116
; {
; SOURCE LINE # 117
; unsigned char idata i,u=0;
; SOURCE LINE # 118
CLR A
MOV R0,#LOW (u?344)
MOV @R0,A
; for(i=0;i<8;i++)
; SOURCE LINE # 119
DEC R0
MOV @R0,A
?C0011:
; {
; SOURCE LINE # 120
; D18B20 = 0;
; SOURCE LINE # 121
CLR D18B20
; u >>= 1;
; SOURCE LINE # 122
MOV R0,#LOW (u?344)
MOV A,@R0
CLR C
RRC A
MOV @R0,A
; D18B20 = 1;
; SOURCE LINE # 123
SETB D18B20
; if(D18B20==1)
; SOURCE LINE # 124
JNB D18B20,?C0014
; u |= 0x80;
; SOURCE LINE # 125
MOV A,@R0
ORL A,#080H
MOV @R0,A
?C0014:
; TempDelay (2);
; SOURCE LINE # 126
MOV R7,#02H
LCALL _TempDelay
; _nop_();
; SOURCE LINE # 127
NOP
; }
; SOURCE LINE # 128
MOV R0,#LOW (i?343)
INC @R0
MOV A,@R0
CLR C
SUBB A,#08H
JC ?C0011
?C0012:
; return(u);
; SOURCE LINE # 129
MOV R0,#LOW (u?344)
MOV A,@R0
MOV R7,A
; }
; SOURCE LINE # 130
?C0015:
RET
; END OF ReadByte
;
; /************************************************************
; *Function:读18B20
; *parameter:
; *Return:
; *Modify:
; *************************************************************/
; void read_bytes (unsigned char idata j)
RSEG ?PR?_read_bytes?TEMP
_read_bytes:
USING 0
; SOURCE LINE # 138
;---- Variable 'j?445' assigned to Register 'R5' ----
MOV R5,AR7
; {
; SOURCE LINE # 139
; unsigned char idata i;
; for(i=0;i<j;i++)
; SOURCE LINE # 141
CLR A
MOV R0,#LOW (i?446)
MOV @R0,A
?C0016:
MOV R0,#LOW (i?446)
MOV A,@R0
CLR C
SUBB A,R5
JNC ?C0019
; {
; SOURCE LINE # 142
; *p = ReadByte();
; SOURCE LINE # 143
LCALL ReadByte
MOV R0,p
MOV @R0,AR7
; p++;
; SOURCE LINE # 144
INC p
; }
; SOURCE LINE # 145
MOV R0,#LOW (i?446)
INC @R0
SJMP ?C0016
; }
; SOURCE LINE # 146
?C0019:
RET
; END OF _read_bytes
;
; /************************************************************
; *Function:CRC校验
; *parameter:
; *Return:
; *Modify:
; *************************************************************/
; unsigned char CRC (unsigned char j)
RSEG ?PR?_CRC?TEMP
_CRC:
USING 0
; SOURCE LINE # 154
;---- Variable 'j?547' assigned to Register 'R7' ----
; {
; SOURCE LINE # 155
; unsigned char idata i,crc_data=0;
; SOURCE LINE # 156
CLR A
MOV R0,#LOW (crc_data?549)
MOV @R0,A
; for(i=0;i<j;i++) //查表校验
; SOURCE LINE # 157
DEC R0
MOV @R0,A
?C0020:
MOV R0,#LOW (i?548)
MOV A,@R0
MOV R6,A
CLR C
SUBB A,R7
JNC ?C0021
; crc_data = CrcTable[crc_data^temp_buff[i]];
; SOURCE LINE # 158
MOV A,#LOW (temp_buff)
ADD A,R6
MOV R1,A
INC R0
MOV A,@R0
XRL A,@R1
MOV DPTR,#CrcTable
MOVC A,@A+DPTR
MOV @R0,A
DEC R0
INC @R0
SJMP ?C0020
?C0021:
; return (crc_data);
; SOURCE LINE # 159
MOV R0,#LOW (crc_data?549)
MOV A,@R0
MOV R7,A
; }
; SOURCE LINE # 160
?C0023:
RET
; END OF _CRC
;
; /************************************************************
; *Function:读取温度
; *parameter:
; *Return:
; *Modify:
; *************************************************************/
; void GemTemp (void)
RSEG ?PR?GemTemp?TEMP
GemTemp:
USING 0
; SOURCE LINE # 168
; {
; SOURCE LINE # 169
; read_bytes (9);
; SOURCE LINE # 170
MOV R7,#09H
LCALL _read_bytes
; if (CRC(9)==0) //校验正确
; SOURCE LINE # 171
MOV R7,#09H
LCALL _CRC
MOV A,R7
JNZ ?C0025
; {
; SOURCE LINE # 172
; Temperature = temp_buff[1]*0x100 + temp_buff[0];
; SOURCE LINE # 173
MOV R0,#LOW (temp_buff+01H)
MOV A,@R0
MOV R6,A
DEC R0
MOV A,@R0
MOV R4,#00H
ADD A,#00H
MOV R0,#LOW (Temperature+01H)
MOV @R0,A
MOV A,R4
ADDC A,R6
DEC R0
MOV @R0,A
; // Temperature *= 0.625;
; Temperature /= 16;
; SOURCE LINE # 175
MOV R1,#LOW (Temperature)
MOV A,@R1
SWAP A
MOV R0,A
ANL A,#0F0H
XCH A,R0
XRL A,R0
MOV @R1,A
INC R1
MOV A,@R1
SWAP A
ANL A,#0FH
ORL A,R0
MOV @R1,A
; TempDelay(1);
; SOURCE LINE # 176
MOV R7,#01H
LCALL _TempDelay
; }
; SOURCE LINE # 177
; }
; SOURCE LINE # 178
?C0025:
RET
; END OF GemTemp
;
; /************************************************************
; *Function:内部配置
; *parameter:
; *Return:
; *Modify:
; *************************************************************/
; void Config18b20 (void) //重新配置报警限定值和分辨率
RSEG ?PR?Config18b20?TEMP
Config18b20:
USING 0
; SOURCE LINE # 186
; {
; SOURCE LINE # 187
; Init18b20();
; SOURCE LINE # 188
; WriteByte(0xcc); //skip rom
; SOURCE LINE # 189
LCALL L?0032
; WriteByte(0x4e); //write scratchpad
; SOURCE LINE # 190
MOV R7,#04EH
LCALL _WriteByte
; WriteByte(0x19); //上限
; SOURCE LINE # 191
MOV R7,#019H
LCALL _WriteByte
; WriteByte(0x1a); //下限
; SOURCE LINE # 192
MOV R7,#01AH
LCALL _WriteByte
; WriteByte(0x7f); //set 11 bit (0.125)
; SOURCE LINE # 193
MOV R7,#07FH
LCALL _WriteByte
; Init18b20();
; SOURCE LINE # 194
; WriteByte(0xcc); //skip rom
; SOURCE LINE # 195
LCALL L?0032
; WriteByte(0x48); //保存设定值
; SOURCE LINE # 196
MOV R7,#048H
LCALL _WriteByte
; Init18b20();
; SOURCE LINE # 197
; WriteByte(0xcc); //skip rom
; SOURCE LINE # 198
LCALL L?0033
; WriteByte(0xb8); //回调设定值
; SOURCE LINE # 199
MOV R7,#0B8H
LJMP _WriteByte
; END OF Config18b20
; }
;
; /************************************************************
; *Function:读18B20ID
; *parameter:
; *Return:
; *Modify:
; *************************************************************/
; void ReadID (void)//读取器件 id
RSEG ?PR?ReadID?TEMP
ReadID:
USING 0
; SOURCE LINE # 208
; {
; SOURCE LINE # 209
; Init18b20();
; SOURCE LINE # 210
LCALL Init18b20
; WriteByte(0x33); //read rom
; SOURCE LINE # 211
MOV R7,#033H
LCALL _WriteByte
; read_bytes(8);
; SOURCE LINE # 212
MOV R7,#08H
LJMP _read_bytes
; END OF ReadID
; }
;
; /************************************************************
; *Function:18B20ID全处理
; *parameter:
; *Return:
; *Modify:
; *************************************************************/
; void TemperatuerResult(void)
RSEG ?PR?TemperatuerResult?TEMP
TemperatuerResult:
USING 0
; SOURCE LINE # 221
; {
; SOURCE LINE # 222
; p = id_buff;
; SOURCE LINE # 223
MOV p,#LOW (id_buff)
; ReadID();
; SOURCE LINE # 224
LCALL ReadID
; Config18b20();
; SOURCE LINE # 225
LCALL Config18b20
; Init18b20 ();
; SOURCE LINE # 226
; WriteByte(0xcc); //skip rom
; SOURCE LINE # 227
LCALL L?0033
; WriteByte(0x44); //Temperature convert
; SOURCE LINE # 228
MOV R7,#044H
LCALL _WriteByte
;
; Init18b20 ();
; SOURCE LINE # 230
; WriteByte(0xcc); //skip rom
; SOURCE LINE # 231
LCALL L?0033
; WriteByte(0xbe); //read Temperature
; SOURCE LINE # 232
MOV R7,#0BEH
LCALL _WriteByte
; p = temp_buff;
; SOURCE LINE # 233
MOV p,#LOW (temp_buff)
; GemTemp();
; SOURCE LINE # 234
LJMP GemTemp
; END OF TemperatuerResult
; }
;
; unsigned int TempTick=0;
; void GetTemp()
RSEG ?PR?GetTemp?TEMP
GetTemp:
USING 0
; SOURCE LINE # 238
; {
; SOURCE LINE # 239
; if(TIM==1)
; SOURCE LINE # 240
MOV A,TIM
CJNE A,#01H,?C0030
; { TIM=0;
; SOURCE LINE # 241
CLR A
MOV TIM,A
; TemperatuerResult();
; SOURCE LINE # 242
LCALL TemperatuerResult
; D[5]=Temperature;
; SOURCE LINE # 243
MOV R0,#LOW (Temperature)
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
MOV R7,A
MOV R0,#LOW (D+0AH)
MOV @R0,AR6
INC R0
MOV @R0,AR7
; }
; SOURCE LINE # 244
;
; }
; SOURCE LINE # 246
?C0030:
RET
; END OF GetTemp
CSEG AT 0001BH
LJMP T1zd
;
; /*************************************
; [ t1 (0.5ms)中断] 中断中做 PWM 输出
; ------------1000/(0.02ms*250)=200Hz
; *************************************/
; void T1zd(void) interrupt 3
RSEG ?PR?T1zd?TEMP
USING 0
T1zd:
; SOURCE LINE # 252
; {
; TH1 = 0xfe; //11.0592
; SOURCE LINE # 254
MOV TH1,#0FEH
; TL1 = 0x33;
; SOURCE LINE # 255
MOV TL1,#033H
; TIM++;
; SOURCE LINE # 256
INC TIM
;
; }
; SOURCE LINE # 258
RETI
; END OF T1zd
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -