5759|2

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于在Proteus中仿真串口接发字符串的问题 [复制链接]

这几天在Proteus上调试一个串口接收发送字符串的小程序,要实现的功能简单描叙一下:在Proteus上加两个串口的虚拟终端,一个显示发送来的数据,另一个作为发送端;程序运行后首先发送两个定长字符串,然后在发送端输入字符接收端即时显示。可是调试后出现问题,显示十六进制数不是该字符对应的十六进制编码,程序及运行结果如下:

#include #include #include

#define uint unsigned int

#define uchar unsigned char

//毫秒级延时函数

void delay(unsigned int x)

{

unsigned char i;

while(x--)

{

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

 }

}

//串口初始化

void UART_Init(void)

 {

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

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

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

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

TH1 = 0xfd;

EA = 1; //开总中断

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

TI = 0;

TR1 = 1; //定时器开启

}

//字符发送函数

void put_char(unsigned char data1)

{

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

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

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

}

//字符串发送函数

void putstring(unsigned char *dat)

{

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

{

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

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

delay(5);

}

}

//主函数

void main(void)

{

// unsigned char c = 0;

UART_Init();

delay(200);

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

putstring("----------------------\r\n");

delay(50);

while(1)

{

}

}

//接收字符并发送

void revdata(void) interrupt 4 using 3

{

unsigned char temp;

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

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

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

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

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

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

}

显示结果:

B2 A5 A3 A5 A9 B6 A9 AE A7 80 A6 B2 AF AD 80 98 90 95 91

8E 8E 8E 8D 8A 8D 8D 8D 8D 8D8D 8D 8D 8D 8D 8D 8D 8D

8D 8D 8D 8D 8D 8D 8D 8D 8D 8D 8A

在发送虚拟端口上分别输入0 1 2 3 4 5 6 7 8 9 结果如下:

B0 B1 B2 B3 B4 B5 B6 B7 B8 B9

请问大家问题出在哪里?

[ 本帖最后由 liming1120 于 2010-8-14 18:49 编辑 ]

截屏000.jpg (1.73 MB, 下载次数: 7)

截屏000.jpg
此帖出自单片机论坛

最新回复

解决了也要说说怎么解决的呗,让大家都注意下  详情 回复 发表于 2010-8-17 07:45
点赞 关注
个人签名认真做自己
 

回复
举报

3

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

已经自行解决

已经自行解决
此帖出自单片机论坛
 
个人签名认真做自己
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
解决了也要说说怎么解决的呗,让大家都注意下
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表