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

📄 uart1.c

📁 无线发报雨量自动站 p89lpc932 单片机CUU应用 7920显示芯片
💻 C
字号:

#include <REG932.H>
#include "uart1.h"


//通信中断
void UART_ISR(void) interrupt 4 using 1
{   char ch1;
    if(RI)
    { RI = 0;ch1=SBUF;
       sendRQ++;
	  if(com_start)
	    if(rec_p1)
	    {        					
	      rec1[rec_p1] = ch1;
          rec_p1++;
          if(rec_p1>19)rec_p1=19;
	    }
		else
		{if(ch1!=0x55)
		 rec1[rec_p1++] = ch1;          
		}
	  else
	  {  if(ch==0x55)
	      if(ch1==0x55)
		  {  com_start=1;
		      rec_p1=0;ch=0;
	      } 
 		  else ch=0;
		 else {ch=ch1;}
	  }
    }else
    if(TI)
    {
      TI=0;// clear transmit interrupt flag
      if(c1)
      {
        SBUF=*ppp++;// start sending one byte
        c1--;
      }else string_end=0;
    }
}
void sendtext1(char* dat)//送出文本,结束符停止
{   tt=0;//char tt;
    while(string_end)//等待发送结束40毫秒
    {  msec(1);
       if(string_end)
       {tt++;if(tt>40)string_end=0;}
    }
	if(!string_end)
    {  string_end=1;c1=0;
             ppp=dat++;//
             while(*dat++){//计算发送字节 
                  c1++;};          
             SBUF= *ppp++; 
    }
}

void sendbyte1(char dat)//送出单字节
{   tt=0;//char tt;
    while(string_end)//等待发送结束40毫秒
    {  msec(1);
       if(string_end)
       {tt++;if(tt>40)string_end=0;}
    }
	if(!string_end)
    {  string_end=1;c1=0;
                     
             SBUF= dat; 
    }
}

void send9600(char* dat,uchar i)//按长度参数送出串,
{   tt=0;//char tt;
    while(string_end)//等待发送结束40毫秒
    {  msec(1);
       if(string_end)
       {tt++;if(tt>40)string_end=0;}
    };
	if(!string_end)
    {        string_end=1;c1=i-1;
             ppp=dat;                  
             SBUF= *ppp++; 
    }
}

void asc16(char aa,char* p)//查表拆分一字节为16进字符2个
{  *p++ =asc16_0_f[(aa>>4)&0x0f];
   *p++ =asc16_0_f[aa&0x0f];
}

void HEX_BCD_ASC(char aa,char* p)//0-99拆16进数为2字节十进ASC数
{
   *p++ = aa/10+0x30;
     *p = aa%10+0x30;
}

void init_io(void)//端口初始化为
{
 P0M1 = 0x00;//00000000;     // M1=0 M2=0 准双向 
	                 
	P0M2 = 0x00;//00001000;//01 推挽 11开漏输出 10输入

	P1M1 = 0x00;     //push pull except RX
	P1M2 = 0x00;     //0xFD;
	P2M1 = 0x00;	// push pull
	P2M2 = 0x00;
	OCA=1;
	ICA=1;
	KB2=1;
	KB1=1;
	ES = 1;			// enable UART interrupt
	EA = 1;
}   
 
void UART_init(void)//通信口初始化
{	
	SCON=0x50;				// select BRG as UART Baud Rate Gen
	SSTAT=0x40;//60;				// separate Rx / Tx interrupts
	BRGR0=0xF0;				// setup BRG for 9600 baud @ 7.373MHz internal RC oscillator
	BRGR1=0x02;
//	BRGR0=0x70;				// setup BRG for 9600 baud @ 12MHz external Crystal
//	BRGR1=0x04;
	BRGCON = 0x03;     		// enable BRG
    EX0=1;
    IT0=1;
    EX1=1;
    IT1=1;
	WDCON=0;
    RTCCON = 0X60;//0x40;//0x63; //开RTC 定时器
    RTCH = RTCH_DATA;
    RTCL = RTCL_DATA; //设置初值    
    RTCCON = 0x63; //0x43;//开RTC 定时器
	EWDRT=1;
}

void msec(int x) // 延时 x 毫秒
{
	int j=0;
	while(x>=0)
	{
		for (j=0; j<669; j++);//7.373Mhz
		x--;
	}
}
/**********************************/
//实时时钟中断程序
//功能:软件清零RTC 中断标志,重装计数值
/*********************************/
void RTC_int(void) interrupt 10
{
   RTCCON &= 0x7e; //清零中断标志
 //  RTCH = RTCH_DATA;
  // RTCL = RTCL_DATA; //设置初值     
   RTCCON = 0x63; //0x43;//清零中断标志
   rtc1++;
}

//雨量中断*************************

void yuliang_int1() interrupt 2
{
   yuliang1++;

}
void yuliang_int0() interrupt 0
{
   yuliang1++;

}

⌨️ 快捷键说明

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