打印
[国产单片机]

求助 STC 串口通信

[复制链接]
3452|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qiyinxian|  楼主 | 2009-4-27 23:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序是让串口调试工具发送信息给单片机,单片机再发回来,但是为什么程序在下面两句语句顺序上会有影响?
#include<reg52.h>
sbit  WE=P1^2;
unsigned   char      a,flag;
main()
{

WE=0;
REN=1;
SM0=0;
SM1=1;
TR1=1;
TMOD=0x20;
TH1=0xfd;    
EA=1;
ES=1;    
    while(1)
    {
         while(1) 
               {     
                    if(flag==1)
                    {   
                        ES=0;
                        flag=0;
                        SBUF=a;
                        while(TI==0);
                        TI=0; // 注意两句语句
                        ES=1; //     顺序      这样的顺序经试验是正确的,调换为什么会一直不停地发 “ff ff ff ff ff ff ff ....”?为什么是“ff ....”呢?                    }
             }
     }
}

void  ter()  interrupt   4
{
 RI=0;
 P0=SBUF;
 flag=1;
 a=SBUF;


}     


望各位大哥不吝赐教,太感谢了!    

相关帖子

沙发
qiyinxian|  楼主 | 2009-4-27 23:14 | 只看该作者

使用特权

评论回复
板凳
icecoffelin| | 2009-4-27 23:20 | 只看该作者

没有对a进行初始化

没有对a进行初始化 

使用特权

评论回复
地板
qiyinxian|  楼主 | 2009-4-27 23:20 | 只看该作者

sbit WE=0; 是我的单片机上led的关闭语句,
因为P0还接上了发光二极管

使用特权

评论回复
5
zyok| | 2009-4-27 23:25 | 只看该作者

...

当执行ES=1;后马上进入中断,把SUBF中的FF赋给a,然后又如此循环发ff...

使用特权

评论回复
6
zyok| | 2009-4-27 23:29 | 只看该作者

。。。。。

 先执行TI=0; 
 所以ES=1;后就不会引起发送中断,所以是对的

使用特权

评论回复
7
qiyinxian|  楼主 | 2009-4-29 17:53 | 只看该作者

谢谢大家!

 谢谢大家!

使用特权

评论回复
8
tonywei| | 2009-6-26 10:44 | 只看该作者

你的中断程序里怎么不管是接收中断还是发送中断呢?

中断程序中应该判断是接收产生的还是发送产生的:
/* 串口1中断 */
com_int() interrupt 4
{
    if(TI)        /* 发送产生的中断 */
    {    TI=0;
        u1t_f=0;    /* 发送完毕 */
    }
    if(RI)        /* 接收产生的中断 */
    {    u1r_c=SBUF;    /* 接收到的数据 */
        RI=0;
        u1r_f=1;    /* 接收到数据标志 */
    }
}

使用特权

评论回复
9
jiajia6254| | 2009-8-14 23:26 | 只看该作者
要注意TI,中断后先给TI清零

使用特权

评论回复
10
zlj76954143| | 2010-6-14 22:25 | 只看该作者
谢谢分享!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

50

帖子

0

粉丝