AVR与RS232——一个简单易懂的串口通讯例子程序

发布者:泉地水无痕最新更新时间:2015-10-12 来源: eefocus关键字:AVR  RS232  串口通讯 手机看文章 扫描二维码
随时随地手机看文章
只有基本的功能,用于串口操作的演示,如果需要结构化的程序,到http://www.avrvi.com/avr_examples/usart.html

RS232电路图
[转载]AVR与RS232——一个简单易懂的串口通讯例子程序(转载)


本程序在本站的开发板上通过,绝对没有问题,欢迎讨论。
测试效果,启动时发送http://www.avrvi.com加回车换行,然后,收到什么,返回什么,如果给它发送一个小a,会多发回一个OK,如果发的是大A,则发回Hello字符串。

串口程序测试
[转载]AVR与RS232——一个简单易懂的串口通讯例子程序(转载)

// ICC-AVR application builder : 2007-5-20 17:21:25
// Target : M16
// Crystal: 7.3728Mhz
// AVR mega16 串口测试
// AVR与虚拟仪器 http://www.avrvi.com 古欣

#include
#include

#define F_CPU 7372800
const unsigned char buffer[]="http://www.avrvi.com";

void USART_Init( unsigned int baud )
{
unsigned int tmp;

tmp= F_CPU/baud/16-1;
UBRRH = (unsigned char)(tmp>>8);
UBRRL = (unsigned char)tmp;

UCSRB = (1<
UCSRC = (1< }


// ICC 生成的初始化
//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9600 (0.0%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x06;
UBRRL = 0x2F; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x18;
}

//下面两个函数直接从数据手册上拷贝过来的

// 数据发送【发送5 到8 位数据位的帧】
void USART_Transmit( unsigned char data )
{

while ( !( UCSRA & (1< ;

UDR = data;
}


// 数据接收【以5 到8 个数据位的方式接收数 据帧】
unsigned char USART_Receive( void )
{

while ( !(UCSRA & (1< ;

return UDR;
}

//连续发送字符
void USART_Transmit_2( void )
{
while ( !( UCSRA & (1< ;
UDR = 'H';
while ( !( UCSRA & (1< ;
UDR = 'e';
while ( !( UCSRA & (1< ;
UDR = 'l';
while ( !( UCSRA & (1< ;
UDR = 'l';
while ( !( UCSRA & (1< ;
UDR = 'o';
}


void main(void)
{
unsigned char n=0,tmp=0;

USART_Init(9600); //波特率9600 初始化串口
// uart0_init();

for(i=0;n<20;n++) //发送数组里面的字符串,http://www.avrvi.com
{
USART_Transmit(buffer[n]);
}

USART_Transmit(0x0d); //发送一个回车
USART_Transmit(0x0a); //发送一个换行

while(1)
{
if(UCSRA&(1< {
  tmp=USART_Receive(); //接收数据
  USART_Transmit(tmp); //发送数据
 
  if(tmp=='a')       //对接收到的数据进行,如果是a,再发一个OK回来
  {
  USART_Transmit('O');
  USART_Transmit('K');
  }
  if(tmp=='A')     //对接收到的数据进行,如果是A,再发一个Hello回来
  {
  USART_Transmit_2();
  }
}
}
}

测试效果,启动时发送http://www.avrvi.com加回车换行,然后,收到什么,返回什么,如果给它发送一个小a,会多发回一个OK,如果发的是大A,则发回Hello字符串。
关键字:AVR  RS232  串口通讯 引用地址:AVR与RS232——一个简单易懂的串口通讯例子程序

上一篇:AVR与L298进行直流电机控制
下一篇:AVR复位电路的设计

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

AVR熔丝位设置让我在吃苦头中成长
有一小段时间没有来空间扫一扫雪了,前段日子把避障小车终于做了出来,时间比较忙还来不及拿出来和大家分享,这些天因为要公司要做一款UNO控制板,之前感觉自己比较停留在对单片机的编写程序上,忽略了对单片机内部的一些寄存器的了解上,当然在学习PIC的时候会去了解里面的结构,比如AD和DA的分频,中断里面寄存器的控制,SPI控制的结构等。但是在AVR这方面还真是大大的欠缺。 UNO是arduino一个开源的产品,基本上驱动程序,bootload等都可以在其官方上找到,不过说句实在的,因为一直没有成功写进atmega8u2-mc这款控制器里面,一直在怀疑着自己找到的是不是正确的bootload的。就这样子弄了两个星期无果,自己郁闷,公司估计也很
[单片机]
<font color='red'>AVR</font>熔丝位设置让我在吃苦头中成长
关于AVR I/O 的驱动能力的介绍
在使用中还要注意的是: 虽然 IO端口的灌电流(IOL)在稳定的实验条件下,可以达到每路20 mA (VCC = 5V时), 10 mA (VCC = 3V时),但必须遵从: TQFP 及 MLF 封装 1] 所有端口的总和, 不能超过 400 mA. 2] 端口 A0 - A7, G2, C3 - C7 的灌电流总和,不能超过 300 mA. 3] 端口 C0 - C2, G0 - G1, D0 - D7, XTAL2 的灌电流总和,不能超过 150 mA. 4] 端口 B0 - B7, G3 - G4, E0 - E7 的灌电流总和,不能超过 150 mA. 5] 端口 F0 - F7 的灌电流总和,不能超过 200 m
[单片机]
AVR单片机的复位操作方法解析
采用了在ATmega16引脚XTAL1和XTAL2上外接由石英晶体和电容组成的谐振回路,并配合片内的OSC(Oscillator)振荡电路构成的振荡源作为系统时钟源的。更简单的电路是直接使用片内的4M的RC振荡源,这样就可以将C1、C2、R2和4M晶体省掉,引脚XTAL1和XTAL2悬空,当然此时系统时钟频率精准度不如采用外部晶体的方式,而且也易受到温度变化的影响。 AVR的复位源和复位方式: 复位是单片机芯片本身的硬件初始化操作,例如,单片机在上电开机时都需要复位,以便CPU以及其它内部功能部件都处于一个确定的初始状态,并从这个初始状态开始工作。 AVR单片机的复位操作,其主要功能是把程序计数器PC初始化为$0000(指
[单片机]
<font color='red'>AVR</font>单片机的复位操作方法解析
IARAVR中断服务程序问题
今天调试程序遇见了一个IARAVR中断服务程序的问题:this kind of pragma may not be used... 花了一个小时调试发现的问题差点令我崩溃。 以定时计数器0中断服务程序为例: #pragma vector=TIMER0_OVF_vect _interrupt void Timer0(void) { 。。。。。 。。。。。。。 } 调了很长时间也没发现错误,当参见官方实例,一不小心发现interrupt前要加两个“下划线”。我勒个去。。。 #pragma vector=TIMER0_OVF_vect __interrupt void Timer0(void) { 。。。。。 。。。。。。。 } 对
[单片机]
avr0~5V数字式直流电压表设计
一、实验目的 1. 掌握A/D转换程序的设计; 2. 掌握数据采集与显示的应用; 3.掌握数据处理的方法; 二、实验内容 1. 参照课本P383页 0~5V数字式直流电压表实验 程序,并编译、仿真,见下图所示。 注意:由于用proteus ISIS仿真时,数码管模型显示的闪烁现象和缓存现象,需要对其进行短延时和清屏,否则,显示将出现乱码现象。可在main()主函数里加入两条语句: Delay(1); PORTA=0; (1)修改错误。 比较程序第25行 ADMUX=0XC7 以及程序第71行 x=(5000*(long)i)/1023 所指参考电压不一致,导致输入模拟电压值与数码管显示电压值不一致,有哪几种
[单片机]
AVR单片机ATMEGA16编译软件ICCAVR的使用技巧与应用示例
一、先来一段朴实的独白吧 写这篇文的时间是2018年3月21日。大学2013毕业,专业是机械,但喜欢电子。篇首声明:哪一行都有鄙视链,就连打个游戏都不例外。如果大神路过这里,请您show your mercy然后walk away就当nothing happened. 当然,大牛都是很低调的,因为他们身心都沉进编程的世界里不能自拨。好了本文就ICCAVR的使用说明作一个入门式的引导,方便新、老网友作一种可供使用的参考。 上大学并不是为了纯读书,而是自我发现、反馈、然后决定的心理成熟过程,好吧这就是我的层次。上学时为了搞懂一个东西,在网上查找所有的有用的信息资料,当然必须免费的,唉不谈。。现在如果需要一些资源直接买买买,省时省力
[单片机]
<font color='red'>AVR</font>单片机ATMEGA16编译软件ICCAVR的使用技巧与应用示例
实现AVR单片机芯片程序自刷 USB_Flash_BootLoader HID制作过程
前期制作USBASP过程中,学习了AVR单片机芯片的BootLoader原理,查找了很多关于USB-HID和BootLoader的资料制作了可以自刷程序的atmega8(16)简易板,现将所学的分享给大家。 一、关于BootLoader BootLoader是芯片上电后,程序不从flash地址的0x00执行,而是跳转到boot区执行bootloader程序。 atmega8的boot区的大小及起始位置是由其熔丝位来设置(BOOTSZ0、BOOTSZ1)的。 其是否执行bootloader程序也是由熔丝位(BOOTRST)设置的。 二、关于USB-HID HID是人体学输入设备的英文简称,由于
[单片机]
实现<font color='red'>AVR</font>单片机芯片程序自刷 USB_Flash_BootLoader HID制作过程
基于AVR单片机的服装压力检测系统设计
  O 引言   传统服装压力舒适度测试方法主要有:流体压力法、电阻法、石膏法。其中,使用流体水银压力计或水压机来测量服装压力的方法简单直接,但精度较低,尤其动态测量相当困难;电阻测量方法是将电阻应变片传感器插入衣服内,由于服装压力而使应变片变形导致电阻值的变化,从而将压力变化转换为变化的电压信号,通过测量该变化的电压值得出服装压力测试结果。该方法测试精度高,结果稳定,但易受外部条件的影响,且对服装压力进行动态测量比较困难;石膏法主要是通过模型检测实现,这种方法可以测出接近穿衣时的自然压力值,但不能进行连续动作时的服装压力测试,并且石膏模型难以制作。以上各种测试方法受时间和空间的限制,难以适应不同测试条件的需要,且测试数据的精度
[单片机]
基于<font color='red'>AVR</font>单片机的服装压力检测系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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