AVR单片机串口操作程序

发布者:自在逍遥最新更新时间:2015-01-16 来源: 51hei关键字:AVR  单片机  串口操作 手机看文章 扫描二维码
随时随地手机看文章
#include
#include
#include
#include
#include
 
 
#define FOSC 8000000 //mcu工作时钟频率
 
 
typedef unsigned int uint16;
typedef unsigned char uchar8;
 
 
uchar8 DoubleIRData[25]={0x64,0x00,0x20,0x04,0x40,0x00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //双红外发射数据 取PD2作为驱动远程红外发射
//uchar8 SingleIRData[25]={0x60,0x00,0x04,0x00,0x04,0x00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} //取PD2作为驱动远程红外发射 //取PD3驱动红外发射
 
 
uchar8 BitCount=0; //载波计数
uchar8 BetyCount=0; //位计数
volatile uchar8 UsartDataBuff=0;
volatile uchar8 ChargeFlag=0,LED_Count;
volatile uchar8 SYSCount=0;
volatile uint16 ADCCurrent1=0; //AD0转换结果  电压检测
volatile uint16 ADCCurrent3=0; //AD3结果转换 电流检测
 
 
void Port_Init(void)
{
DDRA  = 0b00000000;     //AD采样 PA0 PA1
PORTA = 0b00000000;     //PA口:初始化0
//PB PC 没有使用
DDRD  = 0b11111110;     //PD2 为远程红外发射 PD3 和 PD4 状态指示灯,P3未充电 P4表示充电 PD5和PD6 双红外近区发射 PD7 开关充电使能
PORTD = 0b00000011;     //初始化输出为0 其中USART 接收口上拉高电平 等待接收中断
 
 
}
 
 
void ADC_Init(void)
{
ADCSRA=0x00; //ADC控制状态寄存器
ADMUX =0x40; //ADC 多工选择寄存器 参考电压为AVCC,其中AREF 引脚外加滤波电容 数据右对齐结果选择0通道
ACSR  =(1<
ADCSRA=(1<
}
 
 
 
 
 
 
uint16 ADC_Read(unsigned char Channelx)
{
 
 
uint16 ADTempValue;
ADMUX=0xc0|(Channelx&0x0f);//ADMUX = 0xe0|Channelx; //2.56V 的片内基准电压源, AREF 引脚外加滤波电容 数据右对齐结果
ADCSRA|=(1<
loop_until_bit_is_set(ADCSRA,ADIF); //等待AD转换结束其实也可以采用中断方式来读
ADCSRA|=(1<
ADTempValue=ADC&0x3ff;                                           //ADC=0000 00ADCH ADCL 共16
  return ADTempValue;
}
 
 
 
 
void Timer0_Init(void)
{
TCCR0 = 0x00; //定时器0的控制寄存器,初始化时停止定时器
TCNT0 = 0x00; //计数器的初始值
OCR0  = 210; //设置比较值 设置为210 8M时钟 大概是38K 实现红外发射
TIMSK|= 0x02; //开比较匹配中断使能
}
 
 
void Timer2_Init(void)
{
TCCR2  = 0x00;              //停止定时器
TCNT2  = 203;               //初始值(1/8000000)*(255-203)=0.0000065
TIMSK |= 0x40; 
}
 
 
void Timer1_Init(void)
{
TCCR1A = 0x00;
TCCR1B = 0x0b;
OCR1AH = 0xf4;
OCR1AL = 0x24;
TIMSK |= 0x10;
}
 
 
 
 
 
 
void Usart1_Init(uint16 baud)
{
UCSRB=0;
//UCSRA为默认值
UBRRL=(FOSC/16/baud-1)%6;//UBRRH = ((uchar8 *)(&baud))[1];
UBRRH=(FOSC/16/baud-1)/256;//UBRRL = ((uchar8 *)(&baud))[0];
UCSRC |=(1<
UCSRC &= ~((1<
// UCSRC |=(3<
UCSRB |= (1<
}
 
 
 
 
//uchar8 Usart_Read(void)
//{
 
 
// UCSRB |= (1<
// loop_until_bit_is_set(UCSRA,RXC);//等待Usart成功接收
// return UDR;
//}
ISR(SIG_USART_RECV)
{
UCSRB &= ~(1<
UsartDataBuff=UDR;
 
 
UCSRB |= (1<
 
 
}
 
 
 
 
ISR(TIMER0_COMP_vect)
{
PORTD=(PIND&0x9b)|DoubleIRData[BetyCount];
TCCR2  = 0x01;
}
 
 
 
 
 
 
ISR(TIMER2_OVF_vect)
{
PORTD=PIND&0x9F;
TCCR2  = 0;
TCNT2  = 203;
BitCount++;
if(BitCount>=66)//波特率=1/(0.00002625S*66)=577
{
BetyCount++;
if(BetyCount>=20)//25
{
//TCCR0=0;
//TCCR2=0;
BetyCount=0;
}
BitCount=0;
}
}
 
 
ISR(TIMER1_COMPA_vect)
{
SYSCount=1;
}
 
 
void Usart_send(uchar8 data)
{
while(!(UCSRA&(1<
UDR=data;
}
 
 
int main(void)
{
MCUCR=0x00;
Port_Init();
Timer0_Init();
Timer1_Init();
Timer2_Init();
ADC_Init();
Usart1_Init(581);//581
sei();          //开全局中断关全中断cli()
TCCR0  = 0x09;
TCCR2  = 0x01;
while(1)
{
 
 
if(SYSCount==1)
{
Usart_send(UsartDataBuff);
SYSCount=0;
if(ChargeFlag==1)
{
PORTD|=(1<
PORTD&=~(1<
}
else
{
PORTD&=~(1<
PORTD|=(1<
}
if((PORTD&0x80)==0x80)//充电中
{
ADCCurrent1=ADC_Read(1); //电压检测 用
ADCCurrent3=ADC_Read(3); //选3通道 与电路不符 主要因为实验板上0通道损坏 所以跳线3通道修正时间:2014.5.28 
if(ADCCurrent3==0)//电流为0停止供电//0
{
PORTD&=~(1<
ChargeFlag=0;
}
}
else
{
ADCCurrent1=ADC_Read(1);
if(ADCCurrent1>=200)//电压大于开始供电//200
{
PORTD|=(1<
ChargeFlag=1;
}
else
{
ChargeFlag=0;
}
}
 
 
//UsartDataBuff=Usart_Read();
if(UsartDataBuff)
{
}
}
//i=((uchar8 *)(&k))[0];
//j=((uchar8 *)(&k))[1];
}
}
关键字:AVR  单片机  串口操作 引用地址:AVR单片机串口操作程序

上一篇:IAR使用时报错处理与AVR精确延时
下一篇:AVR atmega16协议的制定

推荐阅读最新更新时间:2024-03-16 13:51

基于SX单片机实现WebServer和网络协议栈
    摘要: 讨论UBICOM公司(原SCENIX公司)的SX52BD100单片机构建Webserver的具体方案;给出硬件构成框图,并分析每一部分的作用、完成功能以及软件流程图。为了突出这种单片机的虚拟外设的特点,特别详细地说明网络协议和协议栈的具体实现。     关键词: 网络单片机 协议栈 虚拟外设 信息家电 WebServer 前 言 Internt的日益普及,信息共享程度的不断提高,给工作和生活带来了极大的方便。现在,上网浏览对于人们来说是一件很平常的事情。不仅如此,架构一个WebServer,做自己的主页也是司空见惯的。一般情况下,人们通过一台上网的电脑来建立WebServer。在这里将讨论另
[应用]
一种基于单片机的实用在线式UPS电路详解
  UPS(UninterruptiblePowerSystem)交流 电源 越来越广泛地应用于国民经济的各个领域。本文将介绍一种实用的简单在线式UPS。    UPS电源 的基本结构   将220V电网电压经全桥整流提供直流是实际应用中最为广泛的变流方案,但会使电网产生严重畸变的非正弦电流而危害电网。较为理想的方法是采用功率因数校正措施。控制器采用功率因数校正控制芯片UC3855A/B。   市电-- 蓄电池 切换电路   它由两个迟滞比较器组成,市电经过整流,分压与由5V基准电压分压得到的电压相比较,输出接到51单片机4脚。   (1)当市电电压大于170V   51单片机当检测到4脚电平为高电平,市电工作指示灯亮起
[电源管理]
一种基于<font color='red'>单片机</font>的实用在线式UPS电路详解
AVR单片机ICCAVR应用的一些小技巧
1.在汇编里面位造作用SEIPORTA3,把PORTA的第三位置1, 在C里面,可以用&与|表达: PORTA=PORTA|0x08,简写为PORTA|=(0x08); PORTA=PORTB&(0xF7)简写为PORTA&=0xF7 以上是对寄存器的某一位操作,当然也可以同时操作几个位,|0x0F,则低四位置1; 在很多地方,如ATMEL的文档里我们会看到像TCCR1A|=(1 COM1A0);//A比较匹配, 这样的操作,这是怎么回事呢? 首先要知道 , 的意思,这是左移,右移操作,(A 3)是把A的二进制数向左移3位,即乘以2的三次方. COM1A0是TCCR1A的第6位,这是ATMEL给TCCR1A寄存器第6位取的名字,在
[单片机]
PIC16F877A单片机对24X24点点阵屏的驱动设计
最近终于有空更新了,花了几天时间,弄出个小东西,虽然有很多种实现方式在网上流传了,但我却从没有试过,乘有时间,也弄出了四种方式的显示,各位帮忙看看,哪里还有不好的地方,希不吝指教。 一。原理及仿真图 此种为从右往左显示。 此中为从左往右显示 此种为从下往上显示 此种为从上往下显示 原理图说明: 1.本实例采用微芯PIC16F877A单片机,此单片机适合初学者 2.点阵采用24X24点,左边为行线,采用U1-U3三个74LS373地址所存芯片,复用单片机RB端口。 右边为列线,采用U4-U6三个74LS373地址所存芯片,复用单片机RD端口。 3.单片机RC端口控制六片373的选通。 4.显示原理:24
[单片机]
PIC16F877A<font color='red'>单片机</font>对24X24点点阵屏的驱动设计
利用AT89S51单片机实现飞机发动机智能测量和显示系统的设计
引言 飞机飞行过程中,转速是需要测量的一个重要参数,通过测量喷气发动机转速,可以了解发动机的功率和推力,并可确定发动机所承受的运动负荷和能量负荷。测量发动机转速时必须把飞机发动机转轴的转速传送到座舱,供给飞行员读数,为实现飞机发动机转速远距离传输问题,目前飞机上采用三相交流发电机传感器,那么如何能准确的测量显示发动机的转速?本文提出了一种利用AT89S51单片机来实现对发动机转速进行智能测量和显示,不仅可提高发动机转速的测量精度,而且可提高系统的抗干扰能力。 1、 三相交流发动机工作原理 测量发动机转速的三相交流发电机传感器,其结构和原理示意图如图1所示,它由转子和定子组成。发电机的静子为星形连接的三相绕组;转子为两极永久磁铁
[单片机]
利用AT89S51<font color='red'>单片机</font>实现飞机发动机智能测量和显示系统的设计
日立单片机模糊控制开发平台及其应用
     摘 要: 介绍已开发成功的“日立单片机模糊控制开发平台”的主要功能。在该软件平台上可以方便地定义和调试一个复杂的模糊控制系统。模糊控制系统调试完成后,能够自动生成用c和汇编两种语言书写的模糊控制执行程序。给出的温度模糊控制系统示例的开发过程和实验,证明了该平台应用的有效性。     关键词: 模糊控制 开发平台 单片机应用     模糊控制在工业自动化中获得了广泛的应用。在一般的控制系统设计中,仿真技术被大量用来进行系统模拟调试,以期提高系统开发速度。然而,对模糊控制系统的通用性仿真手段却很鲜见,使得应用系统的开发效率较低。因此,开发一个模糊控制仿真平台具有现实的意义。在日立亚洲科技有限公司的鼎力
[工业控制]
初识畅学系列MSP430F149单片机开发板
1、畅学MSP430单片机核心板 畅学系列六合一MSP430单片机核心板板载贴片封装的MSP430F149单片机芯片,芯片IO全部引出2组,既可以直接插到畅学系列多功能开发学习板/实验箱底板直接扩展为多功能开发学习板,也可以单独作为一个MSP430最小系统核心板使用。 畅学系列六合一MSP430单片机核心板-标配一个MSP 430149单片机,核心板集成BSL下载器,一条USB线即可实现供电和BSL方式程序下载,还可以通过USB线实现串口通讯。。 板载BSL下载模块,可以方便的直接通过USB线在供电同时还可以下载程序。 板载BSL下载模块,还可以作为串口通讯模块使用,可以通过USB供电同时和PC机进行串口通
[单片机]
初识畅学系列MSP430F149<font color='red'>单片机</font>开发板
基于MAX195转换器和AT89C51单片机实现应用接口的设计
MAX195是16位逐次逼近方式的ADC。它将高精度、高速度、低电源功耗(消耗电流仅10μA)的关闭方式等性能结合在一起。内部校准电路对线性度与偏置误差进行校正,所以无需外部调整便可达到全部额定的性能指标。电容性的DAC结构使之具有特有的85kbps跟踪/保持功能,变换时间仅需9.4μs。三态串行数据输出及引脚可选的单极性(0~VREF)或双极性(-VREF~+VREF)的输入范围使之可广泛应用于便携式仪表、医用信号采集及多传感器测量等系统中。 1 MAX195引脚及说明 MAX195有16个引脚,其排列如图1所示。 2 MAX195转换原理及时序 MAX195片内含有电容性的数字模拟变换器(DAC),可对模拟输入进行特有
[单片机]
基于MAX195转换器和AT89C51<font color='red'>单片机</font>实现应用接口的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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