#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
}
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发送数据,说什么要同步通信,但是我这个只有一单片机啊,怎么同步,知道的指点一下吧,谢谢了!
串口通信方式0 想要从P3^0读出数据,但是读错了
串行口方式0被称为同步移位寄存器的输入/输出方式,主要是扩展并行输入或输出口。数据有RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后,波特率固定为fosc/12。在该模式下,串行口的SBUF是作为同步移位寄存器使用的。在串行口发送时,SBUF相当于一个并行进入、串行输出的移位寄存器,由单片机内部总线并行接收8位数据,并从RXD信号线串行输出。在接收操作时,它又相当与一个串行输入、并行输出的移位寄存器。
我感觉,你的主程序里,while(1)那有问题,到while1那程序就停了。你应该把发送的数据放到while(1)里,让他循环执行发送。再其他的,我也不知道了。
回答于 · 2022-07-28 19:41
这是发送4个字节的程序,你看看。
for(i=0;i<4;i++)
{SBUF=SenData[i];
while(!TI); //等待发送结束
TI=0; //软件清发送中断标志位
}
回答于 · 2022-07-30 17:15