基于proteus的51单片机仿真实例六十二、串口发送和接收字符串实例

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

基于proteus的51单片机仿真实例六十二、串口发送和接收字符串实例

标签: proteus单片机串口实例字符2010-02-19 23:30

1、在上一实例中,我们利用proteus中自带的虚拟终端实现了单片机通过串口向主机发送字符串的功能。本例中我们加入串口接收字符的功能

2、为了实现单片机通过终端接收字符的功能,我们需要在电路中再加入一路虚拟终端,新加入的这一路虚拟终端连接到单片机的串行接收端口RXD上,在仿真运行后,在该终端输入字符,然后将字符发送到单片机的串行接收端,

3、在keil c51中新建工程ex50,编写如下程序代码,编译并生成ex50.hex文件

// 实例50:利用虚拟中断实现串口数据的发送和接收

//

#include //包含头文件

//毫秒级延时函数

void delay(unsigned int x)

{

unsigned char i;

while(x--)

{

for(i = 0;i < 120;i++);

}

}

//字符发送函数

void putchar(unsigned char data1)

{

SBUF = data1; //将待发送的字符送入发送缓冲器

while(TI == 0); //等待发送完成

TI = 0; //发送中断标志请0

}

//字符串发送函数

void putstring(unsigned char *dat)

{

while(*dat != '\0') //判断字符串是否发送完毕

{

putchar(*dat); //发送单个字符

dat++; //字符地址加1,指向先下一个字符

delay(5);

}

}

//主函数

void main(void)

{

unsigned char c = 0;

SCON = 0x50; //串口方式1 ,允许接收

TMOD = 0x20; //T1工作于方式2

PCON = 0x00; //波特率不倍增

TL1 = 0xfd; //波特率设置

TH1 = 0xfd; //

EA = 1; //开总中断

ES = 1; //开串口接收中断

//TI = 0;

TR1 = 1; //定时器开启

delay(200);

putstring("Receiving from 8051...\r\n"); //串口向终端发送字符串,结尾处回车换行 putstring("----------------------\r\n");

delay(50);

while(1)

{

}

}

//

void revdata(void) interrupt 4

{

unsigned char temp;

if(RI == 0) return; //如果没有接收中断标志,返回

ES = 0; //关闭串口中断

RI = 0; //清串行中断标志位

temp = SBUF; //接收缓冲器中的字符

putchar(temp); //将接收的字符发送出去

ES = 1; //开启串口中断

}

4、在proteus中新建仿真文件ex50.dsn,电路原理图如下所示

5、将ex50.hex文件载入at89c51中,启动仿真,在vertual terminal1中输入字符,vertual terminal 中会即时显示出输入的字符。下图是程序运行结果。

举报|

23 次阅读| 0 个评论

相关文档
最新文档