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

📄 prot30.c

📁 15入15出继电器控制板
💻 C
字号:
/*--------------------------------------
芯片    :STC12C5A60S2芯片
硬件:  :15入15出继电器控制板子
晶振    :11.0592MHZ
开发平台:KEIL
功能    :串口一或者串口二都可以通过上位机控制30路继电器
波特率  :9600BPS
日期    :2012.4.19
编者    :yang
QQ     :7902449096
注意    :下载完程序后请复位系统!!(切记!)
--------------------------------------*/

#include "Hfile\\STC12C5A60S2.h"
#include"Hfile\\PublicV.H"
#define  uchar unsigned char 
#define  uint  unsigned int
void sender (void); 
uchar dat;

void init ()
{
//串口2波特率
	TMOD = 0x20;	 			 //定时器1产生波特率
	SCON = 0x50;				 //方式1,8位数据,波特率可变
	TH1=  0xfd;	
	TL1 = 0xfd;			     //波特率 9600
//串口1波特率	
	S2CON = 0x50;		     //方式1,八位数据,可变波特率
 	BRT=0XFD; 				 //设置波特率9600
 	TR1=1;				 	 //启动定时器产生串口2波特率	
 	AUXR=0x10;				 //启动串口1波特率发生器
 	IP=0x00;				 //优先级默认
 	EA=1; 				     //开总中断
 	ES=1;					 //开串口1中断
	IE2=0x01;				 //开串口2中断

}

/*--------------------------------------
          延时函数
--------------------------------------*/
void delay ( uint t )
{
	uint i,j;
	for( i=0; i<t; i++)
	for( j=0; j<250; j++);
}

/*--------------------------------------
          发送函数
--------------------------------------*/
void sender (void)
{
 unsigned char j;
	 ES=0;
 for(j=0;j<=5;j++)
  {  
   SBUF=bite[j];
	while(!TI);
    	TI=0; 

  }	 
  	ES=1; 
}

/*--------------------------------------
          主函数
--------------------------------------*/
void main()
{
   uchar k=10;
   P4SW|=0x20;		   //配置P4.5为IO口
   P4M0|=0x10;		   //配置P4.4为IO口
   P4M1|=0x10;
   P0=P1=P2=P3=0xff;
   P4|=0x30;
   init();             // 定时器初始化
   add=0X00;
   while(1)
   {
    if(receive==1&&bite[1]==add)
	 {
	/*0=握手 1=地址 2=继电器开关 3=继电器1-8路 4=继电器9-16路 5=继电器17=24路
	 *6=继电器25-30路*/
		receive=0;
		if(bite[2]==0x11)	   //打开
	   	  open_X1(bite[3],0);
		if(bite[2]==0x01)	   //关闭
		  open_X1(bite[3],1);

		if(bite[4]==0x12)	   //打开
	   	  open_X2(bite[5],0);
		if(bite[4]==0x02)	   //关闭
		  open_X2(bite[5],1);
		  sender ();

	  //  IapEraseSector(0);
	  //  IapProgramByte(1,bite[3]);
      // IapProgramByte(2,bite[5]);
	  // IapProgramByte(3,bite[7]);
	  // IapProgramByte(4,bite[9]);
		  

	 }                   
    }	

}
/*--------------------------------------
         串口一 接收中断函数
--------------------------------------*/

void uart_isr()  interrupt 4 using 2
{
  
  ES=0;
  if( RI ) 
   {
     RI=0;
     bite[r] = SBUF;
	 if(bite[0]==0XAA || bite[0]==0XAB || bite[0]==0XAC || bite[0]==0XAD)
	  r++;
	 if(r>=6)
	 {
	  receive=1;
	  r=0;
	 }
   }
   ES=1;
	
}

void uart2_isr()  interrupt 8 using 1
{
   if( S2CON & 0x01 )
	 {
		S2CON &= ~0x01;
		bite[r] = S2BUF;
	   if(bite[0]==0XAA || bite[0]==0XAB || bite[0]==0XAC || bite[0]==0XAD)
	      r++;
	   if(r>=6)
	   {
	     receive=1;
	     r=0;
	   }
	 }

	if( S2CON & 0x02 )
	{
			S2CON &= ~0x02;
	}

}


















⌨️ 快捷键说明

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