Chinaunix首页 | 论坛 | 博客
  • 博客访问: 186586
  • 博文数量: 50
  • 博客积分: 2567
  • 博客等级: 少校
  • 技术积分: 495
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-14 10:44
文章分类

全部博文(50)

文章存档

2011年(3)

2010年(29)

2009年(11)

2008年(7)

我的朋友

分类: 嵌入式

2010-07-23 23:00:52

(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;
}
 
阅读(5119) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~