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

📄 ccu.c

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

//ccu定时中断和A捕获中断

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

/*
void  ccu_int(void) interrupt 11
{  char t2;
   t2=TISE2&0x07;
   if(t2==7)
   {  TIFR2&=0x7f;
      time1++;
   }
   if(t2==6)
   {TIFR2=0;}
   TIFR2=0;
}
*/

//----------------------------------
//功能:CCU初始化程序
//----------------------------------
void CCU_init()
{	
	   TPCR2H=0x00;//预分频为0    //CCU定时器5分频
	   TPCR2L=0x00;		
	   TOR2H=0x0C;//PDSH;//设置定时器重装值		
	   TOR2L=0x00;//PDSL;		
    TH2=12;//PDSH;//0x0c;
    TL2=0;//PDSL;//0;
	   CCCRA=0x08;		//设置捕获模式,上升沿捕获,捕获延迟0.
               //TIFR2=0;//CCU中断标志
               //TISE2 //当前中断最高优先号
//	TICR2=0x81;		//使能输入捕获通道A.
//	TCR20=0x05;		//设置CCU基本定时器功能,递-计数
//	ECCU=1;			//CCU中断使能。
//	EA=1;
  //TCR21|=0x80;
}
//************************
//功能:启动发送 
//*****************************
void TX1200(char* pp,char n,char m)//发送开始处理
{    
	    Rend=0;
     //if(!Rend)//正在接收退出
     {   EA=0;
					    if(m==12)w1200=1;
									else w1200=0;
         TX_number=n;//发送字节数
     	   TX96out=On;    //发送端口置高电平
		       TX12out=On;
         ptr_T=pp; //发送指针地址指向发送字串
         hs=*ptr_T; //第一个数据送达数据移位单元
         //TR_ing=On;//收发标志置位         
         Tend =1; //发送结束时标志=0         
         //rede1= On;  //接收指示灯 

 								TOR2H=0x0C;//PDSH;//设置定时器重装值		
	        TOR2L=0x00;//PDSL;	
								 TH2=12;//PDSH;//0x0c;//1200bps
         TL2=0;//PDSL;//0;  改变定时时间

         CCU_SET();//启动发送
         EA=1;
      }         
}
//*********************
//功能:启动接收
//*********************
void RX1200(char* p,char n,char m)
{    while(Tend);
    //if(!Tend)
    { EA=0;	
  		  if(m==12)w1200=1;
									else w1200=0;
	     RX_ok=0;
	     RX_number=n;  
      ptr_R=p;//定义接收指针
      Rend= 1;//允许接收
      RX_START = 0;//接收进行中标志=1
      rede1=Off;  //接收指示灯  
						TOR2H=0x0C;//PDSH;//设置定时器重装值		
	     TOR2L=0x00;//PDSL;	
						TH2=0x0c;//PDSH;//1200bps
      TL2=0;// PDSL; 改变定时时间
      CCU_SET();  
      TIFR2=0;
	     TICR2=0x82;//0x81;//使能定时中断,和接收电平同步中断.
      EA=1;
      Tov=0;//接收超时
     }
} 
//****************************
//启动发送中断,定时
//*************************        
void CCU_SET(void)
{      
       //TICR2=0;
       //TCR21=0;
	   TICR2=0x80;		//使能定时中断,禁止其他中断.
	   TCR20=0x05;		//设置定时器开,递减
	   ECCU=1;			//CCU中断使能。
    TCR21|=0x80;//定时器自动更新
}  

     
//----------------------------------
//功能:CCU定时T中断服务和电平中断服务程序,完成串行通信
//----------------------------------
void 	CCU_isr() interrupt 11
{  // bit b1;
  //uchar  Rdata;
	   EA=0;    
	   Temp=TISE2&0x07;
	   TIFR2&=0x7f;//清除定时中断标志
				if(w1200)sf2();
				else
    if(Temp==7)// T中断***********************
    {
      if(Tend) //发送中 111111111111111111111  
      { 
        if (--Tb)//位计数器 先减后判断
        {  if(Tb==9)//第一位为启动位9
           {  nop;nop;nop;//采样时间平衡
                  if(!GPRS)TX96out=0;else GPRS0ut=0;
           }
           else//8个数据位 87654321
           {   if(!GPRS)TX96out=(bit)(hs&0x01) ;//最低位到发送口
			            else GPRS0ut=(bit)(hs&0x01) ;
               hs=hs>>1;//移出下一位
           }
         }//位计数器 先减后判断
         else //停止位(Tb==0)
         {  nop;nop;
            Tb=10;//位数
            nop;nop;
            if(!GPRS)TX96out=1;//发停止位1
			         else GPRS0ut=1;
              if(--TX_number!=0)//还有字吗
              {  ptr_T++;
                hs=*ptr_T ;//取得下一字节
              }
              else
              { //TX_ok=1;
                Tend=0;   //发完标志
                TICR2=0x0;		//使能禁止ccu其他中断.
                TCR20=0x0;		//设置定时器关
                ECCU=0;			//CCU中断禁止。
              }
         }//Tb==0
      }//发送中 11111111111111111111111111
      else
	     if (Rend)//接收8888888888888888888
      {
         if(r_start)//收到启动位
         { 
											if(--Rb1)
											 { hs>>=1;hs_7=RX96in;}
											else											
												if(!RX96in)//未收到停止位
												   { Rb1=9;
															  r_start=0;
                 TH2=PDSH*20;//2*20;//0x2c;//新字节时间拉长,等待启动位。重新定时器
                 TL2=PDSL;//0; //临时改变定时时间
                 TICR2=0x81;//使能下降沿中断,和超时中断,禁止其他中断.
   	             TCR20=0x05;		//设置定时器开,递减
   	             ECCU=1;			//CCU中断使能

⌨️ 快捷键说明

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