单片机
返回首页

IAR For AVR 串口中断接收

2016-10-06 来源:eefocus

应用芯片: 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)
{ ; }                                        //此时可以用串口助手发送字符,然后可以正确接收
}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

最新器件
精选电路图
  • CCD图像传感器在微光电视系统中的应用

  • 光控音效发生器电路

  • 非常简单的150W功放电路图

  • 分享一个电网倾角计电路

  • 电谐波图形均衡器示意图

  • 一种构建12V和230V双直流电源的简单方法

    相关电子头条文章