AVR简单的串口通信程序
/***********************************************/
/************AVR USART串口调试****************/
/************ClimberWin 2008.6.29**************/
/*CPU:ATMEGA32L 4MHZ 外部晶振(熔断位需要先配置好外部晶振)*/
/*说明:AVR串口是通过UDR发送出去的,类似于51单片机的SBUF*/
/*程序功能:能够通过串行数据发送给PC机0x12数据,接收上位机数据并且+1后发送回上位机*/
#include avr/io.h> //AVR I/O口定义头文件
#include // 延时头文件调用
#include interrupt.h> // 中断头文件调用
#define uchar unsigned char
//引脚定义
#define AVR_RXD 0 //PD0 RXD
#define AVR_TXD 1 //PD1 TXD
//常量定义
#define BAUDRATE 9600 //波特率定义
uchar UART_MID; //定义一个缓存区数据临时存储地址
/*******************串口接收中断服务程序*************************/
SIGNAL(SIG_USART_RECV) //串口中断服务程序
{
UART_MID=UDR; // 从缓冲器中读取数据到UART_MID,临时存放
UDR=UART_MID+1; //+1后发送回去数据
}
/****************************************************************/
void init_USART(void)//USART 初始化
{
//USART 9600 8, n,1 PC上位机软件(超级终端等)也要设成同样的设置才能通讯
UCSRC = (1 //异步,8位数据,无奇偶校验,一个停止位,无倍速 // UBRR=(F_CPU/BAUDRATE/16-1) UBRRL= (F_CPU/BAUDRATE/16-1)%256; UBRRH= (F_CPU/BAUDRATE/16-1)/256; UCSRA = 0x00; //工作在异步正常模式下 U2X=0 UCSRB = (1 //使能接收中断,使能接收,使能发送 } int main(void) { DDRD =(1 PORTD =0xFF; init_USART(); //初始化串口 UDR=0X12; //向串口发送数据 sei(); //中断使能(avr/interrupt.h 中调用) while (1) { //等待接收,接收后跳转到中断程序 } }
AVR串口通 相关文章:
- AVR串口通讯的详解(11-24)
- AVR串口通信(11-13)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)