📄 m8s01.lst
字号:
(0208) TXBUF[2]=SlaveAdress;
00F4 E085 LDI R24,5
00F5 9380008F STS _TXBUF+2,R24
(0209) TXBUF[10]=TRFG2;
00F7 EF81 LDI R24,0xF1
00F8 93800097 STS 0x97,R24
(0210) TXBUF[11]=TRFG3;
00FA EF80 LDI R24,0xF0
00FB 93800098 STS 0x98,R24
00FD 9508 RET
(0211) }//void TXbufRDY(void)
(0212) void RXBUFCLR(void)
(0213) {
(0214) unsigned char i=0;
_RXBUFCLR:
i --> R16
00FE 2700 CLR R16
(0215) for(i=0;i<RXINTMAX;i++)
00FF C009 RJMP 0x0109
(0216) RXBUF[i]=0;
0100 E68F LDI R24,0x6F
0101 E090 LDI R25,0
0102 2FE0 MOV R30,R16
0103 27FF CLR R31
0104 0FE8 ADD R30,R24
0105 1FF9 ADC R31,R25
0106 2422 CLR R2
0107 8220 STD Z+0,R2
0108 9503 INC R16
0109 90200065 LDS R2,0x65
010B 1502 CP R16,R2
010C F398 BCS 0x0100
010D 9508 RET
(0217) }//void RXBUFCLR(void)
(0218)
(0219) void RX_INIT(void)
(0220) {
(0221) OUTDEOFF;
_RX_INIT:
010E 9894 CBI 0x12,4
(0222) RXbufP=0;
010F 2422 CLR R2
0110 92200069 STS 0x69,R2
(0223) RDHIS=0xff;
0112 EF8F LDI R24,0xFF
0113 93800061 STS 0x61,R24
(0224) RXADDRESS
0115 9A58 SBI 0x0B,0
0116 92200060 STS 0x60,R2
(0225)
(0226) RXENABLE
0118 9853 CBI 0x0A,3
0119 9A54 SBI 0x0A,4
011A 9508 RET
_RXRCK2:
011B D119 RCALL push_gset2
(0227) }//void RX_INIT(void)
(0228)
(0229) void RXRCK2(void) //检查收到的数据是否有效
(0230) {
(0231)
(0232) if(RXbufP>RXbufPmax)
011C 9020006A LDS R2,0x6A
011E 90300069 LDS R3,0x69
0120 1423 CP R2,R3
0121 F5B0 BCC 0x0158
(0233) {
(0234)
(0235) RXERROR=2;
0122 E082 LDI R24,2
0123 9380006B STS 0x6B,R24
(0236) if(RXBUF[12]==TRFG3 & RXBUF[11]==TRFG2 & RXBUF[1]==TRFG0 & RXBUF[2]==TRFG1)
0125 9180007B LDS R24,0x7B
0127 3F80 CPI R24,0xF0
0128 F419 BNE 0x012C
0129 E061 LDI R22,1
012A E070 LDI R23,0
012B C002 RJMP 0x012E
012C 2766 CLR R22
012D 2777 CLR R23
012E 9180007A LDS R24,0x7A
0130 3F81 CPI R24,0xF1
0131 F419 BNE 0x0135
0132 E041 LDI R20,1
0133 E050 LDI R21,0
0134 C002 RJMP 0x0137
0135 2744 CLR R20
0136 2755 CLR R21
0137 91800070 LDS R24,_RXBUF+1
0139 3F8E CPI R24,0xFE
013A F419 BNE 0x013E
013B E021 LDI R18,1
013C E030 LDI R19,0
013D C002 RJMP 0x0140
013E 2722 CLR R18
013F 2733 CLR R19
0140 91800071 LDS R24,_RXBUF+2
0142 3F8D CPI R24,0xFD
0143 F419 BNE 0x0147
0144 E001 LDI R16,1
0145 E010 LDI R17,0
0146 C002 RJMP 0x0149
0147 2700 CLR R16
0148 2711 CLR R17
0149 011B MOVW R2,R22
014A 2224 AND R2,R20
014B 2235 AND R3,R21
014C 2222 AND R2,R18
014D 2233 AND R3,R19
014E 2220 AND R2,R16
014F 2231 AND R3,R17
0150 2022 TST R2
0151 F411 BNE 0x0154
0152 2033 TST R3
0153 F039 BEQ 0x015B
(0237) {
(0238)
(0239) RXERROR=0;
0154 2422 CLR R2
0155 9220006B STS 0x6B,R2
(0240) }
(0241)
(0242) }//if(RXbufP>RXbufPmax)
0157 C003 RJMP 0x015B
(0243) else
(0244) {
(0245) RXERROR=1;
0158 E081 LDI R24,1
0159 9380006B STS 0x6B,R24
(0246) }//else
015B D0C0 RCALL pop_gset2
015C 9508 RET
_RXRCK:
i --> R16
tP --> R16
015D D0D7 RCALL push_gset2
(0247)
(0248) // OUTLED1ON;
(0249) }//void RXRCK(void)
(0250)
(0251) void RXRCK(void) //检查收到的数据是否有效
(0252) {
(0253) unsigned char tP=0;
015E 2700 CLR R16
(0254) unsigned char i=0;
(0255) if(RXbufP>RXbufPmax)
015F 9020006A LDS R2,0x6A
0161 90300069 LDS R3,0x69
0163 1423 CP R2,R3
0164 F008 BCS 0x0166
0165 C03F RJMP 0x01A5
(0256) {
(0257) // OUTLED1ON;
(0258) RXERROR=2;
0166 E082 LDI R24,2
0167 9380006B STS 0x6B,R24
(0259) if(RXBUF[12]==TRFG3 & RXBUF[11]==TRFG2 & RXBUF[1]==TRFG0 & RXBUF[2]==TRFG1)
0169 9180007B LDS R24,0x7B
016B 3F80 CPI R24,0xF0
016C F419 BNE 0x0170
016D E061 LDI R22,1
016E E070 LDI R23,0
016F C002 RJMP 0x0172
0170 2766 CLR R22
0171 2777 CLR R23
0172 9180007A LDS R24,0x7A
0174 3F81 CPI R24,0xF1
0175 F419 BNE 0x0179
0176 E041 LDI R20,1
0177 E050 LDI R21,0
0178 C002 RJMP 0x017B
0179 2744 CLR R20
017A 2755 CLR R21
017B 91800070 LDS R24,_RXBUF+1
017D 3F8E CPI R24,0xFE
017E F419 BNE 0x0182
017F E021 LDI R18,1
0180 E030 LDI R19,0
0181 C002 RJMP 0x0184
0182 2722 CLR R18
0183 2733 CLR R19
0184 91800071 LDS R24,_RXBUF+2
0186 3F8D CPI R24,0xFD
0187 F419 BNE 0x018B
0188 E001 LDI R16,1
0189 E010 LDI R17,0
018A C002 RJMP 0x018D
018B 2700 CLR R16
018C 2711 CLR R17
018D 011B MOVW R2,R22
018E 2224 AND R2,R20
018F 2235 AND R3,R21
0190 2222 AND R2,R18
0191 2233 AND R3,R19
0192 2220 AND R2,R16
0193 2231 AND R3,R17
0194 2022 TST R2
0195 F411 BNE 0x0198
0196 2033 TST R3
0197 F081 BEQ 0x01A8
(0260) {
(0261) RXERROR=3;
0198 E083 LDI R24,3
0199 9380006B STS 0x6B,R24
(0262) if(RXBUF[3]==SlaveCR)
019B 90200062 LDS R2,0x62
019D 90300072 LDS R3,_RXBUF+3
019F 1432 CP R3,R2
01A0 F439 BNE 0x01A8
(0263) {
(0264) RXERROR=0;
01A1 2422 CLR R2
01A2 9220006B STS 0x6B,R2
(0265)
(0266) } //if(RXBUF[tP+2]==SlaveCR)
(0267)
(0268) }//if(RXBUF[i]==TRFG3
(0269) }//if(RXbufP>RXbufPmax)
01A4 C003 RJMP 0x01A8
(0270) else
(0271) {
(0272) RXERROR=1;
01A5 E081 LDI R24,1
01A6 9380006B STS 0x6B,R24
(0273) }//else
01A8 D073 RCALL pop_gset2
01A9 9508 RET
(0274) }//void RXRCK(void)
(0275)
(0276)
(0277) void main()
(0278) {
(0279) unsigned char i=0;
_main:
i --> R20
01AA 2744 CLR R20
(0280)
(0281) //delayXms(500);
(0282) port_init(); //IO初始化
01AB DEC3 RCALL _port_init
(0283) uart_init();
01AC DED2 RCALL _uart_init
(0284) //timer_init();
(0285) delayXms(10);
01AD E00A LDI R16,0xA
01AE E010 LDI R17,0
01AF DEB2 RCALL _delayXms
(0286) SEI();
01B0 9478 BSET 7
(0287) SLSTEP=10;
01B1 E08A LDI R24,0xA
01B2 9380006E STS 0x6E,R24
01B4 C065 RJMP 0x021A
(0288)
(0289) while(1)
(0290) {
(0291)
(0292) switch(SLSTEP)
01B5 9140006E LDS R20,0x6E
01B7 2755 CLR R21
01B8 3144 CPI R20,0x14
01B9 E0E0 LDI R30,0
01BA 075E CPC R21,R30
01BB F0F9 BEQ 0x01DB
01BC E184 LDI R24,0x14
01BD E090 LDI R25,0
01BE 1784 CP R24,R20
01BF 0795 CPC R25,R21
01C0 F02C BLT 0x01C6
01C1 304A CPI R20,0xA
01C2 E0E0 LDI R30,0
01C3 075E CPC R21,R30
01C4 F081 BEQ 0x01D5
01C5 C054 RJMP 0x021A
01C6 314E CPI R20,0x1E
01C7 E0E0 LDI R30,0
01C8 075E CPC R21,R30
01C9 F0D9 BEQ 0x01E5
01CA 314E CPI R20,0x1E
01CB E0E0 LDI R30,0
01CC 075E CPC R21,R30
01CD F40C BGE 0x01CF
01CE C04B RJMP 0x021A
01CF 3248 CPI R20,0x28
01D0 E0E0 LDI R30,0
01D1 075E CPC R21,R30
01D2 F409 BNE 0x01D4
01D3 C046 RJMP 0x021A
01D4 C045 RJMP 0x021A
(0293) {
(0294) case 10:
(0295) RXBUFCLR();
01D5 DF28 RCALL _RXBUFCLR
(0296) RX_INIT();
01D6 DF37 RCALL _RX_INIT
(0297) SLSTEP=20;
01D7 E184 LDI R24,0x14
01D8 9380006E STS 0x6E,R24
(0298) break;
01DA C03F RJMP 0x021A
(0299) case 20:
(0300) if(TRADFG==1)
01DB 91800060 LDS R24,0x60
01DD 3081 CPI R24,1
01DE F009 BEQ 0x01E0
01DF C03A RJMP 0x021A
(0301) {
(0302) SoftTimerStart();
01E0 DE6D RCALL _SoftTimerStart
(0303) SLSTEP=30;
01E1 E18E LDI R24,0x1E
01E2 9380006E STS 0x6E,R24
(0304) }//if(ADFG==1)
(0305)
(0306) break;
01E4 C035 RJMP 0x021A
(0307) case 30:
(0308) SoftTimer();
01E5 DE55 RCALL _SoftTimer
(0309)
(0310)
(0311) if((WaitCR1>20) | (RXbufP>RXbufPmax))
01E6 E184 LDI R24,0x14
01E7 9020006D LDS R2,0x6D
01E9 1582 CP R24,R2
01EA F420 BCC 0x01EF
01EB E081 LDI R24,1
01EC E090 LDI R25,0
01ED 015C MOVW R10,R24
01EE C002 RJMP 0x01F1
01EF 24AA CLR R10
01F0 24BB CLR R11
01F1 9020006A LDS R2,0x6A
01F3 90300069 LDS R3,0x69
01F5 1423 CP R2,R3
01F6 F418 BCC 0x01FA
01F7 E061 LDI R22,1
01F8 E070 LDI R23,0
01F9 C002 RJMP 0x01FC
01FA 2766 CLR R22
01FB 2777 CLR R23
01FC 0115 MOVW R2,R10
01FD 2A26 OR R2,R22
01FE 2A37 OR R3,R23
01FF 2022 TST R2
0200 F411 BNE 0x0203
0201 2033 TST R3
0202 F0B9 BEQ 0x021A
(0312) {
(0313) RXRCK2();
0203 DF17 RCALL _RXRCK2
(0314) if(RXERROR==0)
0204 9020006B LDS R2,0x6B
0206 2022 TST R2
0207 F479 BNE 0x0217
(0315) {
(0316) OUTDEON;
0208 9A94 SBI 0x12,4
(0317) TXbufRDY();
0209 DEE4 RCALL _TXbufRDY
(0318) TXbufP=0;
020A 2422 CLR R2
020B 92200068 STS 0x68,R2
(0319) TXENABLE
020D 9854 CBI 0x0A,4
020E 9A53 SBI 0x0A,3
(0320) UDR=TXBUF[0];
020F 9020008D LDS R2,_TXBUF
0211 B82C OUT 0x0C,R2
(0321) SLSTEP=40;
0212 E288 LDI R24,0x28
0213 9380006E STS 0x6E,R24
(0322) OUTLED1ON;
0215 98C0 CBI 0x18,0
(0323) }//if(RXERROR==0)
0216 C003 RJMP 0x021A
(0324) else
(0325) {
(0326) SLSTEP=10;
FILE: <library>
0217 E08A LDI R24,0xA
0218 9380006E STS 0x6E,R24
021A CF9A RJMP 0x01B5
021B 9508 RET
pop_gset2:
021C E0E2 LDI R30,2
021D C004 RJMP pop
push_gset1:
021E 935A ST R21,-Y
021F 934A ST R20,-Y
0220 9508 RET
pop_gset1:
0221 E0E1 LDI R30,1
pop:
0222 9149 LD R20,Y+
0223 9159 LD R21,Y+
0224 FDE0 SBRC R30,0
0225 9508 RET
0226 9169 LD R22,Y+
0227 9179 LD R23,Y+
0228 FDE1 SBRC R30,1
0229 9508 RET
022A 90A9 LD R10,Y+
022B 90B9 LD R11,Y+
022C FDE2 SBRC R30,2
022D 9508 RET
022E 90C9 LD R12,Y+
022F 90D9 LD R13,Y+
0230 FDE3 SBRC R30,3
0231 9508 RET
0232 90E9 LD R14,Y+
0233 90F9 LD R15,Y+
0234 9508 RET
push_gset2:
0235 937A ST R23,-Y
0236 936A ST R22,-Y
0237 CFE6 RJMP push_gset1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -