📄 comm.s
字号:
sts _txd_mesg+1,R24
.dbline 223
; txd_mesg[2]='D';
ldi R24,68
sts _txd_mesg+2,R24
.dbline 224
; act[txd_llc_job]=1;
ldi R24,<_act
ldi R25,>_act
lds R30,_txd_llc_job
clr R31
add R30,R24
adc R31,R25
ldi R24,1
std z+0,R24
.dbline 225
; goto rs485_app_ret;
xjmp L57
L51:
.dbline 228
; }
;
; if((rxd_mesg[0]=='W')&&(rxd_mesg[1]=='I')&&(rxd_mesg[2]=='D')) /* 设置设备地址命令e9 1f 04 57 49 44 01 40 */
lds R24,_rxd_mesg
cpi R24,87
brne L58
lds R24,_rxd_mesg+1
cpi R24,73
brne L58
lds R24,_rxd_mesg+2
cpi R24,68
brne L58
.dbline 229
; { pump_tab=rxd_mesg[3];
.dbline 229
lds R2,_rxd_mesg+3
sts _pump_tab,R2
L63:
.dbline 230
; do {temp=EEPROMwrite(pump_tab_romaddr,pump_tab);}
.dbline 230
lds R18,_pump_tab
ldi R16,6
ldi R17,0
xcall _EEPROMwrite
movw R10,R16
.dbline 230
L64:
.dbline 231
; while(temp>0);
tst R10
brne L63
tst R11
brne L63
X3:
.dbline 232
; if(rxd_mesg_addr!=BROADCAST_ADDR)
lds R24,_rxd_mesg_addr
cpi R24,31
brne X6
xjmp L57
X6:
.dbline 233
; { txd_mesg_addr=pump_tab;
.dbline 233
lds R2,_pump_tab
sts _txd_mesg_addr,R2
.dbline 234
; txd_mesg_len=3;
ldi R24,3
sts _txd_mesg_len,R24
.dbline 235
; txd_mesg[0]='W';
ldi R24,87
sts _txd_mesg,R24
.dbline 236
; txd_mesg[1]='I';
ldi R24,73
sts _txd_mesg+1,R24
.dbline 237
; txd_mesg[2]='D';
ldi R24,68
sts _txd_mesg+2,R24
.dbline 238
; act[txd_llc_job]=1;
ldi R24,<_act
ldi R25,>_act
lds R30,_txd_llc_job
clr R31
add R30,R24
adc R31,R25
ldi R24,1
std z+0,R24
.dbline 239
; }
.dbline 240
; goto rs485_app_ret;
xjmp L57
L58:
.dbline 243
; }
;
; if((rxd_mesg_addr!=BROADCAST_ADDR)&&(rxd_mesg[0]=='R')&&(rxd_mesg[1]=='J')) // 读取运行参数命令e9 01 2 52 47 16
lds R24,_rxd_mesg_addr
cpi R24,31
brne X7
xjmp L70
X7:
lds R24,_rxd_mesg
cpi R24,82
breq X8
xjmp L70
X8:
lds R24,_rxd_mesg+1
cpi R24,74
breq X9
xjmp L70
X9:
.dbline 244
; { //if(in_out_number<2)
.dbline 246
; //{
; txd_mesg_addr=pump_tab;
lds R2,_pump_tab
sts _txd_mesg_addr,R2
.dbline 247
; txd_mesg_len=6;
ldi R24,6
sts _txd_mesg_len,R24
.dbline 248
; txd_mesg[0]='R';
ldi R24,82
sts _txd_mesg,R24
.dbline 249
; txd_mesg[1]='J';
ldi R24,74
sts _txd_mesg+1,R24
.dbline 250
; txd_mesg[2]=(speed>>8);
lds R2,_speed
lds R3,_speed+1
mov R2,R3
clr R3
sts _txd_mesg+2,R2
.dbline 251
; txd_mesg[3]=speed;
lds R2,_speed
lds R3,_speed+1
sts _txd_mesg+3,R2
.dbline 252
; txd_mesg[4]=0;
clr R2
sts _txd_mesg+4,R2
.dbline 253
; if (state&(1<<RUN_STOP))
lds R2,_state
sbrs R2,3
rjmp L77
.dbline 254
; {txd_mesg[4]|=0b00000001;}
.dbline 254
lds R24,_txd_mesg+4
ori R24,1
sts _txd_mesg+4,R24
.dbline 254
xjmp L78
L77:
.dbline 256
; else
; {txd_mesg[4]&=0b11111110;}
.dbline 256
lds R24,_txd_mesg+4
andi R24,254
sts _txd_mesg+4,R24
.dbline 256
L78:
.dbline 257
; txd_mesg[5]=0;
clr R2
sts _txd_mesg+5,R2
.dbline 258
; if (state&(1<<CW_CCW))
lds R2,_state
sbrs R2,0
rjmp L82
.dbline 259
; {txd_mesg[5]&=0b11111110;}
.dbline 259
lds R24,_txd_mesg+5
andi R24,254
sts _txd_mesg+5,R24
.dbline 259
xjmp L83
L82:
.dbline 261
; else
; {txd_mesg[5]|=0b00000001;}
.dbline 261
lds R24,_txd_mesg+5
ori R24,1
sts _txd_mesg+5,R24
.dbline 261
L83:
.dbline 262
; act[txd_llc_job]=1;
ldi R24,<_act
ldi R25,>_act
lds R30,_txd_llc_job
clr R31
add R30,R24
adc R31,R25
ldi R24,1
std z+0,R24
.dbline 266
; //}
; //else
; //{ act[rs485_app_job]=1;}
; goto rs485_app_ret;
xjmp L57
L70:
.dbline 269
; }
;
; if((rxd_mesg[0]=='W')&&(rxd_mesg[1]=='J')) // 设置运行参数命令
lds R24,_rxd_mesg
cpi R24,87
breq X10
xjmp L86
X10:
lds R24,_rxd_mesg+1
cpi R24,74
breq X11
xjmp L86
X11:
.dbline 270
; { if(in_out_number<2) //内控控制
.dbline 270
lds R24,_in_out_number
cpi R24,2
brlo X12
xjmp L57
X12:
.dbline 271
; { //delay_cortrol_job();
.dbline 272
; all_stop();//停止所有运行
xcall _all_stop
.dbline 273
; rxd_mesg_temp=rxd_mesg[2];//必须如此,rxd_mesg[4]进行常整运算时有错
lds R2,_rxd_mesg+2
clr R3
clr R4
clr R5
movw R30,R28
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
.dbline 274
; speed=rxd_mesg_temp*256+rxd_mesg[3];
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32u
movw R2,R16
movw R4,R18
lds R6,_rxd_mesg+3
clr R7
clr R8
clr R9
add R2,R6
adc R3,R7
adc R4,R8
adc R5,R9
sts _speed+1,R3
sts _speed,R2
.dbline 275
; if ((speed==0)||(speed>600))
tst R2
brne X4
tst R3
breq L95
X4:
ldi R24,600
ldi R25,2
lds R2,_speed
lds R3,_speed+1
cp R24,R2
cpc R25,R3
brsh L93
L95:
.dbline 276
; {speed=1;}
.dbline 276
ldi R24,1
ldi R25,0
sts _speed+1,R25
sts _speed,R24
.dbline 276
L93:
.dbline 277
; cal_timer1(speed);
lds R16,_speed
lds R17,_speed+1
xcall _cal_timer1
.dbline 278
; EEPROMWriteWord(speed_romaddr,&speed);
ldi R18,<_speed
ldi R19,>_speed
ldi R16,3
ldi R17,0
xcall _EEPROMWriteWord
.dbline 279
; if (rxd_mesg[4]&0b00000001)
lds R2,_rxd_mesg+4
sbrs R2,0
rjmp L96
.dbline 280
; {state|=(1<<RUN_STOP);}
.dbline 280
lds R24,_state
ori R24,8
sts _state,R24
.dbline 280
xjmp L97
L96:
.dbline 282
; else
; {state&=~(1<<RUN_STOP);}
.dbline 282
lds R24,_state
andi R24,247
sts _state,R24
.dbline 282
L97:
.dbline 283
; if (rxd_mesg[5]&0b00000001)
lds R2,_rxd_mesg+5
sbrs R2,0
rjmp L99
.dbline 284
; {state&=~(1<<CW_CCW);}
.dbline 284
lds R24,_state
andi R24,254
sts _state,R24
.dbline 284
xjmp L100
L99:
.dbline 286
; else
; {state|=(1<<CW_CCW);}
.dbline 286
lds R24,_state
ori R24,1
sts _state,R24
.dbline 286
L100:
L102:
.dbline 287
; do {temp=EEPROMwrite(state_romaddr,state);}
.dbline 287
lds R18,_state
ldi R16,5
ldi R17,0
xcall _EEPROMwrite
movw R10,R16
.dbline 287
L103:
.dbline 288
; while(temp>0);
tst R10
brne L102
tst R11
brne L102
X5:
.dbline 289
; state_init();
xcall _state_init
.dbline 291
;
; if(rxd_mesg_addr!=BROADCAST_ADDR)
lds R24,_rxd_mesg_addr
cpi R24,31
breq L57
.dbline 292
; { txd_mesg_addr=pump_tab;
.dbline 292
lds R2,_pump_tab
sts _txd_mesg_addr,R2
.dbline 293
; txd_mesg_len=2;
ldi R24,2
sts _txd_mesg_len,R24
.dbline 294
; txd_mesg[0]='W';
ldi R24,87
sts _txd_mesg,R24
.dbline 295
; txd_mesg[1]='J';
ldi R24,74
sts _txd_mesg+1,R24
.dbline 296
; act[txd_llc_job]=1;
ldi R24,<_act
ldi R25,>_act
lds R30,_txd_llc_job
clr R31
add R30,R24
adc R31,R25
ldi R24,1
std z+0,R24
.dbline 297
; }
.dbline 298
; }
.dbline 299
; goto rs485_app_ret;
L86:
L57:
.dbline 301
; }
; rs485_app_ret:;
.dbline -2
L50:
adiw R28,8
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym l flow_temp 4 l
.dbsym l fcs 1 c
.dbsym l i 1 c
.dbsym l rxd_mesg_temp 0 l
.dbsym r temp 10 i
.dbend
.dbfunc e job_att _job_att fV
; crrt_jn -> R20
; i -> R22
; step -> R20
.even
_job_att::
xcall push_gset3
mov R20,R16
.dbline -1
.dbline 307
; }
; /*********************************/
;
; /* 主调度任务程序模块 */
; void job_att(char step)
; {
.dbline 309
; char i,crrt_jn;
; if(step==0)
tst R20
breq X14
xjmp L109
X14:
.dbline 310
; { for(i=1;i<=31;i++)
.dbline 310
ldi R22,1
xjmp L114
L111:
.dbline 311
.dbline 311
ldi R24,<_pri
ldi R25,>_pri
mov R30,R22
clr R31
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 312
ldi R24,<_act
ldi R25,>_act
mov R30,R22
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 313
L112:
.dbline 310
inc R22
L114:
.dbline 310
ldi R24,31
cp R24,R22
brsh L111
.dbline 314
; { pri[i]=0;
; act[i]=0;
; }
; rxd_llc_job=9;
ldi R24,9
sts _rxd_llc_job,R24
.dbline 315
; pri[rxd_llc_job]=95;
ldi R24,<_pri
ldi R25,>_pri
lds R30,_rxd_llc_job
clr R31
add R30,R24
adc R31,R25
ldi R24,95
std z+0,R24
.dbline 316
; txd_llc_job=10;
ldi R24,10
sts _txd_llc_job,R24
.dbline 317
; pri[txd_llc_job]=94;
ldi R24,<_pri
ldi R25,>_pri
lds R30,_txd_llc_job
clr R31
add R30,R24
adc R31,R25
ldi R24,94
std z+0,R24
.dbline 318
; rs485_app_job=11;
ldi R24,11
sts _rs485_app_job,R24
.dbline 319
; pri[rs485_app_job]=93;
ldi R24,<_pri
ldi R25,>_pri
lds R30,_rs485_app_job
clr R31
add R30,R24
adc R31,R25
ldi R24,93
std z+0,R24
.dbline 320
; att_n_max=12;
ldi R24,12
sts _att_n_max,R24
.dbline 321
; }
xjmp L110
L109:
.dbline 323
; else
; { crrt_jn=0;
.dbline 323
clr R20
.dbline 324
; for(i=1;i<=att_n_max;i++)
ldi R22,1
xjmp L118
L115:
.dbline 325
; { if((act[i]!=0)&&(pri[i]>pri[crrt_jn]))
.dbline 325
ldi R24,<_act
ldi R25,>_act
mov R30,R22
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
tst R2
breq L119
ldi R24,<_pri
ldi R25,>_pri
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
mov R30,R22
clr R31
add R30,R24
adc R31,R25
ldd R3,z+0
cp R2,R3
brsh L119
.dbline 326
; { crrt_jn=i;}
.dbline 326
mov R20,R22
.dbline 326
L119:
.dbline 327
L116:
.dbline 324
inc R22
L118:
.dbline 324
lds R2,_att_n_max
cp R2,R22
brsh L115
.dbline 328
; }
; switch (crrt_jn)
mov R10,R20
clr R11
movw R24,R10
cpi R24,9
ldi R30,0
cpc R25,R30
breq L124
cpi R24,10
ldi R30,0
cpc R25,R30
breq L125
cpi R24,11
ldi R30,0
cpc R25,R30
breq L126
cpi R24,12
ldi R30,0
cpc R25,R30
breq L122
xjmp L121
X13:
.dbline 329
; {
L124:
.dbline 330
; case 9: rxd_llc_job1();
xcall _rxd_llc_job1
.dbline 331
; break;
xjmp L122
L125:
.dbline 332
; case 10: txd_llc_job1();
xcall _txd_llc_job1
.dbline 333
; break;
xjmp L122
L126:
.dbline 334
; case 11: rs485_app_job1();
xcall _rs485_app_job1
.dbline 335
; break;
.dbline 336
; case 12: break;
L121:
L122:
.dbline 338
L110:
.dbline -2
L108:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r crrt_jn 20 c
.dbsym r i 22 c
.dbsym r step 20 c
.dbend
.dbfunc e serial_init _serial_init fV
.even
_serial_init::
.dbline -1
.dbline 345
; }
; }
; }
;
; /*
; 串口初始化
; */
; void serial_init (void)
; {
.dbline 346
; UBRRH=RS485_BAUDH;
ldi R24,1
out 0x20,R24
.dbline 347
; UBRRL=RS485_BAUDL;
ldi R24,160
out 0x9,R24
.dbline 348
; UCSRA=RS485_UCSRA;
ldi R24,64
out 0xb,R24
.dbline 349
; UCSRC=RS485_UCSRC;
ldi R24,166
out 0x20,R24
.dbline 350
; UCSRB=RS485_UCSRB;
ldi R24,192
out 0xa,R24
.dbline 351
; UCSRB=UCSRB|0b00011000; /* 允许接收、发送 */
in R24,0xa
ori R24,24
out 0xa,R24
.dbline 352
; state1=0;
clr R2
sts _state1,R2
.dbline 353
; DDRC|=(1<<DE_485);
sbi 0x14,0
.dbline 354
; PORTC&=~(1<<DE_485);
cbi 0x15,0
.dbline -2
L128:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile C:\BJQD\comm.c
_att_n_max::
.blkb 1
.dbsym e att_n_max _att_n_max c
_rs485_app_job::
.blkb 1
.dbsym e rs485_app_job _rs485_app_job c
_txd_llc_job::
.blkb 1
.dbsym e txd_llc_job _txd_llc_job c
_rxd_llc_job::
.blkb 1
.dbsym e rxd_llc_job _rxd_llc_job c
_act::
.blkb 16
.dbsym e act _act A[16:16]c
_pri::
.blkb 16
.dbsym e pri _pri A[16:16]c
_txd_mesg::
.blkb 15
.dbsym e txd_mesg _txd_mesg A[15:15]c
_txd_mesg_len::
.blkb 1
.dbsym e txd_mesg_len _txd_mesg_len c
_txd_mesg_addr::
.blkb 1
.dbsym e txd_mesg_addr _txd_mesg_addr c
_rxd_mesg::
.blkb 15
.dbsym e rxd_mesg _rxd_mesg A[15:15]c
_rxd_mesg_len::
.blkb 1
.dbsym e rxd_mesg_len _rxd_mesg_len c
_rxd_mesg_addr::
.blkb 1
.dbsym e rxd_mesg_addr _rxd_mesg_addr c
_fcs1::
.blkb 1
.dbsym e fcs1 _fcs1 c
_rxd_h_ok::
.blkb 1
.dbsym e rxd_h_ok _rxd_h_ok c
_mac_txd_th::
.blkb 1
.dbsym e mac_txd_th _mac_txd_th c
_rxd_data::
.blkb 1
.dbsym e rxd_data _rxd_data c
_txd_ins_data::
.blkb 1
.dbsym e txd_ins_data _txd_ins_data c
_txd_ins_flag::
.blkb 1
.dbsym e txd_ins_flag _txd_ins_flag c
_rxd_ins_flag::
.blkb 1
.dbsym e rxd_ins_flag _rxd_ins_flag c
_rxd_cnt::
.blkb 1
.dbsym e rxd_cnt _rxd_cnt c
_txd_cnt::
.blkb 1
.dbsym e txd_cnt _txd_cnt c
_tx485_busy::
.blkb 1
.dbsym e tx485_busy _tx485_busy c
_rxd_frm_len::
.blkb 1
.dbsym e rxd_frm_len _rxd_frm_len c
_rxd_frm::
.blkb 15
.dbsym e rxd_frm _rxd_frm A[15:15]c
_txd_frm_len::
.blkb 1
.dbsym e txd_frm_len _txd_frm_len c
_txd_frm::
.blkb 15
.dbsym e txd_frm _txd_frm A[15:15]c
_pump_tab::
.blkb 1
.dbsym e pump_tab _pump_tab c
_state1::
.blkb 1
.dbsym e state1 _state1 c
_state2::
.blkb 1
.dbsym e state2 _state2 c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -