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

📄 mmm.c

📁 矿工定位系统单端
💻 C
📖 第 1 页 / 共 3 页
字号:
//#include <reg52.h>
#include<w77c32.h>
#include <absacc.h>
#include "string.h"
#include "serial.h"
#include "intrins.h"
#include "e25045.h"
#include "comm.h"
#include "crc.h"
static unsigned char xdata RemainRec[4][16];
unsigned char xdata Card_id[200];
unsigned char xdata Call_id[8];
unsigned char idata ring_flg=0,x,ADDR;
unsigned int idata rest_delay=0,bcc;
//*********************************************************
union charint{
  unsigned char  chrX[2];
  unsigned int   intX;
  };
union charint ad_temp, recordint,rx_bcc;
//************************程序用的变量********************
unsigned char data RXtem[6], RXdata[6];//程序接收数据缓冲区
unsigned char idata RXNOM,RXSTAT;
unsigned char idata RXTimerOUT,com1=0,com2=0; //接收超时
bit rxok,Waring=0;          // 接收完成标志


sbit  CS=P2^4;
sbit  PWR_UP=P2^5;
sbit  TX_EN=P2^6; 
sbit  Test_led=P1^4;


/****************************************************************************/


void Delay100ms(unsigned char x)
{   
  unsigned char i,j;
  
  while(x-- != 0)
  { 
 	for (j = 0;j < 74; j++)for (i = 0;i < 88; i++){_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;
	_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;
	_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;
	_nop_() ;_nop_() ;_nop_() ;};
  }
}

/****************************************************************************/


void Delay1ms(unsigned char idata  x)
{   
  unsigned char i;
  
  while(x-- != 0)
  {
    for (i = 0;i < 89; i++){_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;
	_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;
	_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;
	_nop_() ;_nop_() ;_nop_() ;};
  }
}
/****************************************************************************
*                                                                           *
* Function:     init_com                                                    *
*                                                                           *
* Input:        -                                                           *
* Output:       -                                                           *
*                                                                           *
* Description:                                                              *
****************************************************************************/
void init_com(void)
{ 
  ES = 1;					    // Enable serail interrupts
   EA=0;
  ET0 = 1;					// Enable t0 interrupts
  RecvState  = RECV_STX;
  RecvReady = TRUE;
  SendReady = FALSE;
  SendOk = FALSE;
  Cmdok = FALSE;
  En485 = RECV;
  EA=1;
 
}
  /****************************************************************************
*                                                                           *
* Function:     START_T0                                                    *
*                                                                           *
* Input:        -                                                           *
* Output:       -                                                           *
*                                                                           *
* Description:                                                              *
*                                                                           *
*                                                                           *
****************************************************************************/
void START_T0com2(unsigned char x)
{
  ET0 = 0 ;
  TR0 = 0;
  RXTimerOUT = x ;
  TL0 = 0;
  TH0 = 0;
  TR0 = 1;
  ET0 = 1 ;
  com2=1;
}	
  /****************************************************************************
*                                                                           *
* Function:     START_T0                                                    *
*                                                                           *
* Input:        -                                                           *
* Output:       -                                                           *
*                                                                           *
* Description:                                                              *
*                                                                           *
*                                                                           *
****************************************************************************/
void START_T0(unsigned char x)
{
  ET0 = 0 ;
  TR0 = 0;
  Timer0Cnt = x ;
  TL0 = 0;
  TH0 = 0;
  TR0 = 1;
  ET0 = 1 ;
  com1=1;
}		 	 
/****************************************************************************
*                                                                           *
* Function:     CALL_isr_T0                                                 *
*                                                                           *
* Input:        -                                                           *
* Output:       -                                                           *
*                                                                           *
* Description:                                                              *
*                                                                           *
*                                                                           *
****************************************************************************/
void CALL_isr_T0com2(void)
{
  //TR0 = 0;
  RXTimerOUT = 0; 
  //TF0 = 1;
  com2=0;

}
/****************************************************************************
*                                                                           *
* Function:     CALL_isr_T0                                                 *
*                                                                           *
* Input:        -                                                           *
* Output:       -                                                           *
*                                                                           *
* Description:                                                              *
*                                                                           *
*                                                                           *
****************************************************************************/
void CALL_isr_T0(void)
{
 // TR0 = 0;
  Timer0Cnt = 0; 
 // TF0 = 1;
 com1=0;

}


//********************串口中断处理程序**************************************************************
void ub1ISR(void) interrupt 7 using 1
{
   unsigned char data c;
   if ( RI_1 )					    // Receive Command
  {
  
    RI_1 = 0;
	c  = SBUF1;
	switch(RXSTAT)
	{
	  case 0:                          //接受帧头02
	         if(c==0x88)
               {RXSTAT=1;START_T0com2(20); }
			 else
               CALL_isr_T0com2();
	         break;
	  case 1:                       //接收
             if(c==0xff)
			   { 
                  RXSTAT=2;
                 START_T0com2(20);
			
               }
             else
			  { 
                RXSTAT=0; 
               CALL_isr_T0com2();
               }
		     
			// RXSTAT=0;
	         break;
	 case 2:
	        x=c;
            RXSTAT=3;
			START_T0com2(20);
	        break;
	 case 3:
	        if(x==c)
			{
			  rxok=1;
			  ring_flg=x;
			}
            RXSTAT=0;
			x=0;
            CALL_isr_T0com2();
            
	        break;
	  default:
             RXSTAT=0;
   		     break;
	}

  }
 else
 {
       TI_1=0;
	   
  }
}
	 /****************************************************************************
*                                                                           *
* Function:     isr_UART                                                    *
*                                                                           *
* Input:        -                                                           *
* Output:       -                                                           *
*                                                                           *
* Description:                                                              *
****************************************************************************/
void isr_UART(void) interrupt 4 using 2
{
  unsigned char c , oldRecvState , i , bcc;

//  WatchDog();
  
  if ( RI )					    // Receive Command
  { 
    TR0 = 0 ;				   //stop t0
	c  = SBUF;
	RI = 0;
	if (RecvReady)
	{
	SendReady = FALSE;
    oldRecvState = RecvState;
	RecvState = RECV_STX;
  
  
    switch (oldRecvState)
	{                           
	  case RECV_STX:         // Receive STX and answer DLE
							 if (c == STX)
		                     { 
							   RecvState = RECV_ADDR0;
							   START_T0(T_533_ms);
							 }
							 else
		                     {
							   CALL_isr_T0() ;
		                     };
					         break;
 
      case RECV_ADDR0:       
   							 if (c ==  ADDR)//0xd2)//MeterNum.chrX[3])
		                     {
                               RecvState = RECV_ADDR1;
							   START_T0(T_533_ms);
							 }
							 else
		                     {
							   CALL_isr_T0() ;
		                     };
					         break;
      case RECV_ADDR1:       
   							 if (c == 0x02)//MeterNum.chrX[2])
		                     {
                               RecvState = RECV_ADDR2;
							   START_T0(T_533_ms);
							 }
							 else
		                     {
							   CALL_isr_T0() ;
		                     };
					         break;
      case RECV_ADDR2:       
   							 if (c == 0x96)//MeterNum.chrX[1])
		                     {
                               RecvState = RECV_ADDR3;
							   START_T0(T_533_ms);
							 }
							 else
		                     {
							   CALL_isr_T0() ;
		                     };
					         break;

      case RECV_ADDR3:       
   							 if (c ==0x49) //MeterNum.chrX[0])
		                     { 
							  // LED_RED = ~LED_RED;
                               En485 = SEND;
                               //Ir_En = SEND;
							   SBUF = DLE ;
							   RecvState = RECV_DATA_DLE_ETX;
							   DataDleReceived = FALSE;
							   Index = 0;
							   Cmdok = FALSE; 
							   
							   while( !TI );
							   TI = FALSE;
							   En485 = RECV;
                               //Ir_En = RECV;
							   START_T0(T_533_ms);
							 }
							 else
		                     {
							   CALL_isr_T0() ;
		                     };
					         break;

	  case RECV_DATA_DLE_ETX:// Receive data,DEL,ETX  and answer DLE
							 if (c == DLE) 
		                     { 
							   if (!DataDleReceived)	//如果上一个不是DLE	   丢掉
		                       {
			                     DataDleReceived = TRUE;
			                     RecvState = RECV_DATA_DLE_ETX;
			                     START_T0(T_533_ms);
			                     break;
		                       }
		                       else					    //如果上一个是DLE
		                       {
			                     DataDleReceived = FALSE; //留下
		                       };
							 }
							 else if (c == ETX)
							      {
					                if (DataDleReceived)  //如果是结束标记	  处理
		                            {
	        		                   DataDleReceived = FALSE;
									   
									   bcc = 0;
		                               for (i = 0; i < Index; i++)
		                               {
		                                   bcc ^= SerBuffer[i];
		                               } ;

									   if( bcc == 0) 
 									   { En485 = SEND;
                                         //Ir_En = SEND;
									     Cmdok = TRUE;
									     SBUF = DLE ;
										 while( !TI );
							             TI = FALSE;
                                         En485 = RECV;
                                       //LED_RED = ~LED_RED;
                                         //Ir_En = RECV;
									   }
									   else
									   { En485 = SEND;
                                         //Ir_En = SEND;
									     Cmdok = FALSE;
									     SBUF = NAK ;
										 while( !TI );
							             TI = FALSE;
                                         En485 = RECV;
                                         //Ir_En = RECV;
									   };
										RecvState=RECV_STX;
			                           break;

⌨️ 快捷键说明

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