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

更新时间:2024-04-04 10:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于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(\//串口向终端发送字符串,结尾处回车换行 putstring(\ 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 个评论

本文来源:https://www.bwwdw.com/article/u0tr.html

Top