求助。用三个LS165,将并行数据转为串行数据

2019-07-15 11:02发布

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit SPL=P3^4;
void delay(uint ms)
{
uchar i;
while(ms--) for(i=0;i<120;i++);
}
void main()
{
        SCON=0x10;
        while(1)
        {
        SPL=0;
        SPL=1;
        while(RI==0);
        RI=0;
        P1=SBUF;
        while(RI==0);
        RI=0;
        P0=SBUF;
        while(RI==0);
        RI=0;
        P2=SBUF;
        delay(20);
   }
}

用三个LS165,将并行数据转为串行数据,为什么第一个芯片控制的,控制的第二部分LED,第二个165控制第三部分LED,求助,这是为什么
$U[TP4_0B6LTN56LIGFXULE.png
1PPPRIS8YBTO$TWARZ[IUTL.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
人中狼
1楼-- · 2019-07-15 21:18
在while(1)之前加一个EA=1;,看状态,第一个165的数据没错,是第二和第三对调了,试试改变3个165的输入,确定一下出错的状态
浴沂咏归
2楼-- · 2019-07-16 00:27
 精彩回答 2  元偷偷看……
人中狼
3楼-- · 2019-07-16 04:04
可以看看这个文档

51单片机串口工作方式0和1.rar 下载积分: 积分 -1 分

268.64 KB, 下载次数: 7, 下载积分: 积分 -1 分

浴沂咏归
4楼-- · 2019-07-16 06:30
人中狼 发表于 2017-5-3 13:07
试试这样吧
void main()
{

前辈,多谢多谢,这样确实是对应了,按照开始的方法,再把SCON=0x10放在while(1)里,就可以了,不用加EA=1,和RI=0。但是还是不太懂具体原理,还是多谢前辈了。
真心感谢
3)PLVAA2~S0$XHS)4@XD0KX.png
浴沂咏归
5楼-- · 2019-07-16 08:41
人中狼 发表于 2017-5-3 13:11
可以看看这个文档

发错图拉,现在对啦,多谢多谢前辈。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit SPL=P3^4;
void delay(uint ms)
{
uchar i;
while(ms--) for(i=0;i<120;i++);
}
void main()
{
        while(1)
        {
        SPL=0;
        SPL=1;
                                SCON=0X10;
        while(RI==0);
        RI=0;
        P1=SBUF;
        while(RI==0);
        RI=0;
        P0=SBUF;
                                while(RI==0);
        RI=0;
        P2=SBUF;
        delay(20);
   }
}

@~}GK3A0BB5@4`7NWUDM[LS.png

一周热门 更多>