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

📄 temp.src

📁 51单片机实验例程
💻 SRC
📖 第 1 页 / 共 2 页
字号:
			; 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 + -