|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
串口调试助手里发送的数据和接收的数据不一样!? |
作者:sxpfine 栏目:单片机 |
我写得串口程序,功能:单片机接收到一个字节数据后,先保存,然后马上发送出去。我是用串口调试助手来做PC端程序来从PC向单片机发送和接收单片机回传数据的。现在的问题是:从串口调试助手里发送的数据和接收的数据不一样,这是什么原因???双方波特率调的可是一致的,下面是程序: #include <AT89X51.H> #include <stdio.h> #define UCHAR unsigned CHAR void main(void) { UCHAR data rcvdata[2],trdata[2]; SCON = 0x50; //串口方式1,允许接收 TMOD = 0x20; //定时器1 定时方式2 TH1 = 0xFD; //11.0592MHZ 9600 波特率 TL1 = 0xFD; TR1 = 1; //启动定时器 while(1) { if(RI) {rcvdata[0]=SBUF; //把接收到的数据保存 RI=0; SBUF=trdata[0]; //把收到的数据通过串口发送出去 while(TI); TI=0; } } } |
2楼: | >>参与讨论 |
作者: sxpfine 于 2005/8/23 16:45:00 发布:
发同样的数据,收到的却不一样 我又试了一下,发同样的数据,收到的却不一样。上面的程序,我刚才贴的时候改了一下,有些笔误,应该是: SBUF=rcvdata[0]; //把收到的数据通过串口发送出去 |
3楼: | >>参与讨论 |
作者: luof521 于 2005/8/24 8:57:00 发布:
和 while(!TI); |
4楼: | >>参与讨论 |
作者: sxpfine 于 2005/8/24 10:17:00 发布:
大家快帮帮我把,我是找不出原因了 楼上说得对,这些错误我都改过了。程序就是实现了简单的发送接收实验,可为什么用串口助手调试时,发送的和收到的数据不一样呢?这是为什么? |
5楼: | >>参与讨论 |
作者: 剑寒情暖 于 2005/8/24 10:45:00 发布:
具体怎么不一样呢?有没有什么规律? 换一个调试助手试一试呢? 用中断接收呢? |
6楼: | >>参与讨论 |
作者: bald 于 2005/8/24 10:55:00 发布:
先查一下硬件 1、看看你的晶震是不是11.0592MHZ 2、检查一下两端的模式设置是否相同,通常单片机端为一位启始位,8位数据位,一位停止位。 3、启动接收进程前清一下接受缓冲区 |
7楼: | >>参与讨论 |
作者: wyz84557 于 2005/8/24 11:53:00 发布:
一次发一个数据的吗?? 你的程序好像一次只能发一个数据吧。接受和发送都要选择16进制的吧? |
8楼: | >>参与讨论 |
作者: magusneo 于 2005/8/24 13:05:00 发布:
是不是rpwt? 我按照你程序在keli环境一块实验板上试了,正常啊 |
9楼: | >>参与讨论 |
作者: stintair 于 2005/8/24 16:09:00 发布:
硬件接的有问题 |
10楼: | >>参与讨论 |
作者: 来人 于 2009/11/27 16:28:50 发布:
我的问题是,接收的数据和发送的数据很一致,就是相差80H,60H,40H,20H,00H,不知道为什么会是这样的 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |