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

📄 comin.c

📁 LPC串口初始化源代码,含发送接收和中断处理程序
💻 C
字号:

#include "LPC210x.h"
#include "com.h"
#include "def.h"
UARTMODE myuart0set;
volatile unsigned char com_busy_bit=0;
extern unsigned char combuf[COMBUF];
extern unsigned short  comnumber,printbufprint; 
extern volatile unsigned int  myintenable;//=0x00000000;   //copy VICINTENABLE

void sendonebyteuart0(unsigned char dat)
{
U0THR=dat;
while((U0LSR&0x40)==0);
} 

void sendoneworduart0(unsigned short dat)
{
unsigned char temp1,temp2;
temp1=0x00ff&dat;
temp2=dat>>8;
U0THR=temp2;
while((U0LSR&0x40)==0);
U0THR=temp1;
while((U0LSR&0x40)==0);
} 



void   __irq IRQ_UART0(void)		
{ 
unsigned char i=0,j=0;  


switch(U0IIR&0x0f){

 
	 case 0x04:		if(comnumber<(COMBUF-COMBUFBUTTOM_100)){
	                           for (i=0;i<14;i++){ combuf[comnumber]=U0RBR;
  				  		                           comnumber++;}
  				  											}
  				      else   {        for (i=0;i<14;i++) j=U0RBR;}
  				      
  	  				
						break;                          //fifo int 
	
	case 0x0c : 	while(U0LSR&0x01){
	
	                 if(comnumber<(COMBUF-COMBUFBUTTOM_100))
	                                    { combuf[comnumber]=U0RBR;
  				  		                           comnumber++;}
  				      else   j=U0RBR;
  	  				
  				  							
  				  						} 	 
  				   				  		  						 				 				
  			 			 	break;                         //cti int 
		

	              
default : 		  break;	              
	              
	
	}

if(comnumber>(COMBUF-COMBUFBUTTOM_200)){
						                com_busy_bit=1;}

 		 else 	{		
 		 			com_busy_bit=0;}
 		 			
 		 			
VICVectAddr = 0x0000;                         // 中断处理结束



}




void InitUart0(void)
{
unsigned int bak;

myuart0set.datab=8;
myuart0set.stopb=1;

////////////////////////*******************
myuart0set.parity=0;
//myuart0set.baud=19200;
////////////////////////////***********
	
U0LCR = 0x80;                        // DLAB位置1
bak = (Fpclk>>4)/myuart0set.baud;
U0DLM = (bak>>8);
U0DLL = (bak&0xff);

  bak = myuart0set.datab-5;                   // 设置字长度
   if(2==myuart0set.stopb) bak |= 0x04;        // 判断是否为2位停止位  
   
   if(0!=myuart0set.parity) {myuart0set.parity = myuart0set.parity-1; bak |= 0x08;}
   bak |= myuart0set.parity<<4;              	// 设置奇偶校验
      
   U0LCR = bak;

//U0FCR=0x81;						//使能FIFO,触发点为8字节(bit7,bit6 11 14dot 10 8dot 01 4dot 00 1 dot 
U0FCR=0xc1 ;		                //使能FIFO,触发点为14字节
//U1IER=0x01|0x08;						//fifo int cti int mode int 
U0IER=0x01;						//fifo int  mode int 
VICIntSelect = 0x00000000;           // 设置所有通道为IRQ中断
VICVectCntl0 = 0x26;                 // UART0中断通道分配到IRQ slot 0,即优先级最高
VICVectAddr0 = (int)IRQ_UART0;       // 设置UART0向量地址

myintenable=myintenable|0x00000040;

VICIntEnable= myintenable;

//VICIntEnable =0x00000080;           // 使能UART1中断

}

/// CTS=1   MARK=-3--- -15 V IS  BUSY 
//  CTS=0   SPACE=+3---+15 V  IS NO BUSY   

 				
 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -