(1)sprintf的用法
sprintf(temperature, (char *)"%dC", (INT8)avgTemp);
串口中输入一个换行符:UartTX_Send_word(0x0A);
(2)串口函数集
#include
#include "uart.h"
#include "lcd.h"
#include "stdlib.h"
uint8 buff[DATABUFF_SIZE]; //数据缓冲区
uint8 u8Index = 0; //数据缓冲区的下标
void initUart()
{
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0_2-P0_5,用作外围功能(0:通用I/O(reset),1:外围功能)
U0CSR |=0x80; //USART 0 control and state, bit7-> 0:spi模式, 1:UART模式
U0BAUD = 59;
U0GCR = 8; //默认是9600
UTX0IF = 1; //USART0 TX 中断标志挂起
U0CSR |= 0x40; //允许接收
IEN0 |= 0x84; //开总中断,开接受中断
// buff = (uint8 *)malloc(DATABUFF_SIZE*sizeof(uint8));
}
void setBaud(uint32 baudrate)
{
switch(baudrate)
{
case 2400:
U0BAUD = 59; U0GCR = 6; break;
case 4800:
U0BAUD = 59; U0GCR = 7; break;
case 9600:
U0BAUD = 59; U0GCR = 8; break;
case 14400:
U0BAUD = 216; U0GCR = 8; break;
case 19200:
U0BAUD = 59; U0GCR = 9; break;
case 28800:
U0BAUD = 216; U0GCR = 9; break;
case 38400:
U0BAUD = 59; U0GCR = 10; break;
case 57600:
U0BAUD = 216; U0GCR = 10; break;
case 76800:
U0BAUD = 59; U0GCR = 11; break;
case 115200:
U0BAUD = 216; U0GCR = 11; break;
case 230400:
U0BAUD = 216; U0GCR = 12; break;
default:
U0BAUD = 59; U0GCR = 8; break; //默认是9600
}
}
void set_buff_size(uint8 len)
{
// free(buff);
// buff = (uint8 *)malloc(len*sizeof(uint8));
}
void uart_send_string(uint8 *data, uint8 len)
{
int i;
for(i=0;i {
U0DBUF = *data++;
while(UTX0IF == 0); //未发送完成为0,当发送完毕后设置为1
UTX0IF = 0; //手动清除发送完成标识
}
}
void uart_send_word(char word)
{
U0DBUF = word;
while(UTX0IF == 0);
UTX0IF = 0;
}
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0;
//receive_handler(0,null);
receive_lcd();
}
void receive_lcd()
{
buff[u8Index] = U0DBUF;
if(buff[u8Index]=='#' || u8Index >=(DATABUFF_SIZE-1))
{
U0CSR &=~0x40; //发送数据的时候关闭接收数据功能
uart_send_string(buff,u8Index+1);
U0CSR |=0x40; //开启接受数据功能
ClearScreen();
Print8(2,0,buff,1);
clearArr(buff,'\0',DATABUFF_SIZE);
u8Index = 0;
}
else u8Index++;
}
void receive_handler(uint8 n, uint8 *pCdata)
{
//接收到数据后的处理
//uint8 data = U0DBUF;
*(buff+u8Index) = U0DBUF; //进入缓冲区
if(*(buff+u8Index) == '#' || u8Index>=(DATABUFF_SIZE-1))
{
U0CSR &=~0x40; //发送数据的时候关闭接收数据功能
uart_send_string(buff,u8Index+1);
U0CSR |=0x40; //开启接受数据功能
u8Index = 0;
}
else u8Index++;
}
void clearArr(uint8 *data, uint8 ch, uint32 len)
{
uint32 i;
for( i=0;i *(data+i) = ch;
}
阅读(5234) | 评论(0) | 转发(0) |