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

📄 ze015_1.s

📁 一款完整的家用电器程序,具有控制商用机的功能,应用广泛,有一定的参考价值
💻 S
📖 第 1 页 / 共 5 页
字号:
; 			   rxd_state0=0x08;rxd_data0[rxd_len0]=n;
; 			   rxd_checksum0^=n;rxd_len0++;
	.dbline 318
; 				break;
; 			}					
	sbi 0x14,2
	.dbline 319
; 		case 0x08:	//接收命令字
	nop
	.dbline 320
; 			{
	nop
	.dbline 321
; 			if (n<=0x0f)
	sbi 0x15,2
	.dbline 322
; 			   {rxd_state0=0x10;rxd_command0=n;rxd_data0[rxd_len0]=n;
	cbi 0x12,7
	.dbline 323
; 			   rxd_checksum0^=n;rxd_len0++;}
	nop
	.dbline 324
; 			else 
	clr R20
	xjmp L131
L128:
	.dbline 325
	.dbline 326
	sbi 0x12,7
	.dbline 327
	xcall _delay_20us
	.dbline 328
	cbi 0x12,7
	.dbline 329
	xcall _delay_20us
	.dbline 330
L129:
	.dbline 324
	inc R20
L131:
	.dbline 324
	cpi R20,9
	brlo L128
	.dbline 331
; 				{if (n==0x7E) rxd_state0=0x01;	//接收到7EH为头码1
; 				else rxd_state0=0x00;	//出错时重新开始接收
; 				}
; 				break;
; 			}	
; 		
; 		case 0x10:	//接收数据
	xcall _s_transstart
	.dbline -2
L127:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e fun_measure_temp _fun_measure_temp fV
;              i -> <dead>
;          error -> R20
	.even
_fun_measure_temp::
	xcall push_gset1
	.dbline -1
	.dbline 335
; 			{
; 			if (rxd_len0 <rxd_len0_ask)
; 				{rxd_data0[rxd_len0]=n;rxd_checksum0^=n;rxd_len0++;}
; 			else 
	.dbline 336
; 			   {
	clr R20
	.dbline 338
; 				if (rxd_checksum0==n) fun_rxdgood0();	//接收正确处理程序
; 				else	
	xcall _s_transstart
	.dbline 339
; 				   {if (n==0x7E) rxd_state0=0x01;	//接收到7EH为头码1
	ldi R16,3
	xcall _s_write_byte
	.dbline 340
; 					else rxd_state0=0x00;	//出错时重新开始接收
	sbis 0x13,2
	rjmp L133
	.dbline 341
; 				   }
	.dbline 342
; 			    }	
	cbi 0x12,7
	.dbline 343
; 			break;
	sbi 0x14,2
	.dbline 344
; 			}	
	ldi R16,20
	ldi R17,0
	xcall _delay_tt
	.dbline 345
; 		}
	xcall _s_connectionreset
	.dbline 346
; 	}
	ldi R16,30
	xcall _s_write_byte
	.dbline 347
; }
	nop
	.dbline 348
; 
	xjmp L134
L133:
	.dbline 349
	xcall _fun_read_temp
L134:
	.dbline -2
L132:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l i 1 i
	.dbsym r error 20 c
	.dbend
	.dbfunc e fun_read_temp _fun_read_temp fV
;       temp_crc -> R22
;         temp_l -> R10
;         temp_h -> R12
;              i -> R20,R21
;       crc8_cal -> R14
	.even
_fun_read_temp::
	xcall push_gset5
	.dbline -1
	.dbline 354
; void fun_rxdgood0(void )	//接收正确处理程序
;    {
; 	unsigned    char   i ;
; 	rxd_nogood_time=0; //通讯故障连续时间=0
; 	 if (rxd_command0==0x01)  //ID号命令
; 	    {
	.dbline 360
; 	    	fun_txddata0_ID();	  //ID号命令
; 	    }
; 	 else  
; 	 {
; 	 	if ((mode & b_urgent)==0) 
; 		  {//在应急状态下,触摸屏或显示板的开关机及手动命令\设置参数无效
	cbi 0x12,7
	.dbline 362
; 		 	if ((rxd_command0==0x02) &&(rxd_len0==26))fun_rxd_data0(); //接收主板点名
; 		  }
	ldi R16,5000
	ldi R17,19
	xcall _delay_tt
	.dbline 363
; 	 	fun_txd_data0();	//发送应答主板点名的数据
	xcall _fun_1232_wdt
	.dbline 364
; 	  }
	wdr
	.dbline 365
; 	  if ((fault_tongxun_times<6) &&((fault_state2 &b_fault_tongxun)!=0))	//通讯故障次数
	ldi R16,5000
	ldi R17,19
	xcall _delay_tt
	.dbline 366
; 	  {//
	xcall _fun_1232_wdt
	.dbline 367
; 	  	if ((rxd_command0==0x02) &&(rxd_len0==26))
	wdr
	.dbline 368
; 	  	{//三次内如正确接收到主模块板的点名,则清除故障
	clr R20
	clr R21
	xjmp L139
L136:
	.dbline 369
; 	  		fault_state2 &=~b_fault_tongxun;	
	.dbline 370
; 	  		}
	sbic 0x13,2
	rjmp L140
	.dbline 371
; 	  }
	.dbline 372
;    }    
	nop
	.dbline 373
;     
	clr R16
	xcall _s_read_byte
	mov R12,R16
	.dbline 375
;  void fun_rxd_data0(void )	//存入显示板点名的数据 
;     {
	clr R16
	xcall _s_read_byte
	mov R10,R16
	.dbline 376
; 	unsigned    char   i ,temp;
	xcall _read_crc_byte
	mov R22,R16
	.dbline 377
; 	unsigned    char  *point_temp;
	ldi R30,<_CRC8_shf15_TAB+3
	ldi R31,>_CRC8_shf15_TAB+3
	lpm R14,Z
	.dbline 378
; 	point_temp = &rxd_data0[4];	//i=4;	//第1个有效数据
	eor R14,R12
	.dbline 379
; 	int_THset= *point_temp++; //字节1设定温度整数
	ldi R24,<_CRC8_shf15_TAB
	ldi R25,>_CRC8_shf15_TAB
	mov R30,R14
	clr R31
	add R30,R24
	adc R31,R25
	lpm R14,Z
	.dbline 380
;  	RHset=*point_temp++; //字节2设定湿度整数
	eor R14,R10
	.dbline 381
;  //字节3高4位为设定温度小数,低4位为湿度精度RHm2~10,出厂设置5
	mov R30,R14
	clr R31
	add R30,R24
	adc R31,R25
	lpm R14,Z
	.dbline 382
;   	dig_THset =*point_temp>>4; 
	cp R16,R14
	brne L143
	.dbline 383
;   	rh_actual =*point_temp &0x0f;
	.dbline 384
;   	point_temp++;
	mov R18,R10
	mov R16,R12
	xcall _calc_sth15_t
	sts _t_value+1,R17
	sts _t_value,R16
	sts _t_value+2+1,R19
	sts _t_value+2,R18
	.dbline 386
;   	th_actual10=*point_temp++; //字节4温度精度Tm 0.5~5,出厂设置*10
;   	i_cof_sensiadj10=*point_temp++;	//字节5灵敏度调节参数*10
	nop
	.dbline 387
;   	i_adj_time=*point_temp++;	//字节6容调间隔时间秒
	xcall _fun_measure_humid
	.dbline 388
; 	mode_set_1=*point_temp++; //字节7模块组合参数
	xjmp L138
L143:
	.dbline 390
;    	mint_comprun_set=*point_temp++;	//字节8压缩机最小运行时间1~6分钟
;   	imax10_set=*point_temp++;	//字节9加湿器额定电流*10
	.dbline 391
;   	t_outpai_set=*point_temp++;	//字节10加湿器定时排水时间5~120秒,出厂设置60秒
	nop
	.dbline 392
;   	humid_ratio=*point_temp++;	//字节11加湿器量设定%
	.dbline 393
;   	exghaust_TH_set=*point_temp++;	//字节12排气温度保护
	xjmp L138
L140:
	.dbline 396
	.dbline 397
	nop
	.dbline 397
	nop
	.dbline 397
	nop
	.dbline 397
	nop
	.dbline 397
	nop
	.dbline 397
	nop
	.dbline 397
	nop
	.dbline 397
	nop
	.dbline 398
	nop
	.dbline 398
	nop
	.dbline 398
	nop
	.dbline 398
	nop
	.dbline 398
	nop
	.dbline 398
	nop
	.dbline 398
	nop
	.dbline 398
	nop
	.dbline 399
	nop
	.dbline 399
	nop
	.dbline 399
	nop
	.dbline 399
	nop
	.dbline 399
	nop
	.dbline 399
	nop
	.dbline 399
	nop
	.dbline 399
	nop
	.dbline 400
	nop
	.dbline 400
	nop
	.dbline 400
	nop
	.dbline 400
	nop
	.dbline 400
	nop
	.dbline 400
	nop
	.dbline 400
	nop
	.dbline 400
	nop
	.dbline 401
	nop
	.dbline 401
	nop
	.dbline 401
	nop
	.dbline 401
	nop
	.dbline 401
	nop
	.dbline 401
	nop
	.dbline 401
	nop
	.dbline 401
	nop
	.dbline 402
	nop
	.dbline 402
	nop
	.dbline 402
	nop
	.dbline 402
	nop
	.dbline 402
	nop
	.dbline 402
	nop
	.dbline 402
	nop
	.dbline 402
	nop
	.dbline 403
	xcall _fun_1232_wdt
	.dbline 403
	wdr
	.dbline 404
	.dbline 405
L137:
	.dbline 368
	subi R20,255  ; offset = 1
	sbci R21,255
L139:
	.dbline 368
	cpi R20,136
	ldi R30,19
	cpc R21,R30
	brsh X2
	xjmp L136
X2:
L138:
	.dbline -2
L135:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r temp_crc 22 c
	.dbsym r temp_l 10 c
	.dbsym r temp_h 12 c
	.dbsym r i 20 i
	.dbsym r crc8_cal 14 c
	.dbend
	.dbfunc e fun_measure_humid _fun_measure_humid fV
;              i -> <dead>
;          error -> R20
	.even
_fun_measure_humid::
	xcall push_gset1
	.dbline -1
	.dbline 410
;   	mint_compstop_set=*point_temp++; //字节13压缩机最小停机时间1~6分钟
;   	t_fan_ondelay_set=*point_temp++; //字节14送风机延时启动时间出厂设置5秒
;   	temp=*point_temp++; //字节15压缩机延时启动时间 1分钟=3*20秒
;   	t_comp_ondelay_set =temp+temp+temp;	//20080114将接收到的压缩机延时启动时间转成20秒
;   	t_lppdelay_set=*point_temp++;	//字节16低压保护延时出厂设置20秒
;   	rh_value_modify=*point_temp++;	//字节17回风湿度修正值负数
;   	th_value_modify=*point_temp++;	//字节18回风温度修正值负数*10
;   	act_ask_set=*point_temp++; //字节19动作请求
; 	manual_act_ask =act_ask_set;	//置手动设置
; 	mokuai_set=*point_temp++; //字节20模块模式 //字节21\22预留字节
; 	if (mokuai_set &b_fault_rst_onask)run_state2 |=b_fault_reset;	//故障复位命令
; //	if ((mokuai_set &b_connect_onask) &&(mokuai_set &b_kaiji_ask)) mode |=b_kaiji;	//当模块连接及开机时为开机,断开时为关机
; 	if (mokuai_set &b_kaiji_ask) mode |=b_kaiji;	//20080107当模块开机时为开机,关机时为关机,
; 	else mode &=~b_kaiji;
; 	if (mokuai_set &b_manual_onask) mode |=b_manual_on;	//当模块手动时为手动
; 	else mode &=~b_manual_on;	//自动,备用先不管
; 	NOP();	//先不管显示板控制有效,都认故障复位命令 TEST
	.dbline 411
; 	humid_rated=*point_temp++;//字节21额定加湿量设定
	clr R20
	.dbline 413
; 	fault_yuliu=*point_temp;//字节2220071115数据11预留 主模块故障标志 B7
;    }
	xcall _s_transstart
	.dbline 414
;    
	ldi R16,5
	xcall _s_write_byte
	.dbline 415
; void fun_txd_data0(void)	//发送子模块板的运行数据
	sbis 0x13,2
	rjmp L146
	.dbline 416
;   {
	.dbline 417
; 	signed    char   temp ;//暂存值
	cbi 0x12,7
	.dbline 418
; 	unsigned    char   temp_txd ;//发送数据
	sbi 0x14,2
	.dbline 419
; 	unsigned    char   temp_checksum ;//校验
	ldi R16,20
	ldi R17,0
	xcall _delay_tt
	.dbline 420
; 	unsigned    char  *point_txd;
	xcall _s_connectionreset
	.dbline 421
; 	 point_txd = &txd_data0[0];
	ldi R16,30
	xcall _s_write_byte
	.dbline 422
; 	 *point_txd++ =0x7E;
	nop
	.dbline 423
; 	 *point_txd++=0x7E;
	xjmp L147
L146:
	.dbline 424
	xcall _fun_read_humid
L147:
	.dbline -2
L145:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l i 1 i
	.dbsym r error 20 c
	.dbend
	.dbfunc e fun_read_humid _fun_read_humid fV
;       temp_crc -> R22
;           rh_l -> R10
;           rh_h -> R12
;              i -> R20,R21
;       crc8_cal -> R14
	.even
_fun_read_humid::
	xcall push_gset5
	sbiw R28,4
	.dbline -1
	.dbline 428
; 	 *point_txd=0xFF;	//显示板接收方为FFH
; 	 temp_checksum=*point_txd++;	//异或校验
; 	 *point_txd =0x40;	//20080201 address;	//发送方地址
; 	 temp_checksum ^=*point_txd++;	//异或校验
; 	 *point_txd=0x11;	//包号
	.dbline 434
; 	 temp_checksum ^=*point_txd++;	//异或校验
; 	 *point_txd=26;	//长度26
; 	 temp_checksum ^=*point_txd++;	//异或校验	 
; 	 *point_txd=ID_l;	//IDH机组ID号
; 	 temp_checksum ^=*point_txd++;	//异或校验
; 	 *point_txd=ID_h;	//IDl机组ID号
	cbi 0x12,7
	.dbline 436
; 	 temp_checksum ^=*point_txd++;	//异或校验
; 	*point_txd=0x82;	//回复显示板点名机组命令82H
	ldi R16,3000
	ldi R17,11
	xcall _delay_tt
	.dbline 437
; 	 temp_checksum ^=*point_txd++;	//异或校验
	xcall _fun_1232_wdt
	.dbline 438
; 	 temp=t_value10_20s>>8;	//数据1回风温度高8位
	wdr
	.dbline 440
; 	 *point_txd=temp;
; 	 temp_checksum ^=*point_txd++;	//异或校验
	clr R20
	clr R21
	xjmp L152
L149:
	.dbline 441
; 	 *point_txd=(unsigned char)(t_value10_20s);	//数据2回风温度的低8位
	.dbline 443
; 	 temp_checksum ^=*point_txd++;	//异或校验
; 	 *point_txd=rh_value_20s;	//数据3回风湿度平均值
	sbic 0x13,2
	rjmp L153
	.dbline 444
; 	 temp_checksum ^=*point_txd++;	//异或校验
	.dbline 445
; 	 *point_txd=i_humid10;	//数据4加湿电流*10
	nop
	.dbline 446
; 	 temp_checksum ^=*point_txd++;	//异或校验
	clr R16
	xcall _s_read_byte
	mov R12,R16
	.dbline 448
; 	 *point_txd=exghaust_TH;	//数据5压缩机排气温度EXHAUST
; 	 temp_checksum ^=*point_txd++;	//异或校验
	clr R16
	xcall _s_read_byte
	mov R10,R16
	.dbline 449
; 	*point_txd=act_state1;//数据6输出1
	xcall _read_crc_byte
	mov R22,R16
	.dbline 450
; 	 temp_checksum ^=*point_txd++;	//异或校验
	ldi R30,<_CRC8_shf15_TAB+5
	ldi R31,>_CRC8_shf15_TAB+5
	lpm R14,Z
	.dbline 451
; 	*point_txd=act_state2;//数据7输出2
	eor R14,R12
	.dbline 452
; 	 temp_checksum ^=*point_txd++;	//异或校验
	ldi R24,<_CRC8_shf15_TAB
	ldi R25,>_CRC8_shf15_TAB
	mov R30,R14
	clr R31
	add R30,R24
	adc R31,R25
	lpm R14,Z
	.dbline 453
; 	 temp_txd =fault_comp_guozai_times;	//b1b0压缩机过载保护次数
	eor R14,R10
	.dbline 454
; 	 temp=fault_lpp_times<<2;	//b3b2低压保护次数
	mov R30,R14
	clr R31
	add R30,R24
	adc R31,R25
	lpm R14,Z
	.dbline 455
; 	 temp_txd +=temp;
	cp R16,R14
	breq X4
	xjmp L156
X4:
	.dbline 456
; 	 temp=fault_exh_times<<4;	//b5b4排气温度过高保护次数
	.dbline 457
; 	 temp_txd +=temp;
	nop
	.dbline 458
; 	 if ((PINB &cap_boma2)==0) temp_txd |=0x80;
	clr R2
	clr R3
	sts _sht_noread_time+1,R3
	sts _sht_noread_time,R2
	.dbline 459
; 	 if ((PINB &cap_boma1)==0) temp_txd |=0x40;
	ldi R16,<L158
	ldi R17,>L158
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	lds R4,_t_value+2
	lds R5,_t_value+2+1
	lds R2,_t_value
	lds R3,_t_value+1
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall empy32fs
	lds R16,_th_value_modify
	clr R17
	sbrc R16,7
	com R17
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall add32f
	xcall fp2int
	sts _t_value10+1,R17
	sts _t_value10,R16
	.dbline 460
; 	 *point_txd=temp_txd;	//数据8 故障+容量拨码21
	lds R4,_t_value+2
	lds R5,_t_value+2+1
	lds R2,_t_value
	lds R3,_t_value+1
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	mov R18,R10
	mov R16,R12
	xcall _calc_sth15_rh
	sts _rh_value,R16
	.dbline 461
; 	 temp_checksum ^=*point_txd++;	//异或校验
	lds R2,_rh_value_modify
	mov R3,R16
	add R3,R2
	sts _rh_value,R3
	.dbline 462
; 	 *point_txd=fault_state2;	//数据9 故障2
	xcall _fun_rht_compare
	.dbline 463
; 	 temp_checksum ^=*point_txd++;	//异或校验
	nop
	.dbline 464
; 	 *point_txd=fault_state3;	//数据10 故障3
	lds R24,_b_fault_sht_times
	cpi R24,6
	brlo X5
	xjmp L154
X5:
	.dbline 464
	lds R24,_fault_state2
	andi R24,251
	sts _fault_state2,R24
	.dbline 466
; 	 temp_checksum ^=*point_txd++;	//异或校验
; 	 *point_txd=fault_state4;	//数据11 故障4
	xjmp L154
L156:
	.dbline 468
; 	 temp_checksum ^=*point_txd++;	//异或校验
; 	 *point_txd=fault_state5;	//数据12 故障5
	.dbline 469
; 	 temp_checksum ^=*point_txd++;	//异或校验
	nop
	.dbline 470
; 	 *point_txd=fault_state6;	//数据13 故障6
	nop
	.dbline 471
; 	 temp_checksum ^=*point_txd++;	//异或校验
	xjmp L151
X3:
	.dbline 473
; 	 *point_txd=dangwei_ofan;	//数据14 室外风机档位预留
; 	 temp_checksum ^=*point_txd++;	//异或校验
L153:
	.dbline 475
; 	 *point_txd=outroom_TH;//evin_TH;																		//outroom_TH;	//数据15 预留室外环境温度
; 	 temp_checksum ^=*point_txd++;	//异或校验
	.dbline 476
; 	 *point_txd=0;	//数据16 预留电流A整数
	nop
	.dbline 476
	nop
	.dbline 476
	nop
	.dbline 476
	nop
	.dbline 476
	nop
	.dbline 476
	nop
	.dbline 476
	nop
	.dbline 476
	nop
	.dbline 477
; 	 temp_checksum ^=*point_txd++;	//异或校验
	nop
	.dbline 477
	nop
	.dbline 477
	nop
	.dbline 477
	nop
	.dbline 477
	nop
	.dbline 477
	nop
	.dbline 477
	nop
	.dbline 477
	nop
	.dbline 478
; 	 *point_txd=0;	//数据17 预留电流B整数
	nop
	.dbline 478
	nop
	.dbline 478
	nop
	.dbline 478
	nop
	.dbline 478
	nop
	.dbline 478
	nop
	.dbline 478
	nop
	.dbline 478
	nop
	.dbline 479
; 	 temp_checksum ^=*point_txd++;	//异或校验
	nop
	.dbline 479
	nop
	.dbline 479
	nop
	.dbline 479
	nop
	.dbline 479
	nop
	.dbline 479
	nop
	.dbline 479
	nop
	.dbline 479
	nop
	.dbline 480
; 	 *point_txd=0;	//数据18 预留电流C整数
	nop
	.dbline 480
	nop
	.dbline 480
	nop
	.dbline 480
	nop
	.dbline 480
	nop
	.dbline 480
	nop
	.dbline 480
	nop
	.dbline 480
	nop
	.dbline 481
; 	 temp_checksum ^=*point_txd++;	//异或校验
	xcall _fun_1232_wdt
	.dbline 481
	wdr
	.dbline 482

⌨️ 快捷键说明

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