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

📄 usart.c

📁 //实验板的AVR程序
💻 C
字号:
//******************************************************************************
//                                                                             *
//    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)
 {
   
  	  temprecv=UDR;
	  //while(!(UCSRA&(1<<UDRE)));
	  UDR = temprecv;
	
  }
/************************************************
函 数 名:    DelaymS()
功    能:    毫秒级延时函数
输入参数:     延迟时间/系统晶体
输出参数:    做相应的延迟处理
描    述:    /
***********************************************/
void DelaymS (uint i)            //延时函数,参数i为延时时间
{
    uchar j;                        //双重延时
	for (;i!=0;i--)
	{
	    for (j=30;j!=0;j--);
	}
}
/********************************************************
  子程序名:   usart_Init()
  功    能:   串口初始化
  输入参数:   /
  输出参数:   /
  描    述:   /
********************************************************/
void usart_Init (void)
{
   CLI();    //关闭中断
	 UBRRL= (F_CPU/BAUDRATE/16-1)%256;
     UBRRH= (F_CPU/BAUDRATE/16-1)/256;
	 //UBRRL=51; //波特率寄存器,UART:9600bps,8.000MHz
	 UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);  //接收结束中断使能,RXD&TXD使能
	 UCSRC = (1<<URSEL)|(1<<UPM1)|(1<<UCSZ0)|(1<<UCSZ1);
	  //访问UCSRC寄存器,偶校验,8个数据位,默认一个停止位, 
	  SREG  = 0b10000000;
	   //TIMSK =0X00;
	 //SEI();      //开全局中断使能
}
//*****************主程序**********************************
void main (void)
{
     uchar temp=0xff;
     usart_Init();    //串口初始化
	 while(1)                      //无限循环执行
	 {
         //if (UCSRA & (1<<RXC))              //等待接收完成,
	      //{
	          // temp = UDR;                    //将接收到的数据暂存
			  //while(!(UCSRA&(1<<UDRE)));
		        if(temp!=temprecv)
			   {
			   while(!(UCSRA&(1<<UDRE)));
			   UDR = temprecv;                    //将接收到的数据发送出去
			   }
			   
			   temp=temprecv; 
	 	 // }
	 }
} 

⌨️ 快捷键说明

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