📄 main.c
字号:
// Remote Host Control program
// 2007.8.1 by Ericosn
#include <REG51.h>
#define uchar unsigned char
#define uint unsigned int
#define DevAddr 0x00 //1号设备为0x00,2号设备为0x01
uchar idata Buffer[6];
uint idata Timer[16];
uint PortFlag;
uchar rlength;
uchar PF;
sbit P15 = P1^5;
sbit P17 = P1^7;
sbit P07 = P0^7;
bit RcvFlag = 0;
uchar HandonFlag = 0;
uchar HandonTimer = 0;
void init(void);
void Delay(uint);
void ProcMsg(void);
void main(void)
{
uchar i;
init();
for(i=0;i<16;i++)
Timer[i] = 0;
while(1){
if(RcvFlag==1){
ProcMsg();
RcvFlag = 0;
ES = 1;
}
if (HandonFlag==1){
HandonFlag = 2;
P0 = 0x00;
P2 = 0x00;
Delay(100);
P0 = 0xFF;
P2 = 0xFF;
}
}
}
///////////////////////////////////////////////////////////////
void init(void)
{
rlength = 0;
PF = 0;
RcvFlag = 0;
PortFlag = 0;
P0 = 0xFF;
P2 = 0xFF;
TMOD = 0x21;
TH1 = 0xFD;
TL1 = 0xFD;
TH0 = 0xDC;
TL0 = 0x00;
SCON = 0x50;
IE |= 0x92;
IP |= 0x10;
TR0 = 1;
TR1 = 1;
P17 = 0;
}
///////////////////////////////////////////////////////////////
void ProcMsg(void)
{
uchar i,temp;
uint j;
uchar comid;
uchar TNum1 = Buffer[2];
uchar TNum2 = Buffer[3];
for(i=0,temp=0;i<8;i++)
temp += (((TNum2>>i)&0x01)<<(7-i));
TNum2 = temp;
TNum1=(uchar)((~PortFlag)&TNum1); //Mask the inefficent command
TNum2=(uchar)(((~PortFlag)>>8)&TNum2); //Mask the inefficent command
comid = ((Buffer[1]<<2)>>6);
switch(comid){
case 1:
P0 = ~TNum1;
P2 = ~TNum2;
Delay(100);
P0 = 0xFF;
P2 = 0xFF;
break;
case 2:
//the shutdown processing code
break;
default:
break;
}
j = 1;
for(i=0;i<8;i++){
if(((TNum1>>i)&0x01)==1){
PortFlag |= (j<<i);
Timer[i] = 500;
}
}
for(i=0;i<8;i++){
if(((TNum2>>i)&0x01)==1){
i += 8;
PortFlag |= (j<<i);
Timer[i] = 500;
i -= 8;
}
}
}
///////////////////////////////////////////////////////////////
//delay 1ms procedure
void Delay(uint n)
{
uchar i;
while(n--){
for(i=0;i<99;i++)
{;}
}
}
///////////////////////////////////////////////////////////////
//Timer0 10ms interrupt
void timer0(void) interrupt 1 using 1
{
bit Sample;
uchar i;
uint j = 1;
TH0 = 0xDC;
TL0 = 0x00;
if(HandonFlag==0)
{
Sample = P15;
if(Sample==0)
{
HandonTimer++;
if(HandonTimer>10)
{
HandonFlag = 1;
HandonTimer = 0;
}
}
else HandonTimer=0;
}
if(HandonFlag==2)
{
Sample = P15;
if(Sample==1)
{
HandonTimer++;
if(HandonTimer>10)
{
HandonFlag = 0;
HandonTimer = 0;
for(i=0;i<16;i++)
Timer[i] = 0;
PortFlag = 0;
}
}
else HandonTimer=0;
}
for(i=0;i<16;i++){
if(((PortFlag>>i)&0x01)==1){
Timer[i]--;
if(Timer[i]==0) PortFlag&=~(j<<i);
}
}
}
///////////////////////////////////////////////////////////////
//Serial port receive interrupt
void serial(void) interrupt 4 using 2
{
uchar temp;
if(RI&(!RcvFlag)){
temp = SBUF;
RI = 0;
if(rlength == 0)
{
if(temp == 0xA1)
{
Buffer[rlength] = temp;
rlength ++;
PF = temp;
}
else
{
rlength = 0;
}
}
else if(rlength == 5)
{
Buffer[rlength] = temp;
if(((PF^temp)==0)&&(Buffer[4]==0xAF)&&((Buffer[1]&0x0F)==DevAddr))
{
RcvFlag = 1;
ES = 0;
}
rlength = 0;
PF = 0;
}
else
{
Buffer[rlength] = temp;
PF += temp;
rlength ++;
}
}
if(TI){
TI=0;
//the Tx interrupt processing code
}
}
//END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -