📄 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 + -