⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 自己写的串口的固件程序
💻 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 + -