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

📄 usart.s

📁 //实验板的AVR程序
💻 S
字号:
	.module usart.c
	.area data(ram, con, rel)
_temprecv::
	.blkb 1
	.area idata
	.byte 240
	.area data(ram, con, rel)
	.dbfile E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
	.dbsym e temprecv _temprecv c
	.area vector(rom, abs)
	.org 22
	rjmp _uart0_rx_isr
	.area data(ram, con, rel)
	.dbfile E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
	.area text(rom, con, rel)
	.dbfile E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
	.dbfunc e uart0_rx_isr _uart0_rx_isr fV
	.even
_uart0_rx_isr::
	st -y,R2
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 33
; //******************************************************************************
; //                                                                             *
; //    FileName   : 实验板uart.c         ICCAVR V6.31A编译                      *
; //    Function   : uart应用练习 ,回送PC发送的数据,从而双向通讯。              *
; //    Date       : 2006-05-07                                                  *
; //    Version    : 1.0                                                         *
; //                                                                             *
; //    Author     : 开关电源              hongtusy@163.com                      *
; //    Company    : 电子信息技术咨询网    http://www.itsn.cn                    *
; //                                                                             *
; //***************************描述与记事*****************************************
; //实验板的AVR程序,uart应用,和计算机通讯,回送PC发送的数据
; //接线定义:PD0-RXD PD1-TXD 开关位置:SW6-7/8打开。
; //使用串口调试器,使用十六进制方式,首先让PC发送一个字符给MCU,然后将接收到MCU返回的值。
; //记事:本程序旨在对uart的理解与演示,程序适合初学者使用.
; //使用片外8MHz晶体,9600bps波特率
; //******************************************************************************
; 
; #include <iom16v.h>             //头文件,ATmega8535单片机的寄存器定义
; #include <macros.h>               //包含有SEI()、CLI()、NOP()、WDR()、等宏定义.
; 
; typedef unsigned char uchar;      //数据类型说明,无符号整型,两字节大小。
; typedef unsigned int uint;        //数据类型说明,无符号字符型,单字节大小。
; 
; #define BAUDRATE        9600	 //波特率
; #define F_CPU			8000000  //系统晶体频率
; uchar temprecv=0xf0,tempsend;
; /*========*/
;  
; #pragma interrupt_handler uart0_rx_isr: 12 
;  
;  void uart0_rx_isr(void)
;  {
	.dbline 35
;    
;   	  temprecv=UDR;
	in R2,0xc
	sts _temprecv,R2
	.dbline 37
; 	  //while(!(UCSRA&(1<<UDRE)));
; 	  UDR = temprecv;
	out 0xc,R2
	.dbline -2
L1:
	ld R2,y+
	out 0x3f,R2
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e DelaymS _DelaymS fV
;              j -> R20
;              i -> R16,R17
	.even
_DelaymS::
	rcall push_gset1
	.dbline -1
	.dbline 48
; 	
;   }
; /************************************************
; 函 数 名:    DelaymS()
; 功    能:    毫秒级延时函数
; 输入参数:     延迟时间/系统晶体
; 输出参数:    做相应的延迟处理
; 描    述:    /
; ***********************************************/
; void DelaymS (uint i)            //延时函数,参数i为延时时间
; {
	.dbline 50
;     uchar j;                        //双重延时
; 	for (;i!=0;i--)
	rjmp L6
L3:
	.dbline 51
; 	{
	.dbline 52
	ldi R20,30
	rjmp L10
L7:
	.dbline 52
L8:
	.dbline 52
	dec R20
L10:
	.dbline 52
	tst R20
	brne L7
	.dbline 53
L4:
	.dbline 50
	subi R16,1
	sbci R17,0
L6:
	.dbline 50
	cpi R16,0
	cpc R16,R17
	brne L3
X0:
	.dbline -2
L2:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r i 16 i
	.dbend
	.dbfunc e usart_Init _usart_Init fV
	.even
_usart_Init::
	.dbline -1
	.dbline 63
; 	    for (j=30;j!=0;j--);
; 	}
; }
; /********************************************************
;   子程序名:   usart_Init()
;   功    能:   串口初始化
;   输入参数:   /
;   输出参数:   /
;   描    述:   /
; ********************************************************/
; void usart_Init (void)
; {
	.dbline 64
;    CLI();    //关闭中断
	cli
	.dbline 65
; 	 UBRRL= (F_CPU/BAUDRATE/16-1)%256;
	ldi R24,51
	out 0x9,R24
	.dbline 66
;      UBRRH= (F_CPU/BAUDRATE/16-1)/256;
	clr R2
	out 0x20,R2
	.dbline 68
; 	 //UBRRL=51; //波特率寄存器,UART:9600bps,8.000MHz
; 	 UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);  //接收结束中断使能,RXD&TXD使能
	ldi R24,152
	out 0xa,R24
	.dbline 69
; 	 UCSRC = (1<<URSEL)|(1<<UPM1)|(1<<UCSZ0)|(1<<UCSZ1);
	ldi R24,166
	out 0x20,R24
	.dbline 71
; 	  //访问UCSRC寄存器,偶校验,8个数据位,默认一个停止位, 
; 	  SREG  = 0b10000000;
	ldi R24,128
	out 0x3f,R24
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;           temp -> R20
	.even
_main::
	.dbline -1
	.dbline 77
; 	   //TIMSK =0X00;
; 	 //SEI();      //开全局中断使能
; }
; //*****************主程序**********************************
; void main (void)
; {
	.dbline 78
;      uchar temp=0xff;
	ldi R20,255
	.dbline 79
;      usart_Init();    //串口初始化
	rcall _usart_Init
	rjmp L14
L13:
	.dbline 81
; 	 while(1)                      //无限循环执行
; 	 {
	.dbline 86
;          //if (UCSRA & (1<<RXC))              //等待接收完成,
; 	      //{
; 	          // temp = UDR;                    //将接收到的数据暂存
; 			  //while(!(UCSRA&(1<<UDRE)));
; 		        if(temp!=temprecv)
	lds R2,_temprecv
	cp R20,R2
	breq L16
	.dbline 87
; 			   {
L18:
	.dbline 88
L19:
	.dbline 88
; 			   while(!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L18
	.dbline 89
; 			   UDR = temprecv;                    //将接收到的数据发送出去
	lds R2,_temprecv
	out 0xc,R2
	.dbline 90
; 			   }
L16:
	.dbline 92
	lds R20,_temprecv
	.dbline 94
L14:
	.dbline 80
	rjmp L13
X1:
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\AVR开~1\例程\实验15_串口通讯回送数据\usart.c
_tempsend::
	.blkb 1
	.dbsym e tempsend _tempsend c

⌨️ 快捷键说明

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