📄 ze015_1.s
字号:
; 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 + -