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

📄 m8mp01.s

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