📄 scon.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 + -