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

[复制链接]
 楼主| king3306 发表于 2012-5-30 08:32 | 显示全部楼层 |阅读模式
#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,不知道是不是这样

本帖子中包含更多资源

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

×
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

粉丝
快速回复 在线客服 返回列表 返回顶部