当前位置:首页 >> 信息与通信 >>

ATmega128串口通信程序(中断方式)


ATmega128 串口通信程序(中断方式) 串口通信程序(中断方式)
2011-06-05 20:08:10| 分类: 单片机程序编写 | 标签: |字号大中小 订阅 程序采用 IAR 系统编译,实现使用串口调试助手收发数据的功能 #include<iom128.h> #include<inavr.h> #include<string.h> #define INT8U unsigned char #define INT16U unsigned int #define UDRIE0 /* UART Buffer Defines */ #define UART0_RX_BUFFER_SIZE 128 #define UART0_TX_BUFFER_SIZE 128 /* Static Variables */ static unsigned char UART0_RxBuf[UART0_RX_BUFFER_SIZE]; static volatile unsigned char UART0_RxHead; static volatile unsigned char UART0_RxTail; static unsigned char UART0_TxBuf[UART0_TX_BUFFER_SIZE]; static volatile unsigned char UART0_TxHead; static volatile unsigned char UART0_TxTail; static unsigned char UART0_Flag=1; void USART_INIT( void ) { UBRR0H = 0x00; UBRR0L = 0x0B;//9600 at 1.8432M UCSR0A = 0x20; UCSR0B = 0xD8;//开接收结束中断,发送结束中断接收使能,发送使能 UCSR0C = 0x06;//异步模式,1 位停止位,8 位数据位 UDR0 = 0x00;//清空数据寄存器 UART0_RxTail = 0; UART0_RxHead = 0; UART0_TxTail = 0; UART0_TxHead = 0; __disable_interrupt();//关全局中断 } void Tran_Byte( INT8U sdata ) { if(UART0_Flag == 0) { UDR0 = sdata; 5

UART0_Flag = 1; } else { UART0_TxBuf[UART0_TxHead] = sdata; UART0_TxHead++; if(UART0_TxHead >= UART0_TX_BUFFER_SIZE) UART0_TxHead = 0; } __enable_interrupt(); } void Send_String( INT8U *string ) { INT8U temp; while(1) { temp = *string; Tran_Byte(temp); string++; if(*string == 0x00) break; } } INT8U HaveDataRxd( void ) { if(UART0_RxHead != UART0_RxTail) return 1; else return 0; } INT8U GetDataFromRxdBuf( void ) { INT8U temp; temp = UART0_RxBuf[UART0_RxTail]; UART0_RxTail ++ ; if( UART0_RxTail >= UART0_RX_BUFFER_SIZE ) { UART0_RxTail = 0 ; } return temp; }

//清空接收缓冲区。 void UART_ResetRxBuffer( void ) { UART0_RxHead = 0; UART0_RxTail = 0; } int main( void ) { DDRA = 0xFF;PORTA = 0xFF; DDRE = 0xFE; INT8U tab; USART_INIT(); __enable_interrupt();//开全局中断 while(1) { __delay_cycles(10000); while(!HaveDataRxd()); tab = GetDataFromRxdBuf(); __delay_cycles(10000); Tran_Byte(tab); } } #pragma vector=USART0_RXC_vect __interrupt void USART0_RX( void ) { INT8U data; INT8U status; data = UDR0; /* read the received data */ status = UCSR0A; if((status & 0x18) == 0x00) { UART0_RxBuf[UART0_RxHead] = data; UART0_RxHead ++; if(UART0_RxHead == UART0_RX_BUFFER_SIZE) UART0_RxHead = 0; } } #pragma vector=USART0_TXC_vect __interrupt void USRAT0_TX( void ) { INT8U temp; /* check if all data is transmitted */ if(UART0_TxHead != UART0_TxTail)

{ /* calculate buffer index */ temp = UART0_TxBuf[UART0_TxTail]; UDR0 = temp; UART0_TxTail ++; if(UART0_TxTail >= UART0_TX_BUFFER_SIZE) UART0_TxTail = 0; } else { UART0_Flag = 0; } }


相关文章:
AVR串口通信初始化设置及例程
RXEN0 为接收使能,Bit3-TXEN0 为发送使能 方式,所以使用接收结束中断使能. ...第十一章 AVR 串口通信 43页 1下载券 AVR 128 spi串口通信程序... 6页 1...
ATmega128在开发应用中应注意的问题
用 ICCAVR 设置 ATmega128 中断方法与 Keil51 设置中断方法截然不同 , 例如若需要将 ATmega128串口 0 设置为中断接收,就必须在程序中做如下设置: #...
AVR 128 spi串口通信程序
AVR 128 spi串口通信程序_信息与通信_工程科技_专业.../*串口0单字符发送,查询方式*/ void Uart0_sendbyte...先关接收中断 R_dat0=UDR0; //用变量接收串口1...
SPI串口程序
SPI串口程序_信息与通信_工程科技_专业资料。关于一...ATmega128 的 SPI 为硬件接口和传输完成中断申请, ...下面一段是 SPI 主机方式连续发送(接收)字节的例程...
AVR128实现12864串口通信并显示
AVR128实现12864串口通信并显示 //采用的单片机是 AVR128,本程序已通过上机调试...串口方式 //PSB 置高,并口方式 //初始化指令 #define CLEAR_SCREEN #define ...
mega128串口通讯测试程序
mega128串口通讯测试程序_计算机软件及应用_IT/计算机...ATMEGA128 时钟: 8MHZ 日期: 2014.7.22 默认 9600...} // 数据接收【以 5 到 8 个数据位的方式接收...
中断程序
AVR 外部中断范例 interrupt ATmega128 开 单片机实验...表示方法:int0_isr 有一个与之对应的应用程序 ...更详细的内容,AVR 外部中断,时钟中断,串行通信,IIC...
基于ATmega128l的大容量mp3播放器
中断 程序结构的控制程序、上电复位和可编程的低...采用集成 I2S 的音频输出方式,可 方便地与 DAC3550...23页 免费 atmega128L串口通信详解 8页 1下载券©...
ATmega_128常用程序例子
ATmega_128常用程序例子_电子/电路_工程科技_专业资料。流水灯,AD转换数码管显示,读写EEPROM,定时器PWM,串口通信,外部中断等。ATMEGA128 相关例程 1、流水灯 /* ...
AVR编程2:串行中断的接收和发送
atmega128中断向量表 2页 免费 串口中断 2页 免费 AVR中断向量表 1页 免费 红外 18页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,...
更多相关标签: