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

📄 ze015_1.lst

📁 一款完整的家用电器程序,具有控制商用机的功能,应用广泛,有一定的参考价值
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0352 E083      LDI	R24,3
    0353 93800302  STS	beep_times,R24
    0355 E58A      LDI	R24,0x5A
    0356 93800305  STS	beep_stop_time_ask,R24
    0358 9508      RET
_Fun_ad_20k:
  a_d2                 --> R12
  a_d1                 --> R14
  th_value             --> R20
  temp                 --> R22
  n                    --> R10
  thAD                 --> R16
    0359 940E26CB  CALL	push_gset5
(0037) }
(0038) 
(0039) 
(0040) //将AD采样值查表得到温度值20K感温包-分压电阻20K,,15K感温包-分压电阻15K
(0041) signed char  Fun_ad_20k(unsigned char  thAD)
(0042) {
(0043) 	unsigned	char	n;	//对应AD查表中的偏移量
(0044) 	unsigned	char	temp;	//AD查表中的偏移量的AD值
(0045) 	unsigned	char	a_d1;	//实际采样值与温度值的差距
(0046) 	unsigned	char	a_d2;	//实际采样值与下一个温度值的差距
(0047) 	signed	char	th_value;	//温度值
(0048)  	if (thAD <=24) {th_value =-20;return(th_value);}		//实际采样值小于-20℃的AD(8)时,温度为-20℃
    035B E188      LDI	R24,0x18
    035C 1780      CP	R24,R16
    035D F018      BCS	0x0361
    035E EE4C      LDI	R20,0xEC
    035F 2F04      MOV	R16,R20
    0360 C061      RJMP	0x03C2
(0049)  	if (thAD >=246) {th_value =117; return(th_value);}		//实际采样值大于127℃的AD(232)时,温度为127℃
    0361 3F06      CPI	R16,0xF6
    0362 F018      BCS	0x0366
    0363 E745      LDI	R20,0x75
    0364 2F04      MOV	R16,R20
    0365 C05C      RJMP	0x03C2
(0050)  	if (thAD <=167)	//实际采样值小于40℃的AD(167)时,如实际采样值大于10℃的AD(86)时,起始步n为45(25℃)
    0366 EA87      LDI	R24,0xA7
    0367 1780      CP	R24,R16
    0368 F040      BCS	0x0371
(0051) 		{
(0052) 			if (thAD >=86)	n=45;	//TH=10-40,TH0=25
    0369 3506      CPI	R16,0x56
    036A F018      BCS	0x036E
    036B E28D      LDI	R24,0x2D
    036C 2EA8      MOV	R10,R24
    036D C00A      RJMP	0x0378
(0053) 			else n=20;	//TH0=0
    036E E184      LDI	R24,0x14
    036F 2EA8      MOV	R10,R24
(0054) 		}
    0370 C007      RJMP	0x0378
(0055) 	else	//实际采样值大于70℃的AD(218)时,起始步n为100(80℃),否则起始步n为70(50℃)
(0056) 		{
(0057) 			if (thAD >=218)	n=100;	//TH>=70,TH0=80
    0371 3D0A      CPI	R16,0xDA
    0372 F018      BCS	0x0376
    0373 E684      LDI	R24,0x64
    0374 2EA8      MOV	R10,R24
    0375 C002      RJMP	0x0378
(0058) 			else n=70;	//TH=40-70,TH0=50
    0376 E486      LDI	R24,0x46
    0377 2EA8      MOV	R10,R24
(0059) 		}
(0060) 			
(0061) 	temp=TAB20K_20temp[n];
    0378 EC8C      LDI	R24,0xCC
    0379 E091      LDI	R25,1
    037A 2DEA      MOV	R30,R10
    037B 27FF      CLR	R31
    037C 0FE8      ADD	R30,R24
    037D 1FF9      ADC	R31,R25
    037E 9164      LPM	R22,0(Z)
(0062) 	if (thAD ==temp)  th_value =n-20;	//相等时取温度-20
    037F 1706      CP	R16,R22
    0380 F419      BNE	0x0384
    0381 2D4A      MOV	R20,R10
    0382 5144      SUBI	R20,0x14
    0383 C03D      RJMP	0x03C1
(0063) 	else
(0064) 	{
(0065) 		if (thAD >temp)
    0384 1760      CP	R22,R16
    0385 F4F0      BCC	0x03A4
(0066) 		{//实际采样值大于当前步的AD值时,步加,直到实际采样值小于当前步的AD值,再比较离得最近的步为温度。
(0067) 			do
(0068) 			{n++;temp=TAB20K_20temp[n];}
    0386 94A3      INC	R10
    0387 EC8C      LDI	R24,0xCC
    0388 E091      LDI	R25,1
    0389 2DEA      MOV	R30,R10
    038A 27FF      CLR	R31
    038B 0FE8      ADD	R30,R24
    038C 1FF9      ADC	R31,R25
    038D 9164      LPM	R22,0(Z)
(0069) 			while (thAD >=temp);
    038E 1706      CP	R16,R22
    038F F7B0      BCC	0x0386
(0070) 			a_d1= temp- thAD;
    0390 2EE6      MOV	R14,R22
    0391 1AE0      SUB	R14,R16
(0071) 			n--;temp=TAB20K_20temp[n];a_d2=thAD-temp;
    0392 94AA      DEC	R10
    0393 EC8C      LDI	R24,0xCC
    0394 E091      LDI	R25,1
    0395 2DEA      MOV	R30,R10
    0396 27FF      CLR	R31
    0397 0FE8      ADD	R30,R24
    0398 1FF9      ADC	R31,R25
    0399 9164      LPM	R22,0(Z)
    039A 2EC0      MOV	R12,R16
    039B 1AC6      SUB	R12,R22
(0072) 			if (a_d1 >=a_d2) th_value =n-20;
    039C 14EC      CP	R14,R12
    039D F018      BCS	0x03A1
    039E 2D4A      MOV	R20,R10
    039F 5144      SUBI	R20,0x14
    03A0 C020      RJMP	0x03C1
(0073) 			else th_value=n-19;
    03A1 2D4A      MOV	R20,R10
    03A2 5143      SUBI	R20,0x13
(0074) 		}
    03A3 C01D      RJMP	0x03C1
(0075) 		else
(0076) 		{//实际采样值小于当前步的AD值时,步减,直到实际采样值小于当前步的AD值,再比较离得最近的步为温度。
(0077) 			do
(0078) 			{n--;temp=TAB20K_20temp[n];}
    03A4 94AA      DEC	R10
    03A5 EC8C      LDI	R24,0xCC
    03A6 E091      LDI	R25,1
    03A7 2DEA      MOV	R30,R10
    03A8 27FF      CLR	R31
    03A9 0FE8      ADD	R30,R24
    03AA 1FF9      ADC	R31,R25
    03AB 9164      LPM	R22,0(Z)
(0079) 			while (thAD <=temp);
    03AC 1760      CP	R22,R16
    03AD F7B0      BCC	0x03A4
(0080) 			a_d1=thAD-temp;
    03AE 2EE0      MOV	R14,R16
    03AF 1AE6      SUB	R14,R22
(0081) 			n++;temp=TAB20K_20temp[n];a_d2=temp-thAD;
    03B0 94A3      INC	R10
    03B1 EC8C      LDI	R24,0xCC
    03B2 E091      LDI	R25,1
    03B3 2DEA      MOV	R30,R10
    03B4 27FF      CLR	R31
    03B5 0FE8      ADD	R30,R24
    03B6 1FF9      ADC	R31,R25
    03B7 9164      LPM	R22,0(Z)
    03B8 2EC6      MOV	R12,R22
    03B9 1AC0      SUB	R12,R16
(0082) 			if (a_d1 >=a_d2) th_value=n-20;
    03BA 14EC      CP	R14,R12
    03BB F018      BCS	0x03BF
    03BC 2D4A      MOV	R20,R10
    03BD 5144      SUBI	R20,0x14
    03BE C002      RJMP	0x03C1
(0083) 			else th_value=n-21;
    03BF 2D4A      MOV	R20,R10
    03C0 5145      SUBI	R20,0x15
(0084) 		}	
(0085) 	}
(0086) 	return(th_value);	//返回温度值	
    03C1 2F04      MOV	R16,R20
    03C2 940E26C8  CALL	pop_gset5
    03C4 9508      RET
_Fun_ad_50k:
  a_d2                 --> R12
  a_d1                 --> R14
  th_value             --> R20
  temp                 --> R22
  n                    --> R10
  thAD                 --> R16
    03C5 940E26CB  CALL	push_gset5
(0087) }	
(0088) 
(0089) unsigned char  Fun_ad_50k(unsigned char  thAD)//将AD采样值查表得到排气温度值50K感温包-分压电阻10K
(0090) {
(0091) 	unsigned	char	n;	//对应AD查表中的偏移量
(0092) 	unsigned	char	temp;	//AD查表中的偏移量的AD值
(0093) 	unsigned	char	a_d1;	//实际采样值与温度值的差距
(0094) 	unsigned	char	a_d2;	//实际采样值与下一个温度值的差距
(0095) 	unsigned	char	th_value;//温度值
(0096)  	if (thAD <=15) {th_value =0;return(th_value);}	//实际采样值小于0℃的AD(15)时,温度为0℃
    03C7 E08F      LDI	R24,0xF
    03C8 1780      CP	R24,R16
    03C9 F018      BCS	0x03CD
    03CA 2744      CLR	R20
    03CB 2F04      MOV	R16,R20
    03CC C05E      RJMP	0x042B
(0097)  	if (thAD >=250) {th_value =199; return(th_value);}	//实际采样值大于169℃的AD(254)时,温度为149℃
    03CD 3F0A      CPI	R16,0xFA
    03CE F018      BCS	0x03D2
    03CF EC47      LDI	R20,0xC7
    03D0 2F04      MOV	R16,R20
    03D1 C059      RJMP	0x042B
(0098)  	if (thAD <=138)	//实际采样值小于70℃的AD(138)时,如实际采样值大于40℃的AD(71)时,起始步n为60(140)
    03D2 E88A      LDI	R24,0x8A
    03D3 1780      CP	R24,R16
    03D4 F040      BCS	0x03DD
(0099) 		{
(0100) 			if (thAD >=71)	n=60;	//TH 40-70 TH TH0=60
    03D5 3407      CPI	R16,0x47
    03D6 F018      BCS	0x03DA
    03D7 E38C      LDI	R24,0x3C
    03D8 2EA8      MOV	R10,R24
    03D9 C00A      RJMP	0x03E4
(0101) 			else n=20;	//TH 0-40  TH0=20
    03DA E184      LDI	R24,0x14
    03DB 2EA8      MOV	R10,R24
(0102) 		}
    03DC C007      RJMP	0x03E4
(0103) 	else	//实际采样值大于70℃的AD(138)时,起始步n为100℃,否则起始步n为120℃
(0104) 		{
(0105) 			if (thAD >=193)	n=120;	//TH>=100,TH0=120
    03DD 3C01      CPI	R16,0xC1
    03DE F018      BCS	0x03E2
    03DF E788      LDI	R24,0x78
    03E0 2EA8      MOV	R10,R24
    03E1 C002      RJMP	0x03E4
(0106) 			else n=80;	//TH  100-70,TH0=80
    03E2 E580      LDI	R24,0x50
    03E3 2EA8      MOV	R10,R24
(0107) 		}
(0108) 			
(0109) 	temp=TAB50K_10temp[n];
    03E4 E88C      LDI	R24,0x8C
    03E5 E090      LDI	R25,0
    03E6 2DEA      MOV	R30,R10
    03E7 27FF      CLR	R31
    03E8 0FE8      ADD	R30,R24
    03E9 1FF9      ADC	R31,R25
    03EA 9164      LPM	R22,0(Z)
(0110) 	if (thAD ==temp)  th_value =n;	//相等时取温度
    03EB 1706      CP	R16,R22
    03EC F411      BNE	0x03EF
    03ED 2D4A      MOV	R20,R10
    03EE C03B      RJMP	0x042A
(0111) 	else
(0112) 	{
(0113) 		if (thAD >temp)
    03EF 1760      CP	R22,R16
    03F0 F4E8      BCC	0x040E
(0114) 		{//实际采样值大于当前步的AD值时,步加,直到实际采样值小于当前步的AD值,再比较离得最近的步为温度。
(0115) 			do
(0116) 			{n++;temp=TAB50K_10temp[n];}
    03F1 94A3      INC	R10
    03F2 E88C      LDI	R24,0x8C
    03F3 E090      LDI	R25,0
    03F4 2DEA      MOV	R30,R10
    03F5 27FF      CLR	R31
    03F6 0FE8      ADD	R30,R24
    03F7 1FF9      ADC	R31,R25
    03F8 9164      LPM	R22,0(Z)
(0117) 			while (thAD >=temp);
    03F9 1706      CP	R16,R22
    03FA F7B0      BCC	0x03F1
(0118) 			a_d1= temp- thAD;
    03FB 2EE6      MOV	R14,R22
    03FC 1AE0      SUB	R14,R16
(0119) 			n--;temp=TAB50K_10temp[n];a_d2=thAD-temp;
    03FD 94AA      DEC	R10
    03FE E88C      LDI	R24,0x8C
    03FF E090      LDI	R25,0
    0400 2DEA      MOV	R30,R10
    0401 27FF      CLR	R31
    0402 0FE8      ADD	R30,R24
    0403 1FF9      ADC	R31,R25
    0404 9164      LPM	R22,0(Z)
    0405 2EC0      MOV	R12,R16
    0406 1AC6      SUB	R12,R22
(0120) 			if (a_d1 >=a_d2) th_value =n;
    0407 14EC      CP	R14,R12
    0408 F010      BCS	0x040B
    0409 2D4A      MOV	R20,R10
    040A C01F      RJMP	0x042A
(0121) 			else th_value=n+1;
    040B 2D4A      MOV	R20,R10
    040C 5F4F      SUBI	R20,0xFF
(0122) 		}
    040D C01C      RJMP	0x042A
(0123) 		else
(0124) 		{//实际采样值小于当前步的AD值时,步减,直到实际采样值小于当前步的AD值,再比较离得最近的步为温度。
(0125) 			do
(0126) 			{n--;temp=TAB50K_10temp[n];}
    040E 94AA      DEC	R10
    040F E88C      LDI	R24,0x8C
    0410 E090      LDI	R25,0
    0411 2DEA      MOV	R30,R10
    0412 27FF      CLR	R31
    0413 0FE8      ADD	R30,R24
    0414 1FF9      ADC	R31,R25
    0415 9164      LPM	R22,0(Z)
(0127) 			while (thAD <=temp);
    0416 1760      CP	R22,R16
    0417 F7B0      BCC	0x040E
(0128) 			a_d1=thAD-temp;
    0418 2EE0      MOV	R14,R16
    0419 1AE6      SUB	R14,R22
(0129) 			n++;temp=TAB50K_10temp[n];a_d2=temp-thAD;
    041A 94A3      INC	R10
    041B E88C      LDI	R24,0x8C
    041C E090      LDI	R25,0
    041D 2DEA      MOV	R30,R10
    041E 27FF      CLR	R31
    041F 0FE8      ADD	R30,R24
    0420 1FF9      ADC	R31,R25
    0421 9164      LPM	R22,0(Z)
    0422 2EC6      MOV	R12,R22
    0423 1AC0      SUB	R12,R16
(0130) 			if (a_d1 >=a_d2) th_value=n;
    0424 14EC      CP	R14,R12
    0425 F010      BCS	0x0428
    0426 2D4A      MOV	R20,R10
    0427 C002      RJMP	0x042A
(0131) 			else th_value=n-1;
    0428 2D4A      MOV	R20,R10
    0429 5041      SUBI	R20,1
(0132) 		}	
(0133) 	}
(0134) 	return(th_value);	//返回温度值
    042A 2F04      MOV	R16,R20
    042B 940E26C8  CALL	pop_gset5
    042D 9508      RET
(0135) }	
(0136) 
(0137) 
(0138) //******************************
(0139) //******************************
(0140) 
(0141) void ADStartP(void)
(0142) {//ADSC=1启动ADC,等待采样工作完成;
(0143) 	ADCSRA |=0x40;	//ADSC=1启动ADC
_ADStartP:
    042E 9A36      SBI	0x06,6
    042F C001      RJMP	0x0431
(0144) 	while (!(ADCSRA & 0x10))  WDR();	//ADIF=1时AD转换结束且数据更新
    0430 95A8      WDR
    0431 9B34      SBIS	0x06,4
    0432 CFFD      RJMP	0x0430
(0145) 	ADCSRA |=0x10;	//ADIF=1软件写1清ADC中断完成位
    0433 9A34      SBI	0x06,4
    0434 9508      RET
(0146) }
(0147) 
(0148) //************************************************************************************
(0149) //CD4052-A:PORTA1,CD4052-B:PORTA0,在每次AD转换后置CD4052动作,再进行下2AD。00-01-11-10
(0150) //20070813改为PF3[ADC3] 排气温度EXHAUST,50K感温包,PF2[ADC2] 预留环境采样15KOUTROOM,
(0151) //PF0[ADC0]除湿电流I-HUMID。去掉CD4052
(0152) //************************************************************************************
(0153) 
(0154) void funADsample(void)	//AD采样程序
(0155) {
(0156) 	//SFIOR =0x04;	//不允许任何上拉
(0157) 	ADCSRA =0x86;	//ADEN=1使能AD,6=110分频64
_funADsample:
    0435 E886      LDI	R24,0x86
    0436 B986      OUT	0x06,R24
(0158) 	ADMUX =0x42;	//选择ADC2、右对齐,y0-管温
    0437 E482      LDI	R24,0x42
    0438 B987      OUT	0x07,R24

⌨️ 快捷键说明

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