?? uart.c
字號:
/**********************************************************************
UART.c file
LPC213X的串口函數(shù)
本程序只供學(xué)習(xí)使用,不得用于其它任何用途,否則后果自負(fù)。
ARM_OS_main.c file
LPC213x上的操作系統(tǒng)——ARM_OS
作者:heciang
聯(lián)系電話:13811129591
QQ:176780142
Email:heciang@126.com
建立日期:2006-5-1
修改日期:2006-5-15
最后修改時間:2006-08-25
版本:V1.0
Copyright(C) Computer-lov 2006-2016
All rights reserved
**********************************************************************************************/
**********************************************************************/
#include "CPU.H"
#include "My_type.h"
#include "UART.H"
//////////////////////////////////////////////////////////////////////
void UART_init(void)
{
PINSEL0 = 0x00000005; //設(shè)置串口0的相應(yīng)引腳
U0IER=0; //禁止串口0所有中斷
U0LCR = 0x83; //8個數(shù)據(jù)位,無奇偶校驗(yàn),1個停止位,DLAB=1
#define Fpclk (5*11059200)/*Pclk為5*11059200Hz*/
#define BitRate 57600 /*波特率設(shè)置為57600bps*/
U0DLM=(Fpclk/16/BitRate)/256;
U0DLL=(Fpclk/16/BitRate)%256;
U0LCR = 0x03; // DLAB = 0
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////往串口0發(fā)送一字節(jié)數(shù)據(jù)//////////////////////////////
void send_a_byte(uint8 a_byte)
{
while (!(U0LSR & 0x20)); //等待發(fā)送完畢
U0THR=a_byte;
}
//////////////////////////////////////////////////////////////////////
/////////////////////////從串口0讀取一字節(jié)數(shù)據(jù)//////////////////////////////////
/*int get_a_byte(void) //
{
while (!(U0LSR & 0x01));
return (U0RBR);
}*/
//////////////////////////////////////////////////////////////////////
////////////////////////////// 發(fā)送一個字符串 ///////////////////////////////////////////
//////////////////入口參數(shù): s-要發(fā)送的字符串的指針(字符串長度不得大于255)/////////////
///////////////////////////////////// newline-是否需要換行 0-不換行 非0-換行////////
void prints(uint8 * s,uint32 newline)
{
unsigned char i;
i=0;
while(s[i]!=0) //判斷字符串是否結(jié)束
{
while (!(U0LSR & 0x20)); //等待發(fā)送完畢
U0THR=s[i];
i++; //移到下字節(jié)
}
if(newline) //如果需要換行
{
send_a_byte(13);
send_a_byte(10); //發(fā)送回車換行
}
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
void cls(void)
{
send_a_byte(0x0C); //超級終端清屏指令
send_a_byte(0x0C);
}
//////////////////////////////////////////////////////////////////////////////////
//轉(zhuǎn)換成十六進(jìn)制時用的表
const uint8 HEX_TABLE[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//////////////////////////將一個16位的整數(shù)按十六進(jìn)制發(fā)到串口/////////////////////////////////
void print_uint16(uint16 number)
{
send_a_byte('0'); //發(fā)送0x
send_a_byte('x');
send_a_byte(HEX_TABLE[(number>>12) & 0x0F]); //依次發(fā)送各部分
send_a_byte(HEX_TABLE[(number>>8) & 0x0F]);
send_a_byte(HEX_TABLE[(number>>4) & 0x0F]);
send_a_byte(HEX_TABLE[(number) & 0x0F]);
send_a_byte(' ');
}
//////////////////////////////////////////////////////////////////////////////////
/////////////////////////將一個32位的整數(shù)按十進(jìn)制發(fā)送到串口/////////////////////////////
void print_uint32(uint32 number)
{
uint8 buf[12];
uint32 i;
for(i=0;i<10;i++) //轉(zhuǎn)換成字符串
{
buf[9-i]=(number%10)+'0';
number/=10;
}
for(i=0;i<9;i++) //將前面的0轉(zhuǎn)換成空格
{
if(buf[i]=='0')
{
buf[i]=' ';
}
else
{
break;
}
}
buf[10]=' ';
buf[11]=0; //字符串結(jié)束符
prints(buf,0);
}
//////////////////////////////////////////////////////////////////////////////////////////
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -