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

📄 usart2.s

📁 AVR单片机串口异步通信,通过电脑串口助手使电脑和单片机运行简单的数据通讯
💻 S
字号:
	.module usart2.c
	.area vector(rom, abs)
	.org 44
	jmp _uart0_rx_isr
	.area text(rom, con, rel)
	.dbfile F:\LX\USART\usart2.c
	.dbfunc e uart0_rx_isr _uart0_rx_isr fV
;            dat -> R20
	.even
_uart0_rx_isr::
	xcall push_lset
	xcall push_gset1
	.dbline -1
	.dbline 12
	.dbline 13
	sbis 0xb,7
	rjmp L2
	.dbline 13
	.dbline 14
	in R20,0xc
	.dbline 15
	mov R16,R20
	xcall _USART_Transmit
	.dbline 16
L2:
	.dbline -2
L1:
	xcall pop_gset1
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbsym r dat 20 c
	.dbend
	.dbfunc e main _main fV
;            rec -> <dead>
	.even
_main::
	.dbline -1
	.dbline 20
; #include<iom16v.h>
; #include <macros.h>
; #define key (PIND&0x04)          //定义按键PD2
; /*****************函数原型声明************************/
; void USART_Init(unsigned int baud);     
; void USART_Transmit(unsigned char dat);
; void delayms(unsigned int t);
; unsigned char USART_Receive(void);
; /******************接收中断函数****************************/
; #pragma interrupt_handler uart0_rx_isr:12
; void uart0_rx_isr(void)
; { unsigned char dat;
;    if(UCSRA&(1<<RXC)){         //把要接收的数据全部接收
;    dat=UDR; 
;    USART_Transmit(dat);
;    }
; }	
; /*****************************************************/
; void main(void)
; { unsigned char rec;
	.dbline 21
;     PORTB=0xff;
	ldi R24,255
	out 0x18,R24
	.dbline 22
;     DDRB=0xff;
	out 0x17,R24
	.dbline 23
;     PORTD=0x07;
	ldi R24,7
	out 0x12,R24
	.dbline 24
; 	DDRD=0x02;
	ldi R24,2
	out 0x11,R24
	.dbline 25
; 	UCSRA=0x00;
	clr R2
	out 0xb,R2
	.dbline 26
;     USART_Init(71);            //波特为9600,外部晶振11.0592
	ldi R16,71
	ldi R17,0
	xcall _USART_Init
	.dbline 27
; 	SEI();
	sei
	xjmp L6
L5:
	.dbline 29
;     while(1)
; 	{ 	
	.dbline 30
; 	   if(key==0)
	sbic 0x10,2
	rjmp L8
	.dbline 31
; 	     {                     //按键按下发送一字节数据
	.dbline 32
; 	     delayms(10);
	ldi R16,10
	ldi R17,0
	xcall _delayms
	.dbline 33
; 		 if(key==0){
	sbic 0x10,2
	rjmp L10
	.dbline 33
L12:
	.dbline 34
L13:
	.dbline 34
; 		 while(!key);
	sbis 0x10,2
	rjmp L12
	.dbline 35
; 		 USART_Transmit(0x22);
	ldi R16,34
	xcall _USART_Transmit
	.dbline 36
; 		           }
L10:
	.dbline 37
; 	     }
L8:
	.dbline 38
L6:
	.dbline 28
	xjmp L5
X0:
	.dbline -2
L4:
	.dbline 0 ; func end
	ret
	.dbsym l rec 1 c
	.dbend
	.dbfunc e USART_Init _USART_Init fV
;           baud -> R16,R17
	.even
_USART_Init::
	.dbline -1
	.dbline 43
;      }		 
; }
; 
; /******************USART初始化***********************/    
; void USART_Init(unsigned int baud)
;  {
	.dbline 44
;   UBRRH=(unsigned char)(baud>>8);
	movw R2,R16
	mov R2,R3
	clr R3
	out 0x20,R2
	.dbline 45
;   UBRRL=(unsigned char)baud;  //设定波特率
	out 0x9,R16
	.dbline 46
;   UCSRB=0x98;                 //使能接收和发送,开接收中断
	ldi R24,152
	out 0xa,R24
	.dbline 47
;   UCSRC=0x8e;                 //设置帧格式8数据位,2停止位
	ldi R24,142
	out 0x20,R24
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbsym r baud 16 i
	.dbend
	.dbfunc e USART_Transmit _USART_Transmit fV
;            dat -> R16
	.even
_USART_Transmit::
	.dbline -1
	.dbline 51
;  }
; /************发送函数****************************/
; void USART_Transmit(unsigned char dat)
;  {
L17:
	.dbline 52
L18:
	.dbline 52
;    while(!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L17
	.dbline 53
;    UDR=dat;
	out 0xc,R16
	.dbline -2
L16:
	.dbline 0 ; func end
	ret
	.dbsym r dat 16 c
	.dbend
	.dbfunc e USART_Receive _USART_Receive fc
	.even
_USART_Receive::
	.dbline -1
	.dbline 57
;  }
; /************接收函数*****************************/
; unsigned char USART_Receive(void)
;  {
L21:
	.dbline 58
L22:
	.dbline 58
;   while(!(UCSRA&(1<<RXC)));
	sbis 0xb,7
	rjmp L21
	.dbline 59
;   return UDR;
	in R16,0xc
	.dbline -2
L20:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delayms _delayms fV
;              i -> R20,R21
;              j -> R22,R23
;              t -> R16,R17
	.even
_delayms::
	xcall push_gset2
	.dbline -1
	.dbline 63
;  }
; /**********延时*********************************/
; void delayms(unsigned int t)
;  {
	.dbline 65
;    unsigned int i,j;
;    for(i=0;i<t;i++)
	clr R20
	clr R21
	xjmp L28
L25:
	.dbline 66
	clr R22
	clr R23
	xjmp L32
L29:
	.dbline 66
L30:
	.dbline 66
	subi R22,255  ; offset = 1
	sbci R23,255
L32:
	.dbline 66
	cpi R22,100
	ldi R30,0
	cpc R23,R30
	brlo L29
L26:
	.dbline 65
	subi R20,255  ; offset = 1
	sbci R21,255
L28:
	.dbline 65
	cp R20,R16
	cpc R21,R17
	brlo L25
	.dbline -2
L24:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r j 22 i
	.dbsym r t 16 i
	.dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -