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

📄 scon.c

📁 无线红外传感报警系统
💻 C
字号:
/*串口程序*/
/*通道控制*/
//工作方式用T2CON的C/T2来选择 [zglike] [7次] 02-11-8 18:32:14 
//T2有三种操作方式:捕获方式,自动重装方式,波特率发生器。操作方式由T2CON控制位选
//择 (1):BCLK+TCLK、CP/RL2两个位为0时TR2为1则操作方式是16位自动装方式
//   (2):BCLK+TCLK为0、CP/RL2和TR2为1时是16位捕获
//   (3):BCLK+TCLK为1、TR2为1时是波特率发生器 

#include "Head.h"
#include <reg52.h>
#define BYTE unsigned char
bit data P0_bit;

//BYTE idata Ctr_rlt[16];
void delay11ms(uchar tim);
void IniSerial(void)
{ /* T2定时器初始化                      */
     T2CON = 0x30;      /*0011000,选择timer2作为波特率发生器*/          
/* T2 in mode 2 autoload               */ 
    TH2 = 0xFF;
    TL2 = 0xDC;               /* Baut rate 9600                      */  
    RCAP2H = 0xFF;            /* 11059200 / (9600*32) = 36           */
    RCAP2L = 0xDC;

    SCON = 0x50;        /* SM0 SM1 SM2 REN TB8 RB8 TI RI:9 bit */ 
 
    ES = 1;             /* 串口中断允许   1-enable             */
    PS = 0;             /* 串口中断优先级 1-高,0-低           */
    TR2 = 1;              /* Start T2 as baut rate generator     */  
	EA=1;   
} 




void serial (void) interrupt 4 using 1 
{
	unsigned char re_pc,zc11;//Tx_se;
	if(RI==1)
	{
//		unsigned char re_pc,Ts;	//
		RI=0;
		re_pc=SBUF;
		if((re_pc&0xe0)==0xe0)	//是否能正确操作串口
		{
			switch(re_pc&0x0c)	//功能选择
			{
				case 0: 		//家电通道
					if((re_pc&0x10)!=0x10)	//是否读(所有)家电通道状态
					{
						SBUF=(P0 & 0xe0) | zc11;  
						while(TI==0);
						TI=0;
					}
					else 	//进行通道控制
						switch(re_pc&0x03)
						{	
							case 0:		//CH1
							//	P0_bit=CH1;	
							//	CH1=!P0_bit;
							//	if(CH1)
							//		SBUF=0x01;
							//	else
							//		SBUF=0x02;
							//	break;
                                 P0_bit=zc1;	
								if(zc1!=1)  //通道为闭,进入,开,zc1=0
								{
									CH1=0;delay11ms(200);CH1=1;
									zc1=1;
								}
								else 
								{
									CH1=0;delay11ms(200);CH1=1;
									zc1=0;
								}
								//CH1=!P0_bit;
                                //P0_bit=zc1;
								//if(P0_bit)   
								if(!zc1)
									{SBUF=0x01;
                                     zc11=0x10;}
								else
									{SBUF=0x02;
                                    zc11=0x00;}
								break;



							case 1:		//CH2
								P0_bit=CH2;	
								CH2=!P0_bit;
								if(CH2)
									SBUF=0x01;
								else
									SBUF=0x02;
								break;
							case 2:		//CH3
								P0_bit=CH3;	
								CH3=!P0_bit;
								if(CH3)
									SBUF=0x01;
								else
									SBUF=0x02;
								break;
							case 3:		//CH4
								P0_bit=CH4;	
								CH4=!P0_bit;
								if(CH4)
									SBUF=0x01;
								else
									SBUF=0x02;
								break;
							default:
								break;		
					    }	
					    break;
//				case 0xe8:
					
				default:
					break;
			}
//////////////////
//				Ctr_rlt[0]='D';
//				Ctr_rlt[1]='o';
//				Ctr_rlt[2]='n';
//				Ctr_rlt[3]='e';
//				Ctr_rlt[4]='\0';
			

//			Send_tx(Ctr_rlt);

		}
	else	//send "Fail"
	{
//   			Ctr_rlt[0]='F';
//				Ctr_rlt[1]='a';
//				Ctr_rlt[2]='i';
//				Ctr_rlt[3]='l';
//				Ctr_rlt[4]='\0';
			

//			Send_tx(Ctr_rlt);
	
	}	
			
	}	


}
void delay11ms(uchar tim)
{
 unsigned int i,j,k;
for(i=0;i<tim;i++);
for(j=0;j<30000;j++);
for(k=0;k<40000;k++);
}

////////////////////////////////


//void Send_tx(unsigned char tx_data[16])
//{
//	unsigned char Tx_se=0;
//	while(tx_data[Tx_se]!=0)
//	{
//		SBUF=tx_data[Tx_se];
//		while(TI==0);
//		TI=0;
//		Tx_se++;
//	}
//}	

⌨️ 快捷键说明

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