《AVR单片机GCC程序设计》

源代码在线查看: usart.c

软件大小: 1316 K
上传用户: tsdtz
关键词: AVR GCC 单片机 程序设计
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*
					文件名:usart.c
					功  能:uart通信接口
					C P U :	ATMega8
					编  译: WinAVR-20040404
					速  度:外部4MHz
					
					更改记录:
					2004-06-22       
				*/
				
				#include 
				#include  
				#include 
				
				#include "usart.h"
				#include "lp2004.h"
				
				static uchar g_bTxdPos,g_bRxdPos,g_bTxdLen,g_bRxdLen;
				//UART缓冲区,是数据包发送/接收缓冲区
				static uchar g_aUartBuf[LP_PACKET_SIZE];
				
				void DelayMs(uint t);
				
				//接收完成一字节中断
				SIGNAL(SIG_UART_RECV)
				{
					uchar c=UDR; 
					if(g_bRxdLen>0)
					{
						g_aUartBuf[g_bRxdPos++]=c;
						g_bRxdLen--;
					}
				}
				
				//发送完成一字节中断
				SIGNAL (SIG_UART_TRANS)
				{
					if(--g_bTxdLen>0)
						UDR=g_aUartBuf[++g_bTxdPos];
					else
						g_bTxdPos=0;
				}
				
				//从UART缓冲区发送指定长度的数据
				void UartSend(uchar len)
				{
					g_bTxdPos=0;
					g_bTxdLen=len;
					UDR=g_aUartBuf[0];
					while(g_bTxdLen>0)
						DelayMs(1);
				}
				
				//接收指定长度数据到UART缓冲区
				void UartRecv(uchar len,uchar waitflag)
				{
					g_bRxdPos=0;
					g_bRxdLen=len;
					
					if(waitflag)
					{ 
						while(g_bRxdLen>0)
							DelayMs(1);
					}
				}
				
				//检测异步接收是否完成
				uchar UartIsRecvComplate(void)
				{
					return !g_bRxdLen;
				}
				
				//获取UART数据缓冲区
				uchar *UartGetBuffer(void)
				{
					return g_aUartBuf;
				}
				
				//初始化通用异步串行通信模块
				void UartInit(void)
				{
					uchar i;
					
					for(i=0;i						g_aUartBuf[i]=0;
					g_bTxdPos=0;
					g_bRxdPos=0;
					g_bTxdLen=0;
					g_bRxdLen=0;
					
					UCSRB=_BV(RXCIE)|_BV(TXCIE)|_BV(RXEN)|_BV(TXEN);
					UBRRH=0;
					UBRRL=25;//9600 baud 6MHz:38  4MHz:25
				}
							

相关资源