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

📄 m8sp01.s

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