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

📄 16c554.c

📁 proface的触摸屏和艾默生的变频器通过此程序可相互通信
💻 C
📖 第 1 页 / 共 2 页
字号:
 	{   unsigned char temp;
		uc_16c554c_THR=s;
		temp=uc_16c554c_LSR;
		while((temp&0x40)!=0x40)
			{
			temp=uc_16c554c_LSR;
			
			}
		 
	}

//发送一帧数据
void frame_16c554csend(unsigned char t)//发送数据桢
	{    EX0=0;//当RTS 变高时RX1变低16c554认为有数据要接受会产生接受中断,关闭中断
		RTS3=ENABLE;		
		for(i=0;i<t;i++)
			{
				
			   uart_16C554csend(s_buffer[i]);
				
			}
		RTS3=DISABLE;
	   EX0=1;
	}
//发送一个字节
void uart_16C554dsend(unsigned char s)
 	{   unsigned char temp;
		uc_16c554d_THR=s;
		temp=uc_16c554d_LSR;
		while((temp&0x40)!=0x40)
			{
			temp=uc_16c554d_LSR;
			
			}
		 
	}

//发送一帧数据
void frame_16c554dsend(unsigned char t)//发送数据桢
	{    EX0=0;//当RTS 变高时RX1变低16c554认为有数据要接受会产生接受中断,关闭中断
		RTS4=ENABLE;		
		for(i=0;i<t;i++)
			{
				
			   uart_16C554dsend(s_buffer[i]);
				
			}
		RTS4=DISABLE;
	   EX0=1;
	}




void INTA_int(void) interrupt 0 using 1    //串口1中断
{
   unsigned char x;

    /*if(INTC==0)//串口3接收到数据,原理图本意是用定时器做外部中断,现改为查询
	{
          uc_554c_isr=uc_16c554c_ISR;    //读中断状态寄存器
         if(uc_554c_isr_status)         //ISR INT STATUS为0表示有中断产生
          return; 
          uc_554c_isr=uc_16c554c_ISR;    //读中断状态寄存器
           if(uc_554c_isr_status)         //ISR INT STATUS为0表示有中断产生
            return; 
            switch(uc_554c_isr)
               {   
                case     0xc1:
  	         case    0x01:          //NO INTERRUPT
  	          break;
	         case     0xc4:
                case     0x04:          // receive data interrupt
                uc_554c_r_buffer[uc_554c_r_number]=uc_16c554c_RHR;
		  if(uc_554c_r_number==0)             //接受到0X7E,开始记数
		  	{
		  	   if(uc_554c_r_buffer[0]==FRAME_START)
			   uc_554c_r_number++;
		  	}
		  else if((uc_554c_r_buffer[uc_554c_r_number]==FRAME_END)&&(uc_554c_r_number==17))//判断接受帧尾
		  	 uc_554c_r_complete=UART_COMPLETE;
		   else
		   	uc_554c_r_number++;
	           break;
               case      0xc2:
	        case      0x02:           //tranmit data  interrupt
	          break;
              case      0xc6:
	       case      0x06:          //lsr      interrupt
               x=uc_16c554c_LSR;          //清除LSR中断
                break;
	       case       0x0c:         //receive time out interrupt
	       case       0xcc:
	       x=uc_16c554c_RHR;       //清除接受超时
              break;
	      case       0x00:            //msr interrupt
	      case       0xc0:
	       x=uc_16c554c_MSR;           //清除msr中断
	      break;
	      default:
	       break;
           }
	 }

  else if(INTD==0)
   	{
             uc_554d_isr=uc_16c554d_ISR;    //读中断状态寄存器
           if(uc_554d_isr_status)         //ISR INT STATUS为0表示有中断产生
         return; 
	
  
               uc_554d_isr=uc_16c554d_ISR;    //读中断状态寄存器
               
                 switch(uc_554d_isr)
               {   case     0xc1:
  	             case    0x01:          //NO INTERRUPT
  	             break;
	         case     0xc4:
                case     0x04:          // receive data interrupt
                uc_554d_r_buffer[uc_554d_r_number]=uc_16c554d_RHR;
		  if(uc_554d_r_number==0)             //接受到0X7E,开始记数
		  	{
		  	   if(uc_554d_r_buffer[0]==FRAME_START)
			   uc_554d_r_number++;
		  	}
		  else if((uc_554d_r_buffer[uc_554c_r_number]==FRAME_END)&&(uc_554d_r_number==17))//判断接受帧尾
		  	 uc_554d_r_complete=UART_COMPLETE;
		   else
		   	uc_554d_r_number++;
	          break;

	        case      0xc2:
	        case      0x02:           //tranmit data  interrupt
	         break;

	        case      0xc6:
	        case      0x06:          //lsr      interrupt
               x=uc_16c554d_LSR;          //清除LSR中断
               break;
	        case       0x0c:         //receive time out interrupt
	        case       0xcc:
	         x=uc_16c554d_RHR;       //清除接受超时
               break;
	        case       0x00:            //msr interrupt
	        case       0xc0:
	        x=uc_16c554d_MSR;           //清除msr中断
	        break;
	        default:
	         break;
         
   	}
  }

  else*/
  	{
  uc_554a_isr=uc_16c554a_ISR;    //读中断状态寄存器
  if(uc_554a_isr_status)         //ISR INT STATUS为0表示有中断产生
    return; 
  switch(uc_554a_isr)
  {   case     0xc1:
  	case    0x01:          //NO INTERRUPT
  	   break;
	case     0xc4:
       case     0x04:          // receive data interrupt
          uc_554a_r_buffer[uc_554a_r_number]=uc_16c554a_RHR;
		  if(uc_554a_r_number==0)             //接受到0X7E,开始记数
		  	{
		  	   if(uc_554a_r_buffer[0]==FRAME_START)
			   uc_554a_r_number++;
		  	}
		  else if((uc_554a_r_buffer[uc_554a_r_number]==FRAME_END)&&(uc_554a_r_number==17))//判断接受帧尾
		  	 uc_554a_r_complete=UART_COMPLETE;
		   else
		   	uc_554a_r_number++;
	  break;
       case      0xc2:
	case      0x02:           //tranmit data  interrupt
	     
	
	 break;
       case      0xc6:
	case      0x06:          //lsr      interrupt
          x=uc_16c554a_LSR;          //清除LSR中断
          break;
	case       0x0c:         //receive time out interrupt
	case       0xcc:
	   x=uc_16c554a_RHR;       //清除接受超时
          break;
	case       0x00:            //msr interrupt
	case       0xc0:
	x=uc_16c554a_MSR;           //清除msr中断
	break;
	default:
	break;
   }
   //uc_16c554a_MCR=0x08; //使能串口中断
  	}
}

void INTB_int(void) interrupt 2 using 0   //串口2中断
{
   unsigned char x;
		
  uc_554b_isr=uc_16c554b_ISR;    //读中断状态寄存器
  if(uc_554b_isr_status)         //ISR INT STATUS为0表示有中断产生
    return; 
  switch(uc_554b_isr)
  {
       case    0xc1:
  	case    0x01:          //NO INTERRUPT
  	   break;
	case     0xc4:
       case     0x04:          // receive data interrupt
          uc_554b_r_buffer[uc_554b_r_number]=uc_16c554b_RHR;
		  if(uc_554b_r_number==0)             //接受到0X7E,开始记数
		  	{
		  	   if(uc_554b_r_buffer[0]==FRAME_START)
			   uc_554b_r_number++;
		  	}
		  else if((uc_554b_r_buffer[uc_554b_r_number]==FRAME_END)&&(uc_554b_r_number==17))//判断接受帧尾
		  	 uc_554b_r_complete=UART_COMPLETE;
		   else
		   	uc_554b_r_number++;
	  break;

	case      0xc2:
	case      0x02:           //tranmit data  interrupt
	   
         break;
	case      0xc6:
	case      0x06:          //lsr      interrupt
          x=uc_16c554b_LSR;          //清除LSR中断
          break;
	case      0xcc:
	case       0x0c:         //receive time out interrupt
	   x=uc_16c554b_RHR;       //清除接受超时
          break;
	case      0xc0:
	case       0x00:            //msr interrupt
	x=uc_16c554b_MSR;           //清除msr中断
	break;
   }
// uc_16c554b_MCR=0x08; //使能串口中断
}

⌨️ 快捷键说明

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