📄 m8sp01.s
字号:
mov R24,R3
subi R24,255 ; addi 1
sts _RXbufP,R24
.dbline 198
; }
L27:
.dbline 199
ldi R24,<_RXBUF
ldi R25,>_RXBUF
lds R30,_RXbufP
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 201
L24:
.dbline -2
L22:
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R25,y+
ld R24,y+
ld R16,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbsym r TmpD 16 c
.dbend
.dbfunc e TXbufRDY _TXbufRDY fV
.even
_TXbufRDY::
.dbline -1
.dbline 204
; RXBUF[RXbufP]=TmpD;
;
; }//else
; }//void uart1_rx_isr(void)
; void TXbufRDY(void)
; {
.dbline 206
;
; TXBUF[0]=TRFG0;
ldi R24,254
sts _TXBUF,R24
.dbline 207
; TXBUF[1]=TRFG1;
ldi R24,253
sts _TXBUF+1,R24
.dbline 208
; TXBUF[2]=SlaveAdress;
ldi R24,5
sts _TXBUF+2,R24
.dbline 209
; TXBUF[10]=TRFG2;
ldi R24,241
sts _TXBUF+10,R24
.dbline 210
; TXBUF[11]=TRFG3;
ldi R24,240
sts _TXBUF+11,R24
.dbline -2
L29:
.dbline 0 ; func end
ret
.dbend
.dbfunc e RXBUFCLR _RXBUFCLR fV
; i -> R16
.even
_RXBUFCLR::
.dbline -1
.dbline 213
; }//void TXbufRDY(void)
; void RXBUFCLR(void)
; {
.dbline 214
; unsigned char i=0;
clr R16
.dbline 215
; for(i=0;i<RXINTMAX;i++)
rjmp L38
L35:
.dbline 216
ldi R24,<_RXBUF
ldi R25,>_RXBUF
mov R30,R16
clr R31
add R30,R24
adc R31,R25
clr R2
std z+0,R2
L36:
.dbline 215
inc R16
L38:
.dbline 215
lds R2,_RXINTMAX
cp R16,R2
brlo L35
.dbline -2
L34:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e RX_INIT _RX_INIT fV
.even
_RX_INIT::
.dbline -1
.dbline 220
; RXBUF[i]=0;
; }//void RXBUFCLR(void)
;
; void RX_INIT(void)
; {
.dbline 221
; OUTDEOFF;
cbi 0x12,4
.dbline 222
; RXbufP=0;
clr R2
sts _RXbufP,R2
.dbline 223
; RDHIS=0xff;
ldi R24,255
sts _RDHIS,R24
.dbline 224
; RXADDRESS
sbi 0xb,0
.dbline 224
sts _TRADFG,R2
.dbline 226
;
; RXENABLE
cbi 0xa,3
.dbline 226
sbi 0xa,4
.dbline -2
L39:
.dbline 0 ; func end
ret
.dbend
.dbfunc e RXRCK2 _RXRCK2 fV
.even
_RXRCK2::
rcall push_gset2
.dbline -1
.dbline 230
; }//void RX_INIT(void)
;
; void RXRCK2(void) //检查收到的数据是否有效
; {
.dbline 232
;
; if(RXbufP>RXbufPmax)
lds R2,_RXbufPmax
lds R3,_RXbufP
cp R2,R3
brsh L41
.dbline 233
; {
.dbline 235
;
; RXERROR=2;
ldi R24,2
sts _RXERROR,R24
.dbline 236
; if(RXBUF[12]==TRFG3 & RXBUF[11]==TRFG2 & RXBUF[1]==TRFG0 & RXBUF[2]==TRFG1)
lds R24,_RXBUF+12
cpi R24,240
brne L49
ldi R22,1
ldi R23,0
rjmp L50
L49:
clr R22
clr R23
L50:
lds R24,_RXBUF+11
cpi R24,241
brne L51
ldi R20,1
ldi R21,0
rjmp L52
L51:
clr R20
clr R21
L52:
lds R24,_RXBUF+1
cpi R24,254
brne L53
ldi R18,1
ldi R19,0
rjmp L54
L53:
clr R18
clr R19
L54:
lds R24,_RXBUF+2
cpi R24,253
brne L55
ldi R16,1
ldi R17,0
rjmp L56
L55:
clr R16
clr R17
L56:
movw R2,R22
and R2,R20
and R3,R21
and R2,R18
and R3,R19
and R2,R16
and R3,R17
tst R2
brne X0
tst R3
breq L42
X0:
.dbline 237
; {
.dbline 239
;
; RXERROR=0;
clr R2
sts _RXERROR,R2
.dbline 240
; }
.dbline 242
;
; }//if(RXbufP>RXbufPmax)
rjmp L42
L41:
.dbline 244
.dbline 245
ldi R24,1
sts _RXERROR,R24
.dbline 246
L42:
.dbline -2
L40:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbend
.dbfunc e RXRCK _RXRCK fV
; i -> R16
; tP -> R16
.even
_RXRCK::
rcall push_gset2
.dbline -1
.dbline 252
; else
; {
; RXERROR=1;
; }//else
;
; // OUTLED1ON;
; }//void RXRCK(void)
;
; void RXRCK(void) //检查收到的数据是否有效
; {
.dbline 253
; unsigned char tP=0;
clr R16
.dbline 254
; unsigned char i=0;
.dbline 255
; if(RXbufP>RXbufPmax)
lds R2,_RXbufPmax
lds R3,_RXbufP
cp R2,R3
brlo X2
rjmp L58
X2:
.dbline 256
; {
.dbline 258
; // OUTLED1ON;
; RXERROR=2;
ldi R24,2
sts _RXERROR,R24
.dbline 259
; if(RXBUF[12]==TRFG3 & RXBUF[11]==TRFG2 & RXBUF[1]==TRFG0 & RXBUF[2]==TRFG1)
lds R24,_RXBUF+12
cpi R24,240
brne L66
ldi R22,1
ldi R23,0
rjmp L67
L66:
clr R22
clr R23
L67:
lds R24,_RXBUF+11
cpi R24,241
brne L68
ldi R20,1
ldi R21,0
rjmp L69
L68:
clr R20
clr R21
L69:
lds R24,_RXBUF+1
cpi R24,254
brne L70
ldi R18,1
ldi R19,0
rjmp L71
L70:
clr R18
clr R19
L71:
lds R24,_RXBUF+2
cpi R24,253
brne L72
ldi R16,1
ldi R17,0
rjmp L73
L72:
clr R16
clr R17
L73:
movw R2,R22
and R2,R20
and R3,R21
and R2,R18
and R3,R19
and R2,R16
and R3,R17
tst R2
brne X1
tst R3
breq L59
X1:
.dbline 260
; {
.dbline 261
; RXERROR=3;
ldi R24,3
sts _RXERROR,R24
.dbline 262
; if(RXBUF[3]==SlaveCR)
lds R2,_SlaveCR
lds R3,_RXBUF+3
cp R3,R2
brne L59
.dbline 263
; {
.dbline 264
; RXERROR=0;
clr R2
sts _RXERROR,R2
.dbline 266
;
; } //if(RXBUF[tP+2]==SlaveCR)
.dbline 268
;
; }//if(RXBUF[i]==TRFG3
.dbline 269
; }//if(RXbufP>RXbufPmax)
rjmp L59
L58:
.dbline 271
.dbline 272
ldi R24,1
sts _RXERROR,R24
.dbline 273
L59:
.dbline -2
L57:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbsym r tP 16 c
.dbend
.dbfunc e main _main fV
; i -> R20
.even
_main::
.dbline -1
.dbline 278
; else
; {
; RXERROR=1;
; }//else
; }//void RXRCK(void)
;
;
; void main()
; {
.dbline 279
; unsigned char i=0;
clr R20
.dbline 282
;
; //delayXms(500);
; port_init(); //IO初始化
rcall _port_init
.dbline 283
; uart_init();
rcall _uart_init
.dbline 285
; //timer_init();
; delayXms(10);
ldi R16,10
ldi R17,0
rcall _delayXms
.dbline 286
; SEI();
sei
.dbline 287
; SLSTEP=10;
ldi R24,10
sts _SLSTEP,R24
rjmp L79
L78:
.dbline 290
;
; while(1)
; {
.dbline 292
;
; switch(SLSTEP)
lds R20,_SLSTEP
clr R21
cpi R20,20
ldi R30,0
cpc R21,R30
breq L85
ldi R24,20
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L99
L98:
cpi R20,10
ldi R30,0
cpc R21,R30
breq L84
rjmp L81
L99:
cpi R20,30
ldi R30,0
cpc R21,R30
breq L88
cpi R20,30
ldi R30,0
cpc R21,R30
brge X6
rjmp L81
X6:
L100:
cpi R20,40
ldi R30,0
cpc R21,R30
brne X7
rjmp L82
X7:
rjmp L81
X3:
.dbline 293
; {
L84:
.dbline 295
; case 10:
; RXBUFCLR();
rcall _RXBUFCLR
.dbline 296
; RX_INIT();
rcall _RX_INIT
.dbline 297
; SLSTEP=20;
ldi R24,20
sts _SLSTEP,R24
.dbline 298
; break;
rjmp L82
L85:
.dbline 300
; case 20:
; if(TRADFG==1)
lds R24,_TRADFG
cpi R24,1
breq X8
rjmp L82
X8:
.dbline 301
; {
.dbline 302
; SoftTimerStart();
rcall _SoftTimerStart
.dbline 303
; SLSTEP=30;
ldi R24,30
sts _SLSTEP,R24
.dbline 304
; }//if(ADFG==1)
.dbline 306
;
; break;
rjmp L82
L88:
.dbline 308
; case 30:
; SoftTimer();
rcall _SoftTimer
.dbline 311
;
;
; if((WaitCR1>20) | (RXbufP>RXbufPmax))
ldi R24,20
lds R2,_WaitCR1
cp R24,R2
brsh L91
ldi R24,1
ldi R25,0
movw R10,R24
rjmp L92
L91:
clr R10
clr R11
L92:
lds R2,_RXbufPmax
lds R3,_RXbufP
cp R2,R3
brsh L93
ldi R22,1
ldi R23,0
rjmp L94
L93:
clr R22
clr R23
L94:
movw R2,R10
or R2,R22
or R3,R23
tst R2
brne X4
tst R3
breq L82
X4:
.dbline 312
; {
.dbline 313
; RXRCK2();
rcall _RXRCK2
.dbline 314
; if(RXERROR==0)
lds R2,_RXERROR
tst R2
brne L95
.dbline 315
; {
.dbline 316
; OUTDEON;
sbi 0x12,4
.dbline 317
; TXbufRDY();
rcall _TXbufRDY
.dbline 318
; TXbufP=0;
clr R2
sts _TXbufP,R2
.dbline 319
; TXENABLE
cbi 0xa,4
.dbline 319
sbi 0xa,3
.dbline 320
; UDR=TXBUF[0];
lds R2,_TXBUF
out 0xc,R2
.dbline 321
; SLSTEP=40;
ldi R24,40
sts _SLSTEP,R24
.dbline 322
; OUTLED1ON;
cbi 0x18,0
.dbline 323
; }//if(RXERROR==0)
rjmp L82
L95:
.dbline 325
; else
; {
.dbline 326
; SLSTEP=10;
ldi R24,10
sts _SLSTEP,R24
.dbline 327
; }//else
.dbline 329
;
; }//if((WaitCR1>100) | (RXbufP>RXbufPmax))
.dbline 331
;
; break;
.dbline 333
; case 40:
; break;
L81:
L82:
.dbline 336
L79:
.dbline 289
rjmp L78
X5:
.dbline -2
L77:
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\m8com\M8SP01.c
_RXBUF::
.blkb 30
.dbsym e RXBUF _RXBUF A[30:30]c
_TXBUF::
.blkb 16
.dbsym e TXBUF _TXBUF A[16:16]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -