📄 uart.c
字号:
#include"LPC2294.h"
#include "config.h"
void UART0Init(void){
uint16 divisor;
PINSEL0=0x05;
// U0IER = 0x07; //允许所有中断
// U0LCR=0x0F; //默认设置8位长度,高四位的,间隔控制,奇偶选择不懂
//U0FCR可以暂时不写,即不使用FIFO功能
U0LCR |=0x80;
divisor = Fpclk/(16*9600);
U0DLL = divisor & 0xFF;
U0DLM = (divisor >> 8) & 0xFF;
U0LCR &= ~0x80; //DLL和DLM除数锁存是波特率发生器的一部分,它们决定发送端的波特率
//这里DLAB=0即不使用除数锁存,所以不写U0DLL和U0DLM
U0LCR=0x03; //8位数据位,1位停止位,禁止奇偶校验
// PINSEL0=PINSEL0|0x01;
// PINSEL0=PINSEL0&~0x02; //P0.0为TXD0
// PINSEL0=PINSEL0|0x04;
// PINSEL0=PINSEL0&~0x08; //P0.1为RXD0
//PINSEL0 = 0x05;这种置位的方法不好,容易影响其他标志位
}
/*********************************
*这个程序要考虑要不要
*********************************/
void UART0Init_Para(int bit_length,unsigned int baud){
U0LCR=U0LCR&bit_length;
PINSEL0=PINSEL0|0x01;
PINSEL0=PINSEL0&~0x02; //P0.0为TXD0
PINSEL0=PINSEL0|0x04;
PINSEL0=PINSEL0&~0x08; //P0.1为RXD0
}
unsigned char UART0ReadChar(void){
uint8 temp;
// while(U0LSR&0x01==0); //0x01位是RDR
while((!U0LSR&0x01));
temp = U0RBR;
while(temp==0x00) {
while((!U0LSR&0x01));
temp = U0RBR;
}
return temp;
}
unsigned char UART0ReadChar_nowait(void){
if(U0LSR&0x01 == 0x01)
return U0RBR;
else
return 0;
}
/*
*nostop程序中的这句话if(U0LSR&0x20 == 0x20)可能有问题
*/
void UART0WriteChar(unsigned char ch0){
//while(U0LSR&0x20==0); //0x20位是THRE位
//U0THR = ch0;
U0THR = ch0;
while((U0LSR&0x40)==0);
}
void UART0WriteChar_nowait(unsigned char ch0){
if(U0LSR&0x20 == 0x20)
U0THR = ch0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -