📄 text1.c
字号:
#include <reg51.h>
#include<stdio.h>
sbit P32 = 0xB2;
sbit P10 = 0x90;
xdata unsigned char RecBuffer[8]=0;/* 16个字节的环形缓冲区*/
unsigned char RecBufferIndex=0;/* 16个字节的环形缓冲区指针*/
unsigned char nRxIndex=0;/* 接收单个字符的位指针*/
unsigned char nRxBit=0;/* 单个字符数据位采样值*/
main()
{
TMOD=0x01; /* 定时器0工作在方式1 */
EX0=1; /* 外部中断0允许 */
EA=1; /* 全局中断允许 */
nRxIndex=0x00;
while(1);
}
void int0() interrupt 0 using 0
{ EX0=0; /* 外部中断0禁止 */
TH0=0xFF; /* 写入计数初值到TH0 */
TL0=0x63; /* 写入计数初值到TL0 */
/* 1.5T后溢出 */
TR0=1; /* 定时器0准备开始 */
TF0=0; /* 定时器0中断标志位清0 */
ET0=1; /* 定时器0中断允许*/
}
void Timer0_Overflow() interrupt 1 using 0
{ nRxBit=P32; /* 对管脚P3.2采样 */
P10=~P10; /* P10端口电平信号取反 */
RecBuffer[RecBufferIndex]|=(nRxBit<<nRxIndex);
TH0=0xFF; /* 写入计数初值到TH0 */
TL0=0x97; /* 写入计数初值到TL0 */
/* 1T后溢出 */
TF0=0; /* 定时器0中断标志位清0 */
nRxIndex++;
if(nRxIndex==8)
{ET0=0; /*关闭定时器0中断*/
EX0=1; /* 外部中断0允许 */
nRxIndex=0; /* 接收下一个数据的D0位 */
RecBufferIndex++;
if(RecBufferIndex==8)
RecBufferIndex =0;/* 环形缓冲区存满后从头存放 */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -