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

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; } }


相关文章:
ATmega128串口通信程序(中断方式).doc
ATmega128串口通信程序(中断方式)_信息与通信_工程科技_专业资料。ATmega128 串口通信程序(中断方式) 串口通信程序(中断方式) 2011-06-05 20:08:10| 分类: ...
ATmega128的中断系统_图文.ppt
1) MCU中断方式控制寄存器 ) 中断方式控制寄存器MCUCR 中断方式控制寄存器 MCU...ATmega128串口通信程序(... 4页 1下载券 基于ATmega128的无线数据... 3...
Atmega128外部中断程序.doc
Atmega128外部中断程序_信息与通信_工程科技_专业资料。//static
ATmega128USART_图文.ppt
Atmega128的USART ? 单片机的通信方式主要有两种:...? 单片机的串行接口是一个可编程的全双工串行通信...UDREn 标志可用来产生数据寄存器空中断。 复位后UD...
atmega128实用双串口通讯.pdf
Atmega128 实用串口通讯程序 1、 双串口异步通讯, USART0发送使能,接收使...中断方式 ---ISR(USART0_RX_vect) { unsigned char status,data,i; status=...
ATmega128在开发应用中应注意的问题.doc
2 路可编 程串行 UART 接口;主/从 SPI 串 行接口;带内部振荡器的可编程...用 ICCAVR 设置 ATmega128 中断方法与 Keil51 设置中断方法截然不同 , ...
atmega128L串口通信详解.pdf
Bit3-TXEN0 为发送使能.一般情况下,接收使用中断方式,所以使用接收结束中断使...*串口 0 测试程序 /*目标器件:ATmega128 /*晶振:RC 8MHZ /*编译环境:ICC...
ATmega128在开发应用中应注意的问题.doc
用 ICCAVR 设置 ATmega128 中断方法与 Keil51 设置中断方法截然不同,例如若需 要将 ATmega128串口 0 设置为中断接收,就必须在程序中做如下设置: #...
AVR ATMEGA128 串口简单好使程序.doc
方式,故没有使能中断 } void Usart0_transmit(unsigned char c) //查询方式...AVR模拟串口源程序 4页 2下载券 ATmega128串口通信程序(... 4页 1下载券...
ATmega128在开发应用中应注意的问题.doc
(I2C)串行接口;2 路可编程串行 UART 接口;主/从 SPI 串 编程看门狗定时器等...用 ICCAVR 设置 ATmega128 中断方法与 Keil51 设置中断方法截然不同,...
ATmega128特点及开发应用中应注意的问题.pdf
(I2C)串行接口;2 路可编程串行 UART 接口;主/从 SPI 串 编程看门狗定时器等...用 ICCAVR 设置 ATmega128 中断方法与 Keil51 设置中断方法截然不同,...
基于实时操作系统的ATmega128串行通信驱动程序设计_论文.pdf
基于实时操作系统的ATmega128串行通信驱动程序设计_...方法 :根据A Tmega128 微处 理器U SART 特点 ,...实现 串 口通信 中断服务与数据处理任务 间数据传 ...
ATmega128的SPI.pdf
串行三线 SPI 接口,可以方便的连接采用 SPI 通信...数据的有效方法是采用中断方式+数据缓存器的设计方法...主程序中首先对 ATmega128 的硬件 SPI 进行初始化...
AVR 单片机 串口通信 串行通讯 详细例程介绍.pdf
AVR 系列单片机的串行通讯实例 Atmega128 有两个串口...一般情况下,接收使用中断 方式,所以使用接收结束中断...} 在使用串口的程序中一般包含这些文件: #include ...
AVR串口通信初始化设置及例程.doc
RXEN0 为接收使能,Bit3-TXEN0 为发送使能 方式,所以使用接收结束中断使能. ...*串口 0 测试程序 */ /*目标器件:ATmega128 */ /*晶振:RC 8MHZ */ /*...
atmega128双串口程序.txt
atmega128串口程序_信息与通信_工程科技_专业资料。#include <iom128v.h> #...接收中断使能 SREG|=0x80;//sei() //全局中断开放 DDRE|=BIT(1); //...
AVR_128_spi串口通信程序.pdf
AVR_128_spi串口通信程序 - AVR 串口通信程序 RS232头文件 下面是 ATMEGA128的头文件 /*串口0的初始化*/ void Uart0_init(void) { UCS...
AVR 128 spi串口通信程序.doc
AVR 128 spi串口通信程序_信息与通信_工程科技_专业.../*串口0单字符发送,查询方式*/ void Uart0_sendbyte...先关接收中断 R_dat0=UDR0; //用变量接收串口1...
ATmega128串行接口SPI接口应用设计.txt
***ATmega128串行接口SPI接口应用设计(主机方式) *** *** *** *** 发表时间...在SPI中断服务程序中,先从SPDR中读一个 *** ***接收的字节存入接收数据缓...
mega128串口通讯测试程序.doc
mega128串口通讯测试程序_计算机软件及应用_IT/计算机...ATMEGA128 时钟: 8MHZ 日期: 2014.7.22 默认 9600...} // 数据接收【以 5 到 8 个数据位的方式接收...
更多相关标签: