4
收藏
微博
微信
复制链接

串口通信方式0 想要从P3^0读出数据,但是读错了

#include
sbit P30=P3^0;
sbit P31=P3^1;
#define uchar unsigned char
#define uint unsigned int
uchar Data;
uint num;
void delay(uint n)
{
        uint i,j;
        for(i=0;i                 for(j=0;j<110;j++);
}
void serial_init()        //串口初始化函数
{
        SM0=0;         //方式0 同步移位寄存器
        SM1=0;
        ES=1;
        EA=1;
        TI=0;
}
void main()
{
        uchar i;
        serial_init();
        SBUF=0xaa;
        for(i=0;i<8;i++)
        {       
                Data=Data<<1;
                Data=Data|P30;                                               
        }
        while(1);
}
void ser()interrupt 4  //串口中断函数
{
        TI=0;
        P1=Data;
}
P1一直为0,就是我不知道怎样控制每次读数据正好是P3^0发送数据,说什么要同步通信,但是我这个只有一单片机啊,怎么同步,知道的指点一下吧,谢谢了!

收藏 1052 0 4
粉丝
0
关注
0
主题
1
我也是初学,不过我没搞懂你这是想干啥,从别人的书里拷贝了一段,希望对你有帮助。
串行口方式0被称为同步移位寄存器的输入/输出方式,主要是扩展并行输入或输出口。数据有RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后,波特率固定为fosc/12。在该模式下,串行口的SBUF是作为同步移位寄存器使用的。在串行口发送时,SBUF相当于一个并行进入、串行输出的移位寄存器,由单片机内部总线并行接收8位数据,并从RXD信号线串行输出。在接收操作时,它又相当与一个串行输入、并行输出的移位寄存器。

我感觉,你的主程序里,while(1)那有问题,到while1那程序就停了。你应该把发送的数据放到while(1)里,让他循环执行发送。再其他的,我也不知道了。
0

回答于 · 2022-07-28 19:41

粉丝
1
关注
0
主题
9
我也看了这句话,但是我事先已经将他存储在了Data里了
0

回答于 · 2022-07-29 12:24

粉丝
0
关注
0
主题
5
我的意思是,我怎样控制P3^0每送出一位数据,Data正好移位:
0

回答于 · 2022-07-29 17:20

粉丝
0
关注
0
主题
6
你把数据装入SBUF,单片机就会自动发送出去,你就查询、等待TI置位就可以发送下一字节了。

这是发送4个字节的程序,你看看。
             for(i=0;i<4;i++)
                   {SBUF=SenData[i];
                    while(!TI);        //等待发送结束
                    TI=0;              //软件清发送中断标志位
                   }
0

回答于 · 2022-07-30 17:15