?? main.c
字號:
// 智林Z213x/4x開發板試驗程序
// 串口發送試驗
// 劉笑然
// 智林測控技術研究所
// www.the0.net
// 2006.12.1
#include <stdio.h>
#include "LPC214x.H" /* LPC21xx definitions */
/*----------------------------------------------------------*\
| TYPE DEFINE |
\*----------------------------------------------------------*/
typedef char S8;
typedef unsigned char U8;
typedef short S16;
typedef unsigned short U16;
typedef int S32;
typedef unsigned int U32;
typedef long long S64;
typedef unsigned long long U64;
typedef unsigned char BIT;
typedef unsigned int BOOL;
volatile U8 U0IrqFlag = 0;
U8 U0RcvChar;
/*----------------------------------------------------------*\
| Delay ns |
\*----------------------------------------------------------*/
void DelayNS (U32 dly) {
U32 i;
for ( ; dly>0; dly--)
for (i=0; i<5000; i++);
}
/*----------------------------------------------------------*\
| UART0 IRQ |
\*----------------------------------------------------------*/
void UART0IRQ(void) __irq {
if ((U0IIR & 0x0F) == 0x04) {
U0IrqFlag = 1; // 設置接收到新的數據標志
U0RcvChar = U0RBR; // 讀取FIFO的數據,并清除中斷
}
VICVectAddr = 0x00; // 中斷處理結束
}
/*----------------------------------------------------------*\
| UART0 Initial |
\*----------------------------------------------------------*/
void UART0_init(void) {
unsigned short int fdiv;
PINSEL0 |= 0x00000005; // 設置I/O連接到UART0
U0LCR = 0x83; // DLAB = 1,可設置波特率
fdiv = (60000000 / 16) / 9600; // 設置波特率
U0DLM= fdiv/256;
U0DLL = fdiv%256;
U0LCR = 0x03;
U0FCR = 0x01; // 使能FIFO,并設置觸發點為1字節
U0IER = 0x01; // 允許RBR中斷,即接收中斷
/* 使能UART0中斷 */
VICIntSelect = 0x00000000; // 設置所有的通道為IRQ中斷
VICVectCntl0 = 0x20 | 0x06; // UART0分配到IRQ slot0,即最高優先級
VICVectAddr0 = (U32)UART0IRQ; // 設置UART0向量地址
VICIntEnable = 1 << 6; // 使能UART0中斷
}
/*----------------------------------------------------------*\
| UART0 Send Char |
\*----------------------------------------------------------*/
void UART0_PutCh(unsigned char Ch) {
U0THR = Ch; // 發送數據
while( (U0LSR&0x40)==0 ); // 等待數據發送完畢
}
int d=10;
/*----------------------------------------------------------*\
|Change UART0 Send Char |
\*----------------------------------------------------------*/
void Change(unsigned int num)
{ int i;
unsigned int bit[5];
bit[0]=num/10000+'0';
bit[1]=(num%10000 )/1000+'0';
bit[2]=((num%10000)%1000)/100+'0';
bit[3]=((num%1000)%100)/10+'0';
bit[4]=(num%100)%10+'0';
for(i=0;i<1;i++)
{
if(bit[0]=='0')
{
if(bit[1]=='0')
{
if(bit[2]=='0')
{
if(bit[3]=='0')
{
if(bit[4]=='0')
{ UART0_PutCh('0');
DelayNS(10);}
else
{
UART0_PutCh(bit[4]);
DelayNS(10);
}
}
else
{ UART0_PutCh(bit[3]);
DelayNS(10);
UART0_PutCh(bit[4]);
DelayNS(10);
}
}
else
{ UART0_PutCh(bit[2]);
DelayNS(10);
UART0_PutCh(bit[3]);
DelayNS(10);
UART0_PutCh(bit[4]);
DelayNS(10);
}
}
else
{
UART0_PutCh(bit[1]);
DelayNS(10);
UART0_PutCh(bit[2]);
DelayNS(10);
UART0_PutCh(bit[3]);
DelayNS(10);
UART0_PutCh(bit[4]);
DelayNS(10);
}
}
else
{UART0_PutCh(bit[0]);
DelayNS(10);
UART0_PutCh(bit[1]);
DelayNS(10);
UART0_PutCh(bit[2]);
DelayNS(10);
UART0_PutCh(bit[3]);
DelayNS(10);
UART0_PutCh(bit[4]);
DelayNS(10); }
}
}
/*----------------------------------------------------------*\
| MAIN ENTRY |
\*----------------------------------------------------------*/
int main(void) {
unsigned int a=10000,b=250,c=30;
UART0_init();
for(;;)
{
if(!U0IrqFlag);
else
{U0IrqFlag=0;
switch(U0RcvChar)
{
case'a': Change(a);break;
case'b': Change(b);break;
case'c': Change(c);break;
case'd': Change(d);break;
default: Change(0);
}
}
}
}
/*----------------------------------------------------------*\
| END OF FILE |
\*----------------------------------------------------------*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -