AVR的几个USART接口函数

发布者:Huanle最新更新时间:2016-10-26 来源: elecfans关键字:AVR  USART  接口函数 手机看文章 扫描二维码
随时随地手机看文章
#define    Bps_Uart0       38400

#define    Bps_Uart1       38400
#define    Fosc            16000000 

/////////////////////////////////////////////
//UART0 初始化
void uart0_init(unit32 bps)
{
 unit32  temp;
 temp=Fosc/bps/8-1;
 
 UCSR0B = 0x00; //disable while setting baud rate
 UCSR0A = 0x02; //disable while setting baud rate

 UBRR0L =temp;    
 UBRR0H =(temp>>8);
 UCSR0C = 0x86;
 UCSR0A = 0x02; //enable    2倍波特率
 UCSR0B = 0x98; //enable   
}
///////////////////////////////////////////
//UART1 初始化
void uart1_init(unit32 bps)
{
 unit32  temp;
 temp=Fosc/bps/8-1;
 
 UCSR1B = 0x00; //disable while setting baud rate
 UCSR1A = 0x02; //disable while setting baud rate

 UBRR1L =temp;    
 UBRR1H =(temp>>8);
 UCSR1C = 0x86;
 UCSR1A = 0x02; //enable    2倍波特率
 UCSR1B = 0x98; //enable   
}

 

/*********************************************************/
//向串口usart0发送一个字节函数   
 void Uart0_putchar( unsigned char sdbyte)  
 {
     UDR0=sdbyte;
     while(!(UCSR0A&0x40));
     UCSR0A|=0x40;
 }
 /*********************************************************/
//向串口usart0发送一个数组函数   
 void Uart0_sendbuf(unsigned char *ptr,unsigned char len)  
 {
   while(len>0)
   {
     Uart0_putchar(*ptr++);
  len--;   
   }
 }
/*********************************************************/
//向串口usart1发送一个字节函数   
 void Uart1_putchar( unsigned  char sdbyte)  
 {
    UDR1=sdbyte;
     while(!(UCSR1A&0x40));
      UCSR1A|=0x40;
 }
/*********************************************************/
//向串口usart1发送一个数组函数   
 void Uart1_sendbuf(unsigned char *ptr,unsigned char len)  
 {
   while(len>0)
   {
     Uart1_putchar(*ptr++);
  len--;   
   }
 }
//////////////////////////////////////////////////////////
//多参数打印函数
void Uart1_printf(char *str,...)
{
 char  buf[128];
 unsigned char i = 0;
 va_list ptr;
 va_start(ptr,str);
 vsprintf(buf,str,ptr);
 while(buf[i])
 {
     Uart1_putchar(buf[i]);
  i++;
 }
}
////////////////////////////////////////////////////////
void Uart0_printf(char *str,...)
{
 char  buf[128];
 unsigned char i = 0;
 va_list ptr;
 va_start(ptr,str);
 vsprintf(buf,str,ptr);
 while(buf[i])
 {
     Uart0_putchar(buf[i]);
  i++;
 }
}

关键字:AVR  USART  接口函数 引用地址:AVR的几个USART接口函数

上一篇:AVR单片机JTAG接口的使用方法
下一篇:AVR I/O使用方法

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

STM32 Usart 上电发送一个无效字符的问题
无论这么设置USart,上电后都会发送一个无效字符,这个是STATUS寄存器的上电初始值有问题造成的,Usart的发送数据寄存器有一个缓冲移位寄存器。并且发送有两个状态,一个是发送数据寄存器为空,一个是移位寄存器发送完成。上电后Usart的状态寄存器的发送完成位为0,造成了上电以后会始终会有一个值被发送,这个值就是发送移位寄存器中的值,而这个值有时候是0X00有时候是0XFE 。 要解决这个问题,在初始化的时候先初始化Usart,然后再配置Usart的GPIO位,就可以避免Usart上电发送一个无效字符的问题。 还有一种可能性,在上电后至端口初始化,STM32的I/O端口处于高阻状态,有些RS232转换芯片在输入端为高阻时
[单片机]
AVR单片机ADC转换程序
//基准定义 #defineAD_ref_vref0x00//基准Vref #defineAD_ref_avcc0x40//基准AVCC #defineAD_ref_vref_in0xc0//基准内部Vref #defineAD_refAD_ref_vref //常量定义 //单端通道,不放大 #define AD_SE_ADC0 0x00//ADC0 #define AD_SE_ADC1 0x01//ADC1 #define AD_SE_ADC2 0x02//ADC2 #define AD_SE_ADC3 0x03//ADC3 #define AD_SE_ADC4 0x04//ADC4 #define AD_
[单片机]
USART来帮忙
如果您在使用STM32的时候,恰好缺少一个SPI接口,同时片上的资源还有多余的USART(一般来说,USART的接口都较丰富,比如STM32L0系列的产品),我们完全可以 用USART来替代SPI ,效果非常不错。 本文将向大家介绍 如何把USART当做SPI来用 。 USART是指全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。那么, 它与UART有什么区别呢?它的硬件连接方式是怎样的?该如何使能USART的SPI模式?把USART当做SPI来使用的时候和标准的SPI有什么区别,需要注意哪些事项? 本文将逐一为大家解读。 UART与USART的区别 早期在开发8051的时候使用的都是UART
[单片机]
AVR之最简单外部中断、定时器0、定时器1程序
程序太简单啦,就不说啦,自己看吧 ATMEGA16用ICCAVR编译器 1、外部中断 #include iom16v.h #include AVRdef.h unsigned char temp=0x80; void main() { DDRA=0xff; GICR|=0x40;//使能外部INT0 MCUCR|=0x01;//INT0下降沿触发 SEI();//总中断 while(1); } #pragma interrupt_handler int0_isr:iv_INT0 void int0_isr(void) { PORTA=temp; temp=temp 7|temp 1; } 2
[单片机]
IAR For AVR USART 应用
#include iom16.h #define uchar unsigned char #define uint unsigned int //########################################################### /*串口初始化函数*/ void Uart_Init(void) { UCSRB = (1 RXEN)|(1 TXEN)|(1 RXCIE); //允许发送和接收 UCSRC = (1 URSEL)|(1 UCSZ1)|(1 UCSZ0); //8位数据位+1位停止位 UBRRH=0x00;
[单片机]
AVR开发 Arduino方法(一) 端口子系统
  Arduino UNO R3使用的主处理器ATMega328P上有3个8位的输入/输出端口,它们分别是PB,PC和PD。Arduino IDE提供的Blink示例可以帮助我们了解端口的数字输出功能: 1 int led = 13; 2 3 void setup() { 4 pinMode(led, OUTPUT); 5 } 6 7 void loop() { 8 digitalWrite(led, HIGH); 9 delay(1000); 10 digitalWrite(led, LOW); 11 delay(1000); 12 }   这个示例使Arduino 13(PB5
[单片机]
<font color='red'>AVR</font>开发 Arduino方法(一) 端口子系统
【STM32学习笔记】USART 硬件流控
流控的概念源于 RS232 这个标准,在 RS232 标准里面包含了串口、流控的定义。大家一定了解,RS232 中的“RS”是Recommend Standard 的缩写,即”推荐标准“之意,它并不像 IEEE-1284、IEEE-1394 等标准,是由“委员会定制”。因而,不同的厂商在做 RS232 时,多少会有不同,流控也都会存在差异。以下我们与大家一起探讨流控的作用、搭建及如何操作。 本文着重探讨硬件流控。 为什么需要流控? 数据在两个串口之间进行通讯的时候常常会出现丢失数据的现象,比如两台计算机或者是一台计算机和一个单片机之间进行通讯,当接收端的数据缓冲区已经满了,这个时候如果还有数据发送过来,因为接收端没有时
[单片机]
基于AVR的LED显示屏的灰度设计与实现
LED点阵块具有亮度高、发光均匀、可靠性好、拼装方便等优点,能构成各种尺寸的显示屏。目前,LED显示屏已被广泛应用于文字显示并取得了很好的效果,但是大部分仅能显示滚动的文字信息而不能显示图像,并且还存在系统复杂等缺点。本文提出了一种主从式单片机的 LED显示屏 解决方案,该设计方案利用AVR单片机自身的FLASH ROM和RAM,外部无需任何存储电路,电路结构简单。该系统实现了图像的16阶灰度显示,可广泛用于商场、车站等公共场合。 1 AVR单片机简介 AVR单片机是增强型内置FLASH的RISC(ReducedInstruction Set CPU)精简指令集高速8位单片机,硬件采用哈佛(Harward)结构
[单片机]
基于<font color='red'>AVR</font>的LED显示屏的灰度设计与实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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