ATmage16A UART实验往PC收发数据

2019-10-16来源: eefocus关键字:ATmage16A  UART  收发数据

* 【编译环境】: ICCAVR  

* 【函数功能】: 用软件查询方式实现用串口调试软件发数据给avr,而avr则将数据回传给pc.

* 【晶    振】:  8M                

* 【芯    片】:  ATMEGA16A         


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


#include

#include


/***********宏定义*************/

#define  uchar unsigned char 

#define  uint unsigned int

#define fosc 8000000

#define baud 9600

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

函数名称: IO口初始化函数

功    能: 实现IO初始化

参    数: 无

返 回 值: 无

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

void port_init(void)

{

  DDRD = 0x02;

  PORTD = 0xFF;


}


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

函数名称: 串口初始化函数

功    能: 实现串口初始化

参    数: 无

返 回 值: 无

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

void USART_Init(void)

{

UCSRB=(1<

UBRRL=(fosc/16/(baud+1))%256;//设置波特率寄存器

UBRRH=(fosc/16/(baud+1))/256;

UCSRC=(1<

}


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

函数名称: 串口发送一个字节函数

功    能: 实现串口发送一个字节

参    数: data--串口要发送的一个字节

返 回 值: 无

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

void USART_Transmit(uchar data) //发送采用查询方式

{

  while(!(UCSRA&(1<

UDR=data;                       //发送数据


}


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

函数名称: 串口发送数组函数

功    能: 实现串口发送一个数组

参    数: *ptr--串口要发送的数组的首地址

返 回 值: 无

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

void USART_Transmit_string(uchar *ptr)

{

while (*ptr)

  {

    USART_Transmit(*ptr++);

  }

USART_Transmit(0x0D);

USART_Transmit(0x0A);  //结尾发送回车换行

}


/*数据接收,查询方式*/

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

函数名称: 串口接收一个字节函数

功    能: 实现串口接收一个字节

参    数: 无

返 回 值: 无

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

uchar USART_Receive(void) //接收采用查询方式

{

  while(!(UCSRA&(1<

  return UDR;                                      //获取并返回数据

}



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

函数名称: 主函数

功    能: 实现函数主体功能。

参    数: 无

返 回 值: 无

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

void main(void)

{

  uchar temp;

  USART_Init();


  while(1)

    {

          temp=USART_Receive();                //等待接收数据

          PORTB = ~temp;                        //显示低电平有效

          USART_Transmit(temp);                //发送收到的数据

        }

}


关键字:ATmage16A  UART  收发数据 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477294.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:ATMEGA16A单片机1602字符显示程序
下一篇:ATMEGA16A单片机的多点测温系统完成版 Proteus仿真程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

2440裸机编程之八 UART通用异步收发
S3C2440A 内部集成的UART(通用异步收发器)单元提供三个独立的异步串行I/O端口,也就是通常所说的串口。串口是用途广泛的通讯口,很多工业现场总线都以串口为基础。在这里,串口不仅可以用来与外部设备进行数据通讯,还可以用来观察系统的运行状况,例如前面已经使用过的利用串口终端工具观察程序运行情况的方法。 S3C2440A 的UART 单元提供三个独立的异步串行I/O 端口,每个都可以在中断或DMA 两种模式下工作。它们支持的最高波特率为115. 2 kbps。每个UART 通道包含2 个64 位FIFO 分别供接收和发送使用。S3C2440A 的UART 具有以下可配置的参数项目:可编程的波特率,红外收/发模式,l
发表于 2019-11-09
2440裸机编程之八 UART通用异步收发
关于UART通信端口上射频干扰的研究技术
有客户报告其中心位于840MHz左右的RF干扰影响配置成UART的串行通信端口,该接口位于包含一个AD6903(LeMansLCR+)数字式基带处理器的调制解调器和一台主处理机之间。出现的问题是连接到AD6903GPIO_1引脚的UARTRX信号中出现噪声,每当射频(RF)干扰源出现时,信号平均电压就会远离其期望值。平均电压的偏移幅度取决于RF源的功率和频率。图1显示当射频功率放大器接通时,进入AD6903的GPIO_1引脚上的UARTRX信号受到影响的情况。在图1中,进入AD6903的UARTRX用粉红色表示,来自主处理机的UARTTX信号用紫色表示,功率放大器使能用黄色表示,而AD6903VEXT电源用绿色表示。图1:UART
发表于 2019-11-09
关于UART通信端口上射频干扰的研究技术
S3C2440处理器UART专用寄存器
这里只介绍与UART有关最常用的几种寄存器,至于在编程时涉及到的其它功能的寄存器这里不做介绍。1.ULCONn(n=0,1,2)  //校验和模式寄存器   [6] 0=正常模式、1=红外模式   [5:3] 0XX=无校验、100=奇校验、101=偶校验   [2] 0=1位停止位、1=2位停止位   [1:0] 00=5位数据长度、01=6位数据长度、10=7位数据长度、11=8位数据长度2.UCONn(n=0,1,2)  //工作方式寄存器   [10] 0=PCLK
发表于 2019-11-07
单片机AD接收UART发送模块电路图PCB与vb上位机源码
Altium Designer画的AD接收UART发送模块电路原理图和PCB图如下:【简要说明】一、 尺寸:长50mmX宽25mmX高10mm二、主要芯片:ATMEGA8三、工作电压:直流5V二、 特点:1、检测模拟量电压范围0~5V2、数码管显示范围0~50003、四位数码管显示4、输入输出接线简单5、AD转换频率125K,8位数据转换6、波特率:9600 , 误差率:0.156%三、 作用:将0~5V的模拟电压量转换成为0~5000的数字量,由数码管显示出来,并转换成为0~255的十六进制,由单片机UART(即,TXD口发出),经232电平转换后,可以和电脑直接通信。AD接收UART发送模块AD转换数值显示
发表于 2019-11-07
单片机AD接收UART发送模块电路图PCB与vb上位机源码
msp430学习笔记之uart
0;}  //usart0 interrupt receive function#pragma vector=UART0RX_VECTOR __interrupt void usart0_rx (void){ if( RXBUF0 == 0x00 ){    //收到0时,led灯亮,并发送 "led is on" P2OUT = 0x7f;  send_string("led is on"); } if( RXBUF0 == 0x01 ){ //收到1时,led灯亮,并发送 "led is
发表于 2019-10-30
msp430学习笔记之uart
STC15F2系列单片机UART1使用定时器1做波特率发生器
uart1_SendString(char *s);void uart1_SendData(BYTE dat);void main(void){        SCON = 0x50;  //八位可变波特率        T2L   = TM2;        T2H   = TM2>>8;                AUXR  = AUXR_T2R
发表于 2019-10-30
小广播
何立民专栏 单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved