串口发送接收程序查询法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//XTAL最好f=11.0592
//SCON=0x50(接收数据) (T1做bps发生器)
// =0x40(不接收数据) TMOD=0x20(T1 定时 方式2)
// → →TR1=1 →RI/TI==1? → 中断法(事先开EA,ES,软件清零)
// PCON=0x80(SMOD加倍) TL1=TH1=X; ↓ ↓
// =0x00(不加倍) (做发生器不能开T1中断) 查询法 → 处理SBUF(核心)
//发数据格式:SBUF=。。;
// while(!TI);TI=0;

/*接受PC机传来的数据赋给P0口,并将SBUF里数据传回*/
#include
unsigned char tmp;
void send_char(unsigned char txd);
main()
{
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1=TL1=0xFD; // 波特率9600

SCON = 0x50; // 设定串行口工作方式1 允许接收,相当于下面三句
//SM0=0;
//SM1=1;
//REN=1;
PCON =0x00; // 波特率不倍增
TR1 = 1; // 启动定时器1
while(1)
{

if(RI==1) // 是否有数据到来
{
RI = 0;
tmp = SBUF; // 暂存接收到的数据
P0 = tmp; // 数据传送到P0口
send_char(tmp); // 回传接收到的数据
}
}
}
void send_char(unsigned char txd)
// 传送一个字符
{
SBUF = txd;
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
}







/*只每隔1s发RICHMU 不接受数据 */
/*#include
#define uchar unsigned char
#define uint unsigned int
uchar code trdata[]={'R','I','C','H','M','C','U',0x0d,0x0a,0x00};
void delay1ms(uint i) //回车换行ASCII码//字符串结束标志
{
uchar j;
while(i--)
{
for(j=0;j<115;j++) //1ms基准延时程序
{
;
}


}
}

main()
{
uchar i;
SCON= 0x40; //串口方式1不允许接收
//SM0=0;
//SM1=1;
//REN=0;
PCON=0x80; //SMOD=1
TMOD= 0x20; //定时器1定时方式2
TH1= 0xff; //11.0592M 57600波特率
TL1= 0xff;
TR1= 1; //启动定时器
while(1)
{
i=0;
while(trdata[i]!=0x00)
{
SBUF=trdata[i];
while(!TI);
TI=0;
i++;
}
delay1ms(1000);

}
} */

相关文档
最新文档