单片机
返回首页

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

2016-10-21 来源:eefocus

此程序是应用了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);//*********死循环,等待中断触发
}

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

  • SOC系统级芯片设计实验

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

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

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

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

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • RS-485基础知识:处理空闲总线条件的两种常见方法

    相关电子头条文章