📄 muticom.ccc
字号:
#include <reg51.h>
#include <stdio.h>
unsigned char startframe[4]={0,0,0,0},comxrb[4]={1,1,1,1},lastcomxrb[4]={1,1,1,1};
unsigned char TLV=0xb0; //Now is 16 times of baud,0xc0; //for 18432000,4 times baudrate,
unsigned char THV=0xff; // 0xfe; if 8times baudrate it's 0x60 and 0xff respectively.
unsigned char comxbuffsp[4]={0,0,0,0},comxbuffs[4][2],comxbuffr[4][2],comxbuffrp[4]={0,0,0,0};
unsigned short SECTICKS=19200; //4800; //65536/(65536-(THV*256+TLV))*18;
unsigned short HALFSECTICKS=9600; //2400;
unsigned char rbuff[2],sbuff[4];
unsigned char rbuffp=0;
unsigned char triggle=0,chno=0,ensend=0,rest[4];
//unsigned char ticks1=0,ticks2=0,ticksl2=0,ticksh2=0,ticks3;//,numberofzero=0,numberofone=16;
unsigned char temptl0,tempth0;
unsigned char comxbitbuffp[4]={0,0,0,0};
unsigned short filterB[4]={0xffff,0xffff,0xffff,0xffff},count=0,comxbitbuff[4];
sbit P32 = P3^2;
sbit COMX1R=P3^0;
sbit COMX1S=P3^1;
sbit COMX2R=P1^2;
sbit COMX2S=P1^3;
sbit COMX3R=P1^4;
sbit COMX3S=P1^5;
sbit COMX4R=P1^6;
sbit COMX4S=P1^7;
//enum struct[4]={"COMX1R","COMX2R","COMX3R","COMX4R"};
void delay()
{
unsigned short i,j;
for(i=0;i<30;i++) j=i;
}
void e0int() interrupt 0
{
P1=P1 ^ 0x80; // Feed watchdog.
//ticks3++;
}
void e1int() interrupt 2
{
//ticks1++;
}
void t0int() interrupt 1
{
// unsigned char i;
temptl0=TL0;
tempth0=TH0;
TH0=THV+tempth0;
TL0=TLV+temptl0+10;
//if(!(filterB&0x8000)) numberofzero--;
for(chno=0;chno<1;chno++)
{
filterB[chno]<<=1;
filterB[chno]&=0xfffe;
switch(chno)
{
case 0:
filterB[chno]|=COMX1R;
break;
case 1:
filterB[chno]|=COMX2R;
break;
case 2:
filterB[chno]|=COMX3R;
break;
case 3:
filterB[chno]|=COMX4R;
break;
default: break;
}
//if(!(filterB&1)) numberofzero++;
switch (filterB[chno]&0x3f)
{
case 0x3f:
comxrb[chno]=1;
break;
case 0:
comxrb[chno]=0;
if((!startframe[chno]) && (!(filterB[chno]&0xff))) // && (lastcom2rb) && (numberofzero>=8))
{
startframe[chno]=1;
comxbitbuffp[chno]=0;
rest[chno]=count&0xf;
}
break;
default:
break;
}
lastcomxrb[chno]=comxrb[chno];
if(startframe[chno] && ((count&0xf) == rest[chno]))
{
comxbitbuff[chno]>>=1;
comxbitbuff[chno]&=0xfeff;
if(comxrb[chno]) comxbitbuff[chno]|=0x0100;
comxbitbuffp[chno]++;
if(comxbitbuffp[chno]==10)
{
startframe[chno]=0;
if(comxbitbuff[chno]&0x100)
{
comxbuffr[chno][comxbuffrp[chno]]=comxbitbuff[chno];
sbuff[chno]=comxbitbuff[chno];
if(++comxbuffrp[chno]==2) comxbuffrp[chno]=0;
}
}
}
}
count++;
if(count == SECTICKS)
{
count=0;
triggle=1;
}
}
void comint() interrupt 4
{
if(RI)
{
RI=0;
rbuff[rbuffp]=SBUF;
rbuffp++;
if(rbuffp == 4) rbuffp=0;
}
}
void main (void)
{
unsigned char i;
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x21; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xd8; /* TH1: reload value for 1200 baud @ 184320000MHz */
TR1 = 1; /* TR1: timer 1 run */
IT1 = 1;
IT0 = 1;
TI = 1; /* TI: set TI to send first char of UART */
TR0 = 1;
IE = 0x87;
while (1)
{
if (triggle==1)
{
P32=0;
for(i=0;i<4;i++) putchar(sbuff[i]);
//putchar(temptl0);
triggle=0;
P32=1;
}
delay();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -