⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rs232.c

📁 MCU为:ATMGEA128
💻 C
字号:
//ICC-AVR application builder : 2006-12-19 13:47:11
// Target : M128
// Crystal: 1.0000Mhz
//**************************************************************
//示例:(接口函数)
//TransmitByte(0x11);    缓冲区256字节
//ReceiveByte(0x11);     缓冲区256字节
//可用于ISP的测试口;
#include "include.h"

//变量定义******************************************************
// USART Buffer Defines */
#define USART_RX_BUFFER_SIZE 256 /* 1,2,4,8,16,32,64,128 or 256 bytes */
#define USART_RX_BUFFER_MASK ( USART_RX_BUFFER_SIZE - 1 )
#define USART_TX_BUFFER_SIZE 256/* 1,2,4,8,16,32,64,128 or 256 bytes */
#define USART_TX_BUFFER_MASK ( USART_TX_BUFFER_SIZE - 1 )
#if ( USART_RX_BUFFER_SIZE & USART_RX_BUFFER_MASK )
#error RX buffer size is not a power of 2
#endif

/* Static Variables */
static unsigned char USART_RxBuf[USART_RX_BUFFER_SIZE];
static volatile unsigned char USART_RxHead=0;
static volatile unsigned char USART_RxTail=0;
static unsigned char USART_TxBuf[USART_TX_BUFFER_SIZE];
static volatile unsigned char USART_TxHead=0;
static volatile unsigned char USART_TxTail=0;
//变量定义***************************************************END

//***********************************************************
//UART1 initialize
// desired baud rate:2400
// actual baud rate:2404 (0.2%)
// char size: 8 bit
// parity: Disabled
void uart1_init(void)
{
 UCSR1B = 0x00; //disable while setting baud rate
 UCSR1A = 0x00;
 UCSR1C = 0x06;
 UBRR1L = 0x19; //set baud rate lo
 UBRR1H = 0x00; //set baud rate hi
 UCSR1B = 0xD8;
}

//***********************************************************
#pragma interrupt_handler uart1_rx_isr:31
void uart1_rx_isr(void)
{
unsigned char data;
unsigned char tmphead;
data = UDR1; /* read the received data */
tmphead = ( USART_RxHead + 1 ) & USART_RX_BUFFER_MASK;/* calculate
buffer index */
USART_RxHead = tmphead; /* store new index */
if ( tmphead == USART_RxTail )
{
return;/* ERROR! Receive buffer overflow, you can use
flux cortorl */
}
USART_RxBuf[tmphead] = data; /* store received data in buffer */
 //uart has received a character in UDR
}
//发送中断
#pragma interrupt_handler uart1_tx_isr:33
void uart1_tx_isr(void)
{
unsigned char tmptail;
if ( USART_TxHead != USART_TxTail )/* check if all data istransmitted */
{
tmptail = ( USART_TxTail + 1 ) & USART_TX_BUFFER_MASK;/*calculate buffer index */
USART_TxTail = tmptail; /* store new index */
UDR1 = USART_TxBuf[tmptail]; /* start transmition */
}
else
{
UCSR1B &= ~(1<<UDRIE1); /* disable UDRE interrupt */
}
}

//***********************************************************
/* 读取数据函数 */
unsigned char ReceiveByte( void )
{
unsigned char tmptail;

while ( USART_RxHead == USART_RxTail ) /* wait for incomming data */
;
tmptail = ( USART_RxTail + 1 ) & USART_RX_BUFFER_MASK;/* calculate
buffer index */
USART_RxTail = tmptail; /* store new index */
return USART_RxBuf[tmptail]; /* return data */
}

//向串口发送一字节函数
void TransmitByte( unsigned char data )
{
unsigned char tmphead;
tmphead = ( USART_TxHead + 1 ) & USART_TX_BUFFER_MASK; /* calculatebuffer index */
while ( tmphead == USART_TxTail )/* wait for free space in buffer */
;
USART_TxBuf[tmphead] = data; /* store data in buffer */
USART_TxHead = tmphead; /* store new index */
UCSR1B |= (1<<UDRIE1); /* enable UDRE interrupt */
}


void T_P(void)
{
unsigned int i;
unsigned int m,n;

for(i=0;i<256;i++)
TransmitByte(t103_read(0x50, i));
//for(i=0;i<16;i++)
//TransmitByte(0xFF);
for(m=0;m<100;m++)for(n=0;n<1000;n++);

//TransmitByte(0x00);
for(i=0;i<256;i++)
TransmitByte(t103_read(0x52, i));
//for(i=0;i<16;i++)
//TransmitByte(0xFF);
for(m=0;m<100;m++)for(n=0;n<1000;n++);

//TransmitByte(0x00);
for(i=0;i<256;i++)
TransmitByte(t103_read(0x53, i));
//for(i=0;i<16;i++)
//TransmitByte(0xFF);
for(m=0;m<100;m++)for(n=0;n<1000;n++);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -