×
单片机 > 单片机程序设计 > 详情

一个基于AVR单片机的串口通讯例程

发布时间:2020-08-24 发布时间:
|
此程序是应用了ATMega128芯片,是以查询方式发送,中断方式接受数据,有问题可以交流!希望对大家有帮助!

//ICC-AVR application builder : 2007-6-10 
// Target : M128
// Crystal: 7.3728Mhz
//作者:Caterpillar
#include
#include

//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9600 (0.0%)
// char size: 8 bit
// parity: Disabled
//*************************************************************begin
unsigned char data[16];
unsigned char data1,sampleNumber1,Datalength;
void uart0_init(void)//******串口初始化程序
{
 UCSR0B = 0x00; //disable while setting baud rate
 UCSR0A = 0x00;
 UCSR0C = 0x0E; //8位数据位,1位停止位
 UBRR0L = 0x2F; //波特率寄存器低8位  波特率为9600
 UBRR0H = 0x00; //波特率寄存器高4位
 UCSR0B = 0x98; //接受中断使能、接受使能、发送使能
}

#pragma interrupt_handler uart0_rx_isr:19//*****串口以中断方式接受数据
void uart0_rx_isr(void)
{
 //uart has received a character in UDR
 unsigned char j=0;
 CLI();
 data[0]=UDR0;
 if(data[0]==0x68)//**起始位检测
  {
   do
   {
    while(!(UCSR0A & (1<     sendchar(data[j]);
    j++;
    data[j]=UDR0;
    
    if(data[j]==0x16)//**结束位检测
     {
      Datalength=j;
      break;
     }
      
   }while(1);
  }
 Dataprocessing();//***********数据处理
 SEI();
}

void sendchar(unsigned char data1)//**********串口以查询方式发送数据
{
 while(!(UCSR0A & (1<  UDR0=data1;
 
}


void Dataprocessing(void)//**********接收到PC用串口传送过来的数据,进行相应的处理。
{

}


void main(void)
{
 init_devices();
 while(1);//*********死循环,等待中断触发
}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR单片机中RC电容触摸的感应原理解析