IAR For AVR 串口中断接收

发布者:LogicLeaper最新更新时间:2016-10-06 来源: eefocus关键字:IAR  AVR  串口  中断接收 手机看文章 扫描二维码
随时随地手机看文章
应用芯片: AT Mega16               晶振: 7.3728MHz      

代码文件: uart_int.c

                         |_________DELAY.H

##############################################

DELAY.H :

#ifndef __IAR_DELAY_H
#define __IAR_DELAY_H

#include

#define XTAL 7.3728                    //可定义为你所用的晶振频率(单位Mhz)


#define delay_us(x) __delay_cycles ( (unsigned long)(x * XTAL) ) 
#define delay_ms(x) __delay_cycles ( (unsigned long)(x * XTAL*1000) )
#define delay_s(x) __delay_cycles ( (unsigned long)(x * XTAL*1000000) )

#endif

 

uart_int.c :

#include
#include "delay.h"
#define uchar unsigned char 
#define uint unsigned int

uchar c;

//###########################################################
/*串口初始化函数*/
void Uart_Init(void)
{                         
    UCSRB = (1<     UCSRC = (1<

    UBRRH=0x00;                                                             //设置波特率寄存器低位字节
    UBRRL=47;                                                                   //9600    //设置波特率寄存器高位字节 
    
    SREG_I = 1;                                                                //开总中断
    DDRD_Bit1=1;                                                             //配置TX为输出(很重要)
}
//###########################################################
/*发送一个字符数据,查询方式*/
void Uart_Transmit(uchar data)
{
     while(!(UCSRA&(1<                                                                                          //也可以写成 while(UCSRA_UDRE==0);   
     UDR = data;                                                               // 发送数据
}
//###########################################################
/*中断接收*/
#pragma vector=USART_RXC_vect 
__interrupt void USART_RXC_Server(void) 

UCSRB_RXCIE = 0;                                                        //关串口中断
c = UDR ;                                                                       //将收到的值赋值给变量
Uart_Transmit(c);                                                          //发给串口以检测对错
UCSRB_RXCIE = 1;                                                         //开串口中断

//###########################################################
/*主函数*/ 
void main(void)
{
Uart_Init();
delay_us(20);                       //串口初始化后,必须延时20us以上才能发送数据,否则会出现错误
Uart_Transmit(0x64);

while(1)
{ ; }                                        //此时可以用串口助手发送字符,然后可以正确接收
}

关键字:IAR  AVR  串口  中断接收 引用地址:IAR For AVR 串口中断接收

上一篇:IAR For AVR 两线串行接口 TWI 应用
下一篇:IAR For AVR 定时器溢出中断 (使用小结)

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

串口服务器在广播电视发射机房的应用
随着广播电视发射机技术的不断提高,发射机的各个部件的工作状况都能实现自动监测与控制。收集和存储发射机设备的运行数据,以各种形式显示数据,方便值机人员监控设备的工作状态;手动、自动生成数据报表;异常、故障报警与自动记录;值机人员日志管理,记录设备的维护信息;数据存入数据库,提供完善的查询和报表功能;控制发射机开关机、调整设备的运行参数。发射机房环境监测,遥控遥测等多种设备的各种参数进行实时监测。诊断和处理故障,记录和分析相关数据,从而实现少人或无人值守的目的,并对设备进行集中监控、集中维护和集中管理。   以往做法是主机通过转换器直接与设备相连,如图(1)。   一般主机自带的串口数量非常有限, 所能控制的设备数量也非常有限
[模拟电子]
<font color='red'>串口</font>服务器在广播电视发射机房的应用
AVR的EEPROM简单实验
#include iom16.h #include intrinsics.h #define uchar unsigned char #define uint unsigned int __flash uchar seg ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; __flash uchar tab ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; #define EEWE 1 #define EERE 0 #define EEMWE 2 #define k1 PIND_Bit4 //地址变化键 #define
[单片机]
AVR单片机位操作C语言编程的执行
  一、常规方法      AVR 单片机 的各类教材或编程应用参考资料,对介绍的端口位操作方法不外乎宏定义及整体和某个常量相或、相与来实现某一单个位状态的改变。如:   PORT&=-(1《1);等价于:PORTB&=oxfd;作用是PB1清零而其余位不变。与之类似的还有:   PORTBl=(1《4);PB4置位,其余位不变。   PORTB=(k《4);PB4翻转,其余位不变。   上述方法,无论是常量值参与还是移位操作,用起来总嫌麻烦,不够直观,且具体常量值还需人工推算,易出错。移位操作生成的目标代码偏大,在大量运用时,占用系统内存或flash空间,执行效率低。   以实际运用效果来看,宏定义比较好。也偏好运用宏定义。
[单片机]
<font color='red'>AVR</font>单片机位操作C语言编程的执行
AVR-atmega16 BOOTLoader 程序
本程序参照马潮mega128的编写。可支持485或232接口。变异软件ICCAVR,上位机软件应用超级终端或avrubd等,Xmodem,9600,8,1,n #include iom16v.h #include macros.h #include eeprom.h #define SPM_PAGESIZE 128 //M16的一个Flash页为128字节(64字),共128页 #define BAUD 9600 //波特率采用9600bps #define CRYSTAL 14745600 //系统时钟 ?? M Hz //计算和定义M16的波特率设置参数 #define BAUD_SETTING (
[单片机]
STM32 串口初始化时的BUG
单片机:stm32f103vet6 平台:野火STM32开发板 问题描述:串口在初始化(还未发送任何数据)的时候,PC端会接收到一个字节的乱码 状态:未解决 我调试串口的步骤一般是先初始化UART,然后printf重定向,最后在串口助手里面打印出一些数字。调试还算顺利,成功打印出一行数据。但是每次复位的时候,第一个字符之前都有会多出一个乱码,起初以为是TC置1的问题,改了好几遍都没有效果,后来想一想,TC置1的问题是发送的第一个字符丢失,现在的问题是,第一个字符不丢失,而是第一个字符前出现一个乱码。 串口助手设置十六进制显示,发现在最开始的时候会打印一个字符0xFE。 单步调试发现在串口初始化前的GPIO初始化USART1的TXD
[单片机]
AVR单片机的特性及功能全面解析
高可靠性、功能强、高速度、低功耗和低价位 , 一直是衡量单片机性能的重要指标,也是单片机占领市场、赖以生存的必要条件。 早期 单片机主要由于工艺及设计水平不高、功耗高和抗干扰性能差等原因,所以采取稳妥方案:即采用较高的分频系数对时钟分频,使得指令周期长,执行速度慢。以后的CMOS单片机虽然采用提高时钟频率和缩小分频系数等措施,但这种状态并未被彻底改观(51以及51兼容)。此间虽有某些精简指令集单片机(RISC)问世,但依然沿袭对时钟分频的作法。 AVR单片机的推出,彻底打破这种旧设计格局,废除了机器周期,抛弃复杂指令计算机(CISC)追求指令完备的做法;采用精简指令集,以字作为指令长度单位,将内容丰富的操作数与操作码安排在
[单片机]
<font color='red'>AVR</font>单片机的特性及功能全面解析
利用AVR的输入捕捉进行红外解码
使用AVR的输入捕捉可以对组码进行有效地区分,这里是对红外接收头接收到遥控器的码型进行解码,也可以扩展到其他的应用领域。 关于红外的基本知识参看下面的参考文章。需要说明的是红外的数据端口电源最好加10uf滤波电容,然后数据引脚加上1K限流电阻。 硬件平台:ATMega16-16PU 红外接收头4338 康佳遥控器 编译器: IAR For AVR 代码: /*================START==================*/ #include iom16.h #include intrinsics.h #include comp_a90.h /**************************
[单片机]
AVR单片机简单计算器的Proteus仿真实现+源码
单片机源程序如下: #include mega16.h #include 1602.h #include key.h float k1,k2; //记录最终输入运算的两个数 uint one,two,three,four; //记录每次输入的数字 uint flag; //计数标志位 uint flag1,flag2; //第一个数 第二个数 完成标志位 uint flag3;//记录加减乘除标志位 long Result; //最后运算的结果 void main() { init(); //液晶初始化 // write_com(0x80+15
[单片机]
<font color='red'>AVR</font>单片机简单计算器的Proteus仿真实现+源码
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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