📄 receive.c
字号:
#include<c8051f020.h>
/*SET 16bit REGISTER*/
sfr16 TMR3 = 0x94;
sfr16 TMR3RL = 0x92;
#define EXT_OSCIL 1
#define INFRA_IN P3^7
#define T_3MS 0xf533
#define T_0_8MS 0xfd1f
void Port_IO_Init()
{
// P0.0 - TX0 (UART0), Open-Drain, Digital
// P0.1 - RX0 (UART0), Open-Drain, Digital
// P0.2 - SCK (SPI0), Open-Drain, Digital
// P0.3 - MISO (SPI0), Open-Drain, Digital
// P0.4 - MOSI (SPI0), Open-Drain, Digital
// P0.5 - NSS (SPI0), Open-Drain, Digital
// P0.6 - SDA (SMBus), Open-Drain, Digital
// P0.7 - SCL (SMBus), Open-Drain, Digital
// P1.0 - TX1 (UART1), Open-Drain, Digital
// P1.1 - RX1 (UART1), Open-Drain, Digital
// P1.2 - CEX0 (PCA), Open-Drain, Digital
// P1.3 - CEX1 (PCA), Open-Drain, Digital
// P1.4 - CEX2 (PCA), Open-Drain, Digital
// P1.5 - CEX3 (PCA), Open-Drain, Digital
// P1.6 - CEX4 (PCA), Open-Drain, Digital
// P1.7 - CP1 (Cmpr1), Open-Drain, Digital
// P2.0 - T0 (Timer0), Open-Drain, Digital
// P2.1 - INT0 (Tmr0), Open-Drain, Digital
// P2.2 - T2EX (Tmr2), Open-Drain, Digital
// P2.3 - Unassigned, Open-Drain, Digital
XBR0 = 0x2F;
XBR1 = 0x47;
XBR2 = 0x44;
}
void Reset_Sources_Init()
{
WDTCN = 0xDE;
WDTCN = 0xAD;
}
void Timer3_Init()
{
TMR3CN &=0xfb; //关定时器3
TMR3RL = T_3MS; //延时3ms
TMR3 = T_3MS;
}
void Oscillator_Init()
{
int i = 0;
OSCXCN = 0x77;
for (i = 0; i < 3000; i++); // Wait 1ms for initialization
while ((OSCXCN & 0x80) == 0);
OSCICN = 0x08;
}
void Init_Device(void)
{
Reset_Sources_Init();
Port_IO_Init();
Timer3_Init();
#if EXT_OSCIL
Oscillator_Init();
#endif
}
sbit P37=P3^7;
unsigned char val[8]=0,i=0,j=0,n=0;
bit h=0,new=0,head_ok=0,got=0;
void main()
{
unsigned char num;
Init_Device();
IE=0x80; //开总中断
EIE2|=0x21;//开中断7和定时器3中断
while(1)
{
while(!got);
if(val[2]+val[3]==0xff)
num=val[2];
got=0;
}
}
void ex_interrupt() interrupt 19 //下降沿中断,收到低电平开始
{
if(!new)
{
EIE2&=0xdf;//关中断7
P3IF&=0x7f;//清中断7的中断标志
Timer3_Init();//定时器3初始化
TMR3CN|=0x04; //开定时器3
}
else
{
while(P37==0&&TMR3CN<0x80); //等待变高
if(TMR3CN<0x80)
{
P3IF&=0x7f;//清中断7的中断标志
TMR3 = T_0_8MS;//延时0.8ms
TMR3CN|=0x04; //开定时器3
}
}
}
void T3_inter() interrupt 14
{
TMR3CN&=0x7f; //清中断标志
if(head_ok==0&&h==0&&P37==0) h=1;
else if(head_ok==0&&h==1&&P37==1)
{
EIE2|=0x20; //开中断7
TMR3CN&=0xfb; //关定时器3
new=1;h=0;head_ok=1;return;
}
else if(head_ok)
{
TMR3CN&=0xfb; //关定时器3
if(P37)
{
val[n]=val[n]>>1;
val[n]|=0x80;
}
else
val[n]=val[n]>>1;
n=++i/8;
if(n==4)
{
i=0;n=0;new=0; head_ok=0;
got=1;
}
}
else //还原为最原始状态
{
EIE2|=0x20;//开中断7
Timer3_Init();
h=0;new=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -