📄 51通讯程序
字号:
#include <reg51.h>
#include <string.h>
//sbit BT_SND =P0^0;
//sbit BT_REC =P1^1;
sbit P_RXD = P0^0; //数据发送端
sbit P_READY = P0^1; //READY,准备好数据接收状态指示 "0",Ready Status;"1",Busy Status
sbit P_RESET = P0^2; //语音板复位端
sbit WATCH_DOG = P2^6;
/**********************************************
IO 口模拟232通讯程序 占用定时器0
**********************************************/
//#define MODE_QUICK
//#define F_TM TF0
#define TIMER0_ENABLE /* TL0=TH0;*/ TR0=1;
#define TIMER0_DISABLE TR0=0;
sbit ACC0= ACC^0;
sbit ACC1= ACC^1;
sbit ACC2= ACC^2;
sbit ACC3= ACC^3;
sbit ACC4= ACC^4;
sbit ACC5= ACC^5;
sbit ACC6= ACC^6;
sbit ACC7= ACC^7;
unsigned char flag;
void wait(void)
{
int i;
for(i=0;i<20;i++)
{ ;}
}
void IntTimer0() interrupt 1 using 0
{
flag=1;
}
//发送一个字符
void PSendChar(unsigned char t)
{ int i;
unsigned char text,te;
TL0=0XA0;
ACC=t;
TIMER0_ENABLE; P_RXD=0; flag=0; while(flag==0); //启动位
P_RXD=ACC0; flag=0; while(flag==0);//先送出低位
P_RXD=ACC1; flag=0; while(flag==0);
P_RXD=ACC2; flag=0; while(flag==0);
P_RXD=ACC3; flag=0; while(flag==0);
P_RXD=ACC4; flag=0; while(flag==0);
P_RXD=ACC5; flag=0; while(flag==0);
P_RXD=ACC6; flag=0; while(flag==0);
P_RXD=ACC7; flag=0; while(flag==0);
P_RXD=1; flag=0; while(flag==0);//停止位
// P_RXD=1; flag=0; while(flag==0);//停止位
while(P_READY==1)
{
wait(); //直到接收准备好
WATCH_DOG=!WATCH_DOG;
}
TIMER0_ENABLE; P_RXD=0; flag=0; while(flag==0);
text=t;
for(i=0;i<8;i++) //1个字节
{
te = (text&0x01); //取最低位
if(te!=1) P_RXD=0; //最低位不是1
else P_RXD=1; //最低位是1
text=text>>1; //最低位右移出,继续判断左边1位
flag=0; while(flag==0);
}
// while(P_READY==1) wait();
P_RXD=1; flag=0; while(flag==0); //结束位
TIMER0_DISABLE; //停止timer
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -