AVR单片机USART串口通信基本应用

发布者:朱颜素韵最新更新时间:2016-10-22 来源: eefocus关键字:AVR单片机  USART  串口通信 手机看文章 扫描二维码
随时随地手机看文章
/*********************************************

File name            : usart.c

Chip type           : ATmega16

Program type        : Application

Clock frequency     : 11.0592MHz

Memory model        : Small

注意:发送采用查询方式,接收采用中断方式,在初始化程序中,需要将TXD设置成输出方式,RXD设置成输入方式,并使RXD的内部上拉有效

*********************************************/

#include

#include

#define BAUD    9600            //波特率采用9600bps

#define CRYSTAL 11059200        //外部晶振11.0592MHZ

unsigned int data, flag=0;      //标志位

//计算和定义波特率设置参数

#define BAUD_SETTING (unsigned int)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)

#define BAUD_H (unsigned char)(BAUD_SETTING>>8)    //高8位

#define BAUD_L (unsigned char)(BAUD_SETTING)       //低8位

// USART控制和状态寄存器的标志位定义

// UCSRA位定义 复位值(0010 0000)

#define RXC 7    //USART接收完成    

#define TXC 6    //USART发送完成

#define UDRE 5    //USART数据寄存器空(置1会发生数据寄存器空的中断请求)

#define FE   4    //接收帧出错(出错置1)

#define DOR 3    //接收数据溢出出错

#define PE   2    //校验错误

#define U2X 1    //USART传输速率倍速

#define MPCM 0    //多机通信模式允许

// UCSRB位定义 复位值(0000 0000)

#define RXCIE 7    //RX接收完成中断允许

#define TXCIE 6    //TX发送完成中断允许

#define UDRIE 5    //USART数据寄存器空中断允许

#define RXEN 4    //数据接收允许

#define TXEN 3    //数据发送允许

#define UCSZ2 2    //数据字位数大小,与 UCSZ1,UCSZ0同用

#define RXB8 1    //接收数据的第8位

#define TXB8 0    //发送数据的第8位

// UCSRC位定义   复位值(1000 0110)

#define URSEL 7 //寄存器选择      

#define UMSEL 6 //USART工作模式选择(0:异步模式;1:同步模式)

#define UPM1 5 // UPM【1:0】校验方式(00:无校验;01:保留;10:使能偶校验;11:使能奇校验)

#define UPM0 4 //

#define USBS 3 // 停止位选择(0:1位停止位;1:2位停止位)

#define UCSZ1 2 // UCSZ【1:0】传送或接收字符长度,UCSZ[2:0](000:5;001:6;010:7;011:8;100:保留;101:保留;110:保留;111:9)

#define UCSZ0 1 //

#define UCPOL 0 //时钟极性选择(同步模式下使用,异步模式下为0)

#define DATA_REGISTER_EMPTY (1<

interrupt [USART_RXC] void usart_rx_isr(void)   // USART接收中断服务

{

   UCSRB&=~(1<

   data=UDR;       //读取UDR得到接收的数据

   flag=1;      //标志位置1     

   UCSRB|=(1<

}

//发送数据

void USART_Transmit(unsigned char data)

{

    while (!(UCSRA & DATA_REGISTER_EMPTY));     // 等待发送寄存器空                           

    UDR = data;                                 // 发送数据                   

}

void main( void )

{

    PORTD = 0x03;       // TXD(PD1)输出

    DDRD = 0x02;        // RXD(PD0)输入,上拉有效  

    UCSRA = 0x00;       // USART初始化

    UCSRB = (1<

    //UCSRB = 0x98;

    UCSRC = (1<ta, 1 Stop, No Parity

    //UCSRC = 0x86;

    UBRRH = BAUD_H;     // 设置波特率

    UBRRL = BAUD_L;

    #asm("sei")         // 开中断

    while(1)

    {

        if(flag==1) //接收到数据

        {

           USART_Transmit(data); //发送数据

           flag=0;

        }

    }

}

关键字:AVR单片机  USART  串口通信 引用地址:AVR单片机USART串口通信基本应用

上一篇:AVR fuse位详解
下一篇:AVR定时器程序

推荐阅读最新更新时间:2024-03-16 15:16

【STC单片机学习】第十三课:串口通信和RS485
1.13.1.通信有关的常见概念 1.13.1.1、什么是通信 (1)人和人之间的通信:交谈、写信(滞后)、烽火、手势等 (发收双方+媒介) (2)人和计算机之间的通信:按键、鼠标、触摸屏、显示器等 (以后会不会用脑电波来和计算机通信?) (3)计算机和计算机之间的通信?有线、无线 咱们学习的所有的通信,都是计算机和计算机之间的通信:WiFi、Zigbee、SPI、I2C、GSM/GPRS.....,后面讲的通信都是指计算机和计算机的通信! 1.13.1.2、通信的关键 (1)事先约定(通信格式、速率、时间(同步)、编解码方式) (2)基本信息单元(bit位/字节/数据包...):信息是基本信息单元的整数倍 (3)有效信息的编
[单片机]
【STC单片机学习】第十三课:<font color='red'>串口通信</font>和RS485
STM8 固件库编写 使用外部晶振串口通信时,发送是乱码
因为我需要做9600波特率的串口通信,所以外部接的是11.0592MHz的晶振。时钟初始化程序如下: void Clock_init() { CLK_DeInit(); CLK_HSECmd(ENABLE); //启用外部时钟 while(SET!=CLK_GetFlagStatus(CLK_FLAG_HSERDY)); //等待外部时钟启动 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); //1分频 CLK_ClockSwitchCmd(ENABLE); CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,CLK_SOURCE_HSE,
[单片机]
基于AVR单片机的灭火机器人设计与实现
摘要:根据灭火机器人的竞赛规则,给出了灭火机器人的硬件结构设计方案和软件设计流程。所用的机器人处理器为AVR单片机,主要利用红外传感器、光敏传感器对环境进行检测,使机器人在场地中按照预定的方案寻找火源并扑灭。 关键词:灭火机器人;传感器;ATmega32 1 引言 机器人竞赛是近年来迅速开展起来的一种对抗活动,它涉及人工智能、机械、电子、传感器、精密机械等诸多领域。通过竞赛可以培养学生的创新意识、动手能力、团队写作能力等。其中灭火比赛是开展范围最广、影响最大的机器人竞赛项目之一。 比赛规则为模仿生活中消防员灭火,机器人从H点出发,在四个房间内寻找任意摆放的蜡烛,并且设法将其灭掉。比赛场地的墙壁高33cm,材质为木板,颜色为
[工业控制]
基于<font color='red'>AVR单片机</font>的灭火机器人设计与实现
LCD12864子程序
/********************************************************************* 目 的: 建立LCD12864操作库 目标系统: 基于AVR单片机 应用软件: ICCAVR 版 本: Version 1.0 *********************************************************************/ /*0101010101010101
[单片机]
AVR单片机对外部RAM的扩展
我采用的是GCC编译器,并且在项目中采用C++来编写程序,根据理论上来讲,只要外部存储器使能了并且配置完成,那么变量的地址分配完全可以交给编译器来做,但是前提是存储器使能及配置代码要在上电复位后最先得到执行,而采用C或者C++来编写程序,上电复位之后最先得到执行的代码是由编译器自动增加的启动代码以及构造函数代码。我不清楚如何让存储器使能及配置代码在上电复位后最先得到执行,所以就写了下面一段宏来控制外部存储器的访问。 代码如下: //ex te rn_ ram .h #ifndef _H_EXTERN_RAM_H_ #define _H_EXTERN_RAM_H_ #include “type.h” #define DEF_E
[单片机]
<font color='red'>AVR单片机</font>对外部RAM的扩展
查询法串口通信程序
这是一个简单的用查询发的串口通信程序,能吧串口收到的数据马上回发过去。希望读初学者有用. #include reg52.h #define uint unsigned int #define uchar unsigned char void init() { TMOD=0x20;//定时器1方式2作为波特率发生器 TH1=0XF3; //装初值 波特率为4800bps的初值 TL1=0XF3; TR1=1; //启动定时器1 SCON=0X50; //设置串口工作方式为方式1 PCON=0X80; //加倍波特率后为4800 TI=0;//清发送中断标志位 RI=0;//清接收中断标志位 } void main() { u
[单片机]
16.串口通信
计算机通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。 通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。 并行通信:将数据字节的各位用多条数据线同时进行传送。(采用了8根数据线) 控制简单,传输速度快,但由于传输线较长,长距离传送成本高且接收方的各位同时接受存在困难。 串行通信:将数据字节分成一位一位的形式在一条传输线上逐个的传送。(只需要一根线) 传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据传送控制较复杂(需要移位)。 串行通信: 异步通信: 通信的发送与接收设备使用各自的时钟控制,为使收发一致,
[单片机]
16.<font color='red'>串口通信</font>
STM32串口通信过程详解
按照数据传送方向分类: 单工:数据传输只支持数据在一个方向上传输; 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口; 全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端。 分别如下图中的a、b、c所示: 按照通信方式分类: 同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口; 异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线; 在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数
[单片机]
STM32<font color='red'>串口通信</font>过程详解
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved