📄 m8mp01.s
字号:
; }//void uart1_tx_isr(void)
;
; #pragma interrupt_handler uart1_rx_isr:12
; void uart1_rx_isr(void)
; {
.dbline 180
; unsigned char TmpD=0;
clr R16
.dbline 181
; TmpD=UDR;
in R16,0xc
.dbline 182
; if(RXbufP<RXINTMAX)
lds R2,_RXINTMAX
lds R3,_RXbufP
cp R3,R2
brsh L25
.dbline 183
; {
.dbline 184
; RXbufP++;
mov R24,R3
subi R24,255 ; addi 1
sts _RXbufP,R24
.dbline 185
; }
L25:
.dbline 186
; RXBUF[RXbufP]=UDR;
ldi R24,<_RXBUF
ldi R25,>_RXBUF
lds R30,_RXbufP
clr R31
add R30,R24
adc R31,R25
in R2,0xc
std z+0,R2
.dbline 187
; OUTLED2Pulse;
ldi R24,2
in R2,0x18
eor R2,R24
out 0x18,R2
.dbline -2
L24:
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 191
;
; }//void uart1_rx_isr(void)
; void TXbufRDY(void)
; {
.dbline 192
; TXBUF[0]=SlaveCR;
lds R2,_SlaveCR
sts _TXBUF,R2
.dbline 193
; TXBUF[1]=SlaveCR;
sts _TXBUF+1,R2
.dbline 194
; TXBUF[2]=TRFG0;
ldi R24,254
sts _TXBUF+2,R24
.dbline 195
; TXBUF[3]=TRFG1;
ldi R24,253
sts _TXBUF+3,R24
.dbline 196
; TXBUF[4]=SlaveCR;
sts _TXBUF+4,R2
.dbline 197
; TXBUF[5]=0xFF;
ldi R24,255
sts _TXBUF+5,R24
.dbline 198
; TXBUF[12]=TRFG2;
ldi R24,241
sts _TXBUF+12,R24
.dbline 199
; TXBUF[13]=TRFG3;
ldi R24,240
sts _TXBUF+13,R24
.dbline -2
L27:
.dbline 0 ; func end
ret
.dbend
.dbfunc e RXBUFCLR _RXBUFCLR fV
; i -> R16
.even
_RXBUFCLR::
.dbline -1
.dbline 203
; }//void TXbufRDY(void)
;
; void RXBUFCLR(void)
; {
.dbline 204
; unsigned char i=0;
clr R16
.dbline 205
; for(i=0;i<RXINTMAX;i++)
rjmp L39
L36:
.dbline 206
ldi R24,<_RXBUF
ldi R25,>_RXBUF
mov R30,R16
clr R31
add R30,R24
adc R31,R25
clr R2
std z+0,R2
L37:
.dbline 205
inc R16
L39:
.dbline 205
lds R2,_RXINTMAX
cp R16,R2
brlo L36
.dbline -2
L35:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e RXRCK _RXRCK fV
.even
_RXRCK::
rcall push_gset2
.dbline -1
.dbline 210
; RXBUF[i]=0;
; }//void RXBUFCLR(void)
;
; void RXRCK(void) //检查收到的数据是否有效
; {
.dbline 211
; if(RXbufP>RXbufPmax)
lds R2,_RXbufPmax
lds R3,_RXbufP
cp R2,R3
brsh L41
.dbline 212
; {
.dbline 214
;
; RXERROR=2;
ldi R24,2
sts _RXERROR,R24
.dbline 215
; 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 216
; {
.dbline 218
;
; RXERROR=0;
clr R2
sts _RXERROR,R2
.dbline 219
; }
.dbline 221
;
; }//if(RXbufP>RXbufPmax)
rjmp L42
L41:
.dbline 223
; else
; {
.dbline 224
; RXERROR=1;
ldi R24,1
sts _RXERROR,R24
.dbline 225
; }//else
L42:
.dbline 226
; if(RXERROR==0)
lds R2,_RXERROR
tst R2
brne L57
.dbline 227
; {
.dbline 228
; OUTLED4ON;
cbi 0x18,3
.dbline 229
; }
rjmp L58
L57:
.dbline 231
.dbline 232
sbi 0x18,3
.dbline 233
L58:
.dbline -2
L40:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbend
.area data(ram, con, rel)
.dbfile E:\m8com\M8MP01.c
_SLSTEP::
.blkb 1
.area idata
.byte 10
.area data(ram, con, rel)
.dbfile E:\m8com\M8MP01.c
.dbsym e SLSTEP _SLSTEP c
.area text(rom, con, rel)
.dbfile E:\m8com\M8MP01.c
.dbfunc e main _main fV
; i -> R20
.even
_main::
.dbline -1
.dbline 238
; else
; {
; OUTLED4OFF;
; }
; }//void RXRCK(void)
;
; unsigned char SLSTEP=10;
; void main()
; {
.dbline 239
; unsigned char i=0;
clr R20
.dbline 242
;
; //delayXms(500);
; port_init(); //IO初始化
rcall _port_init
.dbline 243
; uart_init();
rcall _uart_init
.dbline 245
; //timer_init();
; delayXms(10);
ldi R16,10
ldi R17,0
rcall _delayXms
.dbline 246
; SEI();
sei
.dbline 247
; SLSTEP=10;
ldi R24,10
sts _SLSTEP,R24
.dbline 248
; for(i=0;i<17;i++)
rjmp L63
L60:
.dbline 249
.dbline 250
ldi R24,<_SlaveEN
ldi R25,>_SlaveEN
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldi R24,255
std z+0,R24
.dbline 251
L61:
.dbline 248
inc R20
L63:
.dbline 248
cpi R20,17
brlo L60
.dbline 252
; {
; SlaveEN[i]=0xff;
; }//for
; SlaveCR=5;
ldi R24,5
sts _SlaveCR,R24
rjmp L65
L64:
.dbline 254
; while(1)
; {
.dbline 256
;
; switch(SLSTEP)
lds R22,_SLSTEP
clr R23
cpi R22,20
ldi R30,0
cpc R23,R30
brne X4
rjmp L73
X4:
ldi R24,20
ldi R25,0
cp R24,R22
cpc R25,R23
brlt L84
L83:
cpi R22,10
ldi R30,0
cpc R23,R30
breq L70
rjmp L67
L84:
cpi R22,30
ldi R30,0
cpc R23,R30
brne X5
rjmp L80
X5:
rjmp L67
X1:
.dbline 257
; {
L70:
.dbline 260
; case 10:
;
; if(SlaveEN[SlaveCR]>0)
ldi R24,<_SlaveEN
ldi R25,>_SlaveEN
lds R30,_SlaveCR
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
cp R3,R2
brlo X6
rjmp L68
X6:
.dbline 261
; {
.dbline 263
;
; TXbufRDY();
rcall _TXbufRDY
.dbline 264
; TXINTMAX=14;
ldi R24,14
sts _TXINTMAX,R24
.dbline 265
; RXINTMAX=16;
ldi R24,16
sts _RXINTMAX,R24
.dbline 266
; RXbufP=0;
clr R2
sts _RXbufP,R2
.dbline 267
; RXBUFCLR();
rcall _RXBUFCLR
.dbline 268
; OUTDEON;
sbi 0x12,4
.dbline 269
; TXENABLE;
cbi 0xa,4
.dbline 269
sbi 0xa,3
.dbline 269
.dbline 270
; TXADDRESS
sbi 0xa,0
.dbline 270
clr R2
sts _TXADFG,R2
.dbline 271
; TXbufP=0; //
sts _TXbufP,R2
.dbline 273
; //TXBUF[0]=SlaveCR;
; UDR=TXBUF[0];
lds R2,_TXBUF
out 0xc,R2
.dbline 274
; SLSTEP=20;
ldi R24,20
sts _SLSTEP,R24
.dbline 275
; SoftTimerStart();
rcall _SoftTimerStart
.dbline 276
; } // if(SlaveEN[SlaveCR]==1)
.dbline 277
; break;
rjmp L68
L73:
.dbline 280
; case 20:
;
; SoftTimer();
rcall _SoftTimer
.dbline 281
; if(WaitCR1>1 | (RXbufP>RXbufPmax))
ldi R24,1
lds R2,_WaitCR1
cp R24,R2
brsh L76
clr R25
movw R12,R24
rjmp L77
L76:
clr R12
clr R13
L77:
lds R2,_RXbufPmax
lds R3,_RXbufP
cp R2,R3
brsh L78
ldi R24,1
ldi R25,0
movw R10,R24
rjmp L79
L78:
clr R10
clr R11
L79:
movw R2,R12
or R2,R10
or R3,R11
tst R2
brne X2
tst R3
breq L68
X2:
.dbline 282
; {
.dbline 283
; RXRCK();
rcall _RXRCK
.dbline 284
; SLSTEP=30;
ldi R24,30
sts _SLSTEP,R24
.dbline 285
; RXERROR=0;
clr R2
sts _RXERROR,R2
.dbline 286
; }
.dbline 287
; break;
rjmp L68
L80:
.dbline 290
; case 30:
;
; SlaveCR++;
lds R24,_SlaveCR
subi R24,255 ; addi 1
sts _SlaveCR,R24
.dbline 291
; if(SlaveCR>SlaveBMAX)
ldi R24,15
lds R2,_SlaveCR
cp R24,R2
brsh L81
.dbline 292
; SlaveCR=5;
ldi R24,5
sts _SlaveCR,R24
L81:
.dbline 294
; // delayXms(1);
; SLSTEP=10;
ldi R24,10
sts _SLSTEP,R24
.dbline 295
; break;
L67:
L68:
.dbline 298
L65:
.dbline 253
rjmp L64
X3:
.dbline -2
L59:
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\m8com\M8MP01.c
_RXBUF::
.blkb 30
.dbsym e RXBUF _RXBUF A[30:30]c
_TXBUF::
.blkb 16
.dbsym e TXBUF _TXBUF A[16:16]c
_SlaveEN::
.blkb 17
.dbsym e SlaveEN _SlaveEN A[17:17]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -