avr串口配置很简单,配置就几个寄存器就可以进收发;
但有几点要搞明白的是:
1、串口一但被配置成功IO功能自动被占用,这点与LPC或STM8/32不同(需要寄存配置);
2、没有专门的串口开起或闭关功位(整个串口);
3、读写控制寄存器C需要把URSEL位写成1,而读写UBRRH寄存器时须要URSEL写成0;
1: //晶振频率
2: #define F_CPU 6000000UL
3: //波特率
4: #define BAUD 9600
5:
6: //M8串口1初始化
7: void UsartInit(void)
8: {
9: unsigned int tmp;
10: FifoInit(&RxFifo, sizeof(RxFifo.data));
11: FifoInit(&TxFifo, sizeof(TxFifo.data));
12: tmp= F_CPU/BAUD/16-1;
13: SetBit(SREG, 7);
14: UCSRB = 0;
15: UCSRC = 0;
16: UBRRH=(unsigned char)(tmp>>8);
17: UBRRL=(unsigned char)tmp;
18: UCSRB |= (1< 19: UCSRC |= (1 << URSEL)|(1< 20: }
关键字:AVR ATMEGA8 串口 USART
引用地址:
AVR ATMEGA8 串口USART
推荐阅读最新更新时间:2024-11-11 01:37
STM8S003F使用I/O口模拟串口(一)发送数据
最近在使用STM8S003F模拟串口发送数据,网上资源很多,但是没有找到我需要的,因此自己写一篇文章,做一个总结,这篇文章主要是不用库函数实现发送简单的过程。 1、串口通信原理和模拟串口发送数据的原理 标准串口数据格式为:起始位(1bit)+数据位(8bit)+校验位(1bit)+停止位(1bit)。其中起始位为低电平,停止位为高电平。 串口通讯需要设置波特率和检查COM口。 思路是这样的,我们使用定时器TIM2来定时,每隔一端时间发送一个位,从而实现模拟串口发送数据。 2、获得定时器ARR自动装载的值 为了简便,我们不要校验位,因此共有10个位的数据。 我以stm8中9600bit/s的波特率计算的过程为例(
[单片机]
单片机成长之路(avr基础篇)- 003 AVR单片机的BOOT区
BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器。对于一般的FLASH存储器,数据的写入需要一定的时间来完成,在数据写入完成之前,存储器中所有的数据都是不可读的,这就在运行旧程序和写入新程序之间造成了一个矛盾。 使用BOOT区是解决这个矛盾的方法之一,它将FLASH存储器从物理上分为两个独立的区域,对其中的一个区的数据写入不会影响到另一个区的数据读取操作。我们可以让单片机的程序在其中一个区(通常是BOOT区)运行,而运行着的程序代码写入另外一个区(通常为应用程序区)内。 AVR高档单片机ATmega系列中含有BOOT代码区,即程序引导区,也可称器件自身监控
[单片机]
STM32串口蓝牙实验--蓝牙控制小灯
用的正点原子的串口模板 V3接线 效果,可以控制PB5开关 #include led.h #include delay.h #include key.h #include sys.h #include usart.h int main(void) { delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为115200 LED_Init(); //LED端口初始化 KE
[单片机]
51单片机串口通讯之中断法
程序讲解: /*---------------------------------------------------------------*/ //串口通讯 //按下按钮,单片机发送数据 Come On!\r\n 给主机 //单片机晶振:11.0592MHz //波特率: 9600bps /*-------------------------------------------------------------*/ //包含头文件 #include at89x52.h unsigned char co de tab ={ Come On!\r\n }; #define k1 P3_2 //对应开发板
[单片机]
可编程数字电位器与AVR单片机的通信说明
1 引言 AVR嵌入式单片机具有丰富的硬件、软件资源,其中的串行I2C接口能满足很多应用场合的要求,两个AVR单片机通过I2C总线直接连接就可实现单片机相互通信;AVR单片机还可以和任何具有I2C总线接口的外设直接连接而无须其它硬件电路支持。而X9221系列可编程数字电位器在智能测试设备上应用非常广泛,通过I2C总线可以简单地构成单片机与各种外设之间乃至与计算机之间的通信,建立友好的人机界面联系。硬件设计简单、灵活,只需要将所有设备的SDA和SCL信号线分别并联在一起并加上拉电阻即可,有助于提高设备的自动化水平、可靠性、稳定性及电气装配的工艺性。AVR单片机和X9221系列可编程数字电位器都有内置的E2ROM单元,可以非常方
[单片机]
提升PIC单片机AD转换数据存储及串口效率的设计
0 引言 在由单片机和PC 机构成的检测系统中,通常会由多个单片机采集数据并将经过A/D 转换的数据通过串口送往上位PC 机进行数据处理。PIC 单片机A/D 转换后的结果大多是8 位或10位的,8 位的A/D转换不涉及该问题。以10 位的数据为例,在单片机内进行存储时需要占用2 个8 位的字节,低8 位和高2位分别存储在2 个字节中,但是用于存储高位数据的8 位宽的RAM 单元中仅有2 位是有效数据。 单片机的存储空间有限,以单片机为例,RAM 数据存储器按功能分为通用寄存器和特殊功能寄存器两个部分,除去特殊功能寄存器外,仅有368个8 位宽的RAM 单元,单片机能够存储的数据量很有限。假设将每次A/D 转换的
[单片机]
AVR单片机控制交流电机测试程序
MCU:at90s2313 时钟:4MHz #include avr/io.h #include avr/delay.h #define uchar unsigned char #define uint unsigned int #define SET_RED_LED PORTD|=_BV(5) //PD5接红色发光管 #define CLR_RED_LED PORTD&=~_BV(5) #define SET_GRN_LED PORTD|=_BV(4) //PD4接绿色发光管 #define CLR_GRN_LED PORTD&=~_BV(4) class CC ontrol { publ IC : CControl
[单片机]
AVR单片机上电复位不可靠问题的解决
推荐昨晚在调试AVR 单片机时又有一些心得体会,虽然结论是一个很小的问题造成的,但在此还是写出来给大家参考,避免走弯路。 事件描述: 以前用AVR的芯片也做过好几个设计,从来没有怀疑过ATMEL的芯片的稳定性,以前的几个方案都是很稳定的,当然这跟PCB的设计有很大的关系,如果大家需要PCB相关参考资料的话可以到本站的PCB技术专栏里查找,那里有很多前辈的PCB布板心得。 这次用的ATmega48制作的串口电压表就出现一个很奇怪的现象,电路板是用万能板焊接的,程序里用到ADC功能和串口通讯功能,用的AVR下载工具是STK500,每次下载程序后芯片总是不能正常复位工作,还要读取下芯片的特征字或熔丝位让芯片重新复位下才能工作,这时
[单片机]