?? 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 + -