打印

74ls164串行转并行遇到的问题

[复制链接]
1452|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
void Delay(uint x)
{
  uchar i;
while(x--)
{
   for(i=0;i<120;i++);
}
}
void main()
{
  uchar c = 0x80;
// SCON = 0x00;
TI = 1;
while(1)
{
   c = _crol_(c,1);
  SBUF = c;
while(TI==0);
TI = 0;
  Delay(400);
}
}


在上面的程序中我把SCON = 0x00;或者把SCON = 0x00和
while(TI==0);TI = 0;都注释掉。程序也没问题啊
求解释

貌似串口默认的工作方式是0,不知道是不是这样

QQ截图20120530082632.png (21.65 KB )

QQ截图20120530082632.png

相关帖子

沙发
airwill| | 2012-5-30 08:50 | 只看该作者
while(TI==0);TI = 0;都注释掉。程序也没问题啊
正常情况下, 这两条是不能注释掉的, 因为这是保证下次发送数据是 SBUF 肯定是空的, 避免影响上次的数据发送. 但特殊地: 这里有下面的 Delay(400); 足够时间让 SBUF 清空了, 所以注释掉它没有什么影响.
SCON = 0x00; 真好是复位状态. 仿真系统是没有关系, 但是在实际的应用中希望还是有完整的硬件初始化.

使用特权

评论回复
板凳
king3306|  楼主 | 2012-5-30 10:50 | 只看该作者
首先非常感谢airwill的回答
学生还有个疑问,就是很多程序在初始化串口的时候都会有TI=1;
TI=1我知道是SBUF缓冲区发送完8位结束的标志,初始化的时候给TI=1是何用意?
请多多指教 2# airwill

使用特权

评论回复
地板
airwill| | 2012-5-30 19:50 | 只看该作者
初始化串口的时候会有 TI=1;

想必是软件触发 TI, 引起中断服务吧, 我没有使用过这种方式.

使用特权

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

本版积分规则

6

主题

38

帖子

2

粉丝