打印
[AVR单片机]

一个ATMEGA串口中断接收程序!

[复制链接]
6866|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huamunv|  楼主 | 2009-10-31 23:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AVR单片机串口中断接收程序,实现一个简单的功能,串口中断接收数据,不论数据长短,然后将数据的个数返回给CPU!
程序如下:
#include <avr/io.h>   
#include <avr/interrupt.h>   
#define   fosc    11059200                                           //时钟频率  
#define   baud    9600                                               //串口波特率  
#define uint unsigned int   
#define uchar unsigned char   
uint buf[510];  
uchar flag=0;   
uint i=0,k=0;j=0;  

void mdelay(unsigned int ms)                                         //0.1ms delay  
{  
  unsigned int m=0;  
  for(;ms>0;ms--)  
  {  
      for(m=0;m<56;m++)  
  {;}  
}  
}  

void uart0_init(void)                                                //串口初始化  
{  
UCSR0B = 0x00;                                                  //disable while setting baud rate  
UCSR0A = 0x00;  
UCSR0C =(1<<UPM01)|(1<<UCSZ01)|(1<<UCSZ00);                     //8bit+1bit stop(偶校验)  
//UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);                                   //无校验  
UBRR0L=(fosc/16/(baud+1))%256;  
UBRR0H=(fosc/16/(baud+1))/256;                                  //波特率设置  
UCSR0B=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);  
}  
void putchar0(unsigned char c)  
{  
    while (!(UCSR0A&(1<<UDRE0)));  
      UDR0=c;     
}  
SIGNAL(SIG_OVERFLOW0)   
{   
  TCCR0=00;//关中断  
  flag=1;   
}   
SIGNAL(SIG_USART0_RECV)  
{  
uchar data;   
TCCR0=00;   //收到数据关闭中断  
data=UDR0;  
buf=data;  
i++;  
TCNT0=224;//收完数据开定时中断  
           TCCR0=0x06;     
}  

int main(void)   
{   
  DDRE  = 0x3C;  
  PORTE = 0xFF;   
  DDRA=0xFF;   
  PORTA=0xEF;   
  DDRB=0x0f;   
  PORTB=0xff;     
  TIMSK=0x01;  
  uart0_init();   
  sei();  
   while(1)   
   {     
      if(flag==1)  
  {  
   cli();  
   for(j=0;j<i;j++)  
   {  
     putchar0(buf[j]);  
   }  
   flag=0;  
   i=0;  
   sei();  
  }         
    }   
}        

相关帖子

沙发
god_like| | 2009-11-2 08:36 | 只看该作者
帮顶

使用特权

评论回复
板凳
Karlshen| | 2009-11-3 16:27 | 只看该作者
感谢楼主

使用特权

评论回复
地板
laslison| | 2009-11-18 23:02 | 只看该作者
支持楼主!

使用特权

评论回复
5
suoma| | 2009-11-19 20:20 | 只看该作者
老程序了

使用特权

评论回复
6
huamunv|  楼主 | 2009-12-1 13:16 | 只看该作者
姜还是老的辣:lol

使用特权

评论回复
7
wangwo| | 2009-12-1 17:35 | 只看该作者
进来看看···

使用特权

评论回复
8
donkey89| | 2009-12-2 08:40 | 只看该作者
我的已经写成驱动了,自己写写这类东西还真有好处.

使用特权

评论回复
9
huamunv|  楼主 | 2009-12-3 23:18 | 只看该作者
8# donkey89
LS挺厉害的嘛

使用特权

评论回复
10
z055795694| | 2009-12-22 22:16 | 只看该作者
学习了

使用特权

评论回复
11
xiaoxin1986| | 2009-12-22 23:53 | 只看该作者
好东西,支持了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

730

帖子

1

粉丝