⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m8s01.lst

📁 AVR MEGA8双机串行口通讯程序,单工485方式,用于单片机组网,有PROTEUS仿真电路,可以立刻验证
💻 LST
📖 第 1 页 / 共 2 页
字号:
(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 + -