avr单片机USART程序详解

发布者:breakthrough3最新更新时间:2019-11-28 来源: 51hei关键字:avr单片机  USART  编程方式 手机看文章 扫描二维码
随时随地手机看文章

USART 可以用中断和轮询,也可以用缓冲区做一个上层接口


*****************************************************************
//CPU:mega32
//编译器:iar
//USART一般编程方式

#include

void usart_init(void);
void put_char(char data);
void put_s(char *p);
char get_char( void );
char *get_s(char *p);

#define Fosc 8000000
#define Baud 9600

char c = 'n';
char str[9];
int main(void)
{
usart_init();

        put_s("acva");
      

while(1);
          put_char( get_char() );
}

void usart_init(void)
{

        UCSRB = (1<
UCSRC = 0X86;  //选择UCSRC,异步模式,无校验,1位停止位,8位数据位
UBRRH = (Fosc/16/Baud - 1)>>8; //选择UBRRH,设置波特率
UBRRL = (unsigned char)(Fosc/16/Baud - 1);
}

/*
#pragma vector=USART_RXC_vect
__interrupt void receive(void)
{
c = UDR;
put_char('[');
put_char(c);
put_char(']');
}
*/

char get_char( void )
{
    while ( !(UCSRA & (1<    return UDR;
}

void put_char(char data)
{
while( !(UCSRA & (1<寄存器是否空
UDR = data;//将要发送的数据送入发送寄存器
}



//发送字符串
void put_s(char *p)
{
    for(;*p!='';p++)    //如果不是结束符,就发送
    put_char(*p);
}


//接收字符转
char *get_s(char *p)
{
    char *p2 = p;
    while(1)
    {
      *p = get_char();
      put_char(*p);//回显
      if(*p == 0X0D)
      {
        *p = '';
        break;
      }
      p++;
    }
    return p2;
}


******************************************************************

关键字:avr单片机  USART  编程方式 引用地址:avr单片机USART程序详解

上一篇:avr单片机mega32基于状态机的按键设计
下一篇:avr单片机ds1302时钟程序详解

推荐阅读最新更新时间:2024-11-12 21:43

AVR单片机的特性及功能全面解析
高可靠性、功能强、高速度、低功耗和低价位 , 一直是衡量单片机性能的重要指标,也是单片机占领市场、赖以生存的必要条件。 早期 单片机主要由于工艺及设计水平不高、功耗高和抗干扰性能差等原因,所以采取稳妥方案:即采用较高的分频系数对时钟分频,使得指令周期长,执行速度慢。以后的CMOS单片机虽然采用提高时钟频率和缩小分频系数等措施,但这种状态并未被彻底改观(51以及51兼容)。此间虽有某些精简指令集单片机(RISC)问世,但依然沿袭对时钟分频的作法。 AVR单片机的推出,彻底打破这种旧设计格局,废除了机器周期,抛弃复杂指令计算机(CISC)追求指令完备的做法;采用精简指令集,以字作为指令长度单位,将内容丰富的操作数与操作码安排在
[单片机]
<font color='red'>AVR单片机</font>的特性及功能全面解析
串口中断服务函数解释USART1_IRQHandler(void)
void USART1_IRQHandler(void) // 1 ³ { u8 Res; #ifdef OS_TICKS_PER_SEC // ¹ ½ , ¹ ucosII . OSIntEnter(); #endif if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // ¾ ¼ ½ (½ ½ ¾ 0x0d 0x0a½ &s
[单片机]
STM32笔记(三)ADC、DMA、USART的综合练习
  我们在这里设置ADC为连续转换模式,常规转换序列中有两路转换通道,分别是ADC_CH10(PC0)和ADC_CH16(片内温度传感器)。因为使用了自动多通道转换,数据的取出工作最适合使用DMA方式取出,so,我们在内存里开辟了一个u16 AD_Value 数组,并设置了相应的DMA模块,使ADC在每个通道转换结束后启动DMA传输,其缓冲区数据量为2个HalfWord,使两路通道的转换结果自动的分别落到AD_Value 和AD_Value 中。   然后,在主函数里,就无需手动启动AD转换,等待转换结束,再取结果了。我们可以在主函数里随时取AD_Value中的数值,那里永远都是最新的AD转换结果。   如果我们定义一个更大的AD_
[单片机]
AVR单片机JTAG接口的使用方法
AVR的JTAG 仿真器特别好用,在此特别推荐,它可以对所有含JTAG接口的mega系列进行下载和软件硬件仿真。 刚开始使用AVR JTAG仿真器时,不是很清楚它的使用方法。看完AVR JTAG仿真器的英文说明和中文说明,也不很明确它的具体使用。经过自己的摸索,才清楚如何使用这种仿真器。其实这种仿真器的使用方法很简单,就是说明太罗索,让人越搞越糊涂。不过,使用这种仿真器,确实方便了很多,可实现硬件仿真与软件仿真,步调程序,发现程序漏洞,是较好的辅助调试工具。 下面是摸索出来的较简明的使用方法: (1) AVR JTAG的使用环境是:AVR Studio 4.07以上版本,9-15DC电源,PC与RS232口。 (2) 安装AVR S
[单片机]
AVR单片机专辑——定时器
第二讲:AVR单片机的定时器 ATmega128有两个8位定时器0和2,两个16位定时器1和3。下面主要说一下定时器的不同用法。 1. T/C0可以外接32768Hz的晶振,实现RTC(实时时钟)。 2. T/C2 外部事件计数器(T2)。 3. 16位的T/C可以实现精确的程序定时、波形产生和信号测量。功能非常强。 本文主要以16位的T/C1为例介绍定时器的应用,其它的定时器可以依葫芦画瓢。 1. 采用T/C1的溢出中断实现电子钟的设计 定时器工作在普通模式,用数码管显示时间。这里问题是如何得到1s的定时。若晶振采用12M,256分频,则计数初值应设为X,0xFFFF-X=12M/256 ==〉X=0
[单片机]
AVR单片机8位数码管显示的程序实现
我们接着来完成8位数码管的显示实验。现在我们开始动手编写程序; 根据前面的介绍,我们应该已经能够知道编写一个 AVR单片机 的C语言程序的基本步骤和方法了。 下面给出这个程序的主程序文件,在这个程序中我们应该能够知道这个程序都包含了那几块,具体来说我们应该能够在这个程序中把以下几个部分找出来:预编译语句、全局变量的定义、函数的声明、主函数、函数定义。如果你还不能够准确找出这几部分,那么需要把前面的内容再详细阅读一下。 主程序代码 #include avr/io.h //io端口寄存器配置文件,必须包含 #include util/delay.h //GCC中的延时函数头文件 #include hc595.h //u
[单片机]
治标治本,彻底解决AVR单片机EEPROM数据丢失问题
编译环境:WinAVR-20060421 + AVR Studio 4.12.498 Service Pack 4 基本思路:每份写到EEPRM的数据,都做三个备份,每个备份的数据都做CRC16校验,只要系统运行中出错,错误地修改了EEPROM数据, 那么根据校验字节就知道哪个备份的数据被修改了,然后用正确的备份覆盖出错的备份,达到数据恢复的目的。 EEPROMSave.h 文件: /* EEPROM管理定义 */ #define EepromPageSize 64 //页容量定义 #define EepromPage0Addr 0x0000 //各个页的其始地址定义 #def
[单片机]
AVR单片机中左移位和右移位指令
计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。计算机只能识别和执行机器语言的指令。为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。 AVR单片机指令系统是RISC结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。 SL-DIY02-3开发实验器使用AT90S8535单片机,有118条指令, 而我们所做的11个实验程序仅用了34条指令, 我们重点讲这34条指令, 其余指令就可自学了。 AVR器件(指令速查表) 118条指令器件 AT90S2313/2323/2343/2333 ,AT90S4414/4433/4434/85
[单片机]
<font color='red'>AVR单片机</font>中左移位和右移位指令
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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