在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 2523|回复: 3

求助:请大家帮忙看看这个程序有什么问题,为什么总是接收不到正确的数据?

[复制链接]
发表于 2005-8-10 09:37:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
/*rs232.c*/
#include "reg51.h"  /*载入51头文件*/
/*定义I/O端口*/
sbit OK_LED =  P1^6;
sbit ERROR_LED =  P1^5;
sbit ON_KEY =  P1^4;
sbit S_LED =  P1^3;
sbit R_LED =  P1^2;
/*------------*/
/*     b7   b6   b5   b4   b3   b2   b1   b0
TCON  TF1  TR1  TF0  TR0  IE1  IT1  IE0  IT0
SCON  SM0  SM1  SM2  REN  TB8  RB8  TI   RI
TMOD  GATE C/T~ M1   M0   GATE C/T~ M1   M0
PCON  SMOD --   --   --   GF1  GF0  PD   IDL */
/*初始化串行端口子程序*/
void init_rs232() /*通信协议:<9600 N 8 1>*/
{
SCON=0x50; /*设定串行接口工作于模式1*/
TMOD=0x20;/*设定计时器工作于模式2 */
TCON=0x00;
/*设定波特率为9600bps*/
PCON=0x00;
TH1=0xFD;
    TL1=0xFD;
TR1=1;/*启动计时器1开始计数*/
}
void init_board()
{
/*给各个端口赋值*/
OK_LED = 1;
ERROR_LED = 1;
S_LED = 1;
R_LED = 1;
}
/*发送子程序*/
void send(unsigned char s)/*送出一个字符*/
{
if (TI == 0)/*循环*/
SBUF = s;/*将字符串送至串行输出缓冲器*/
else /*判断TI是否为1*/  
/*清除发送中断标志,TI=0;*/
TI = 0;


}
/*接收子程序*/
char rev(unsigned char r)/*送出一个字符*/
{
if (RI == 0)/*循环*/
r = SBUF;/*将字符串送至串行输出缓冲器*/
else
RI = 0;
/*判断TI是否为1*/  
/*清除发送中断标志,TI=0;*/
//else
//RI = 0;
}

/*主程序*/
void main(void)
{
char c0 = 0x66;
char c1;
init_rs232();/*初始化串行端口*/
init_board();/*板卡*/
while(1)
{   
/*设置发送指示灯*/
if (ON_KEY != 0)
{
init_board();/*板卡*/
}
if (ON_KEY == 0)
{
//if (TI == 0)
//{
//SBUF = c0;
//if (RI == 0)   
//c1 = SBUF;
//RI = 0;
//TI =0;
//
// }
send(c0);
    rev(c1);
if (TI == 0)
   
S_LED = 0;/*点亮发送灯*/
    else
S_LED = 1;/*熄灭发送灯*/
/*设置接收指示灯*/
if(RI == 0)
R_LED = 0;/*点亮接收灯*/
else
R_LED = 1;/*熄灭接收灯*/

/*比较接收数据与发送数据*/
if (c1 == c0)
OK_LED = 0;
else
OK_LED = 1;
if (c1 != c0)
ERROR_LED = 0;
else
ERROR_LED = 1;
}

}
}
 楼主| 发表于 2005-8-10 09:39:18 | 显示全部楼层

求助:请大家帮忙看看这个程序有什么问题,为什么总是接收不到正确的数据?

在发送子程序里,好像是SBUF的值根本就没有改变,是不是c0根本就没有送到SBUF里,可是为什么呢,我是个新手,刚刚接触单片机知识,可能有一些幼稚的错误,希望大家能给些意见指导,谢谢了。
发表于 2005-8-10 12:37:29 | 显示全部楼层

求助:请大家帮忙看看这个程序有什么问题,为什么总是接收不到正确的数据?

比如送数据这么写
sbuf = mychar;
while(!TI){}
TI = 0;
 楼主| 发表于 2005-8-10 13:15:19 | 显示全部楼层

求助:请大家帮忙看看这个程序有什么问题,为什么总是接收不到正确的数据?



下面引用由laobai2005/08/10 12:37pm 发表的内容:
比如送数据这么写
sbuf = mychar;
while(!TI){}
TI = 0;


谢谢您的回复,我试过了,结果还是不变,SBUF里的值始终没有变化,我想会不会是设置有问题呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-1-7 10:15 , Processed in 0.038058 second(s), 13 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表