编制C51程序,实现双机通讯,9位数据传输,发送方和接收方将数据显示在P1口,利用第九位控制蜂鸣器。
双机怎么连接
既然是串口通讯,当然是接TXD RXD,交叉接,再接个公共的地线
如果不是特殊要求,建议用8位数据模式传两次,这样方便用电脑调试,电脑不支持9位数据模式。
单片机之间直接用9位模式也行,你只要知道去哪里读第九个bit就可以了
建议采用模拟SPI
下面是其他芯片例程,其实原理一样
接线图
#define SCK3_L GPIOB->PBC = GPIO_PIN_3
#define SCK3_H GPIOB->PBSC = GPIO_PIN_3
#define CSN3_L GPIOB->PBC = GPIO_PIN_4
#define CSN3_H GPIOB->PBSC = GPIO_PIN_4
#define MOSI3_L GPIOB->PBC = GPIO_PIN_6
#define MOSI3_H GPIOB->PBSC = GPIO_PIN_6
#define MISO3 (GPIOB->PID & GPIO_PIN_5)
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/
//函数名:SpisendByte(INT8U dat)
//输入:
//输出:无
//功能描述:
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/
u8 SpiTxRxByte3(u8 dat)
{
u8 i,temp;
temp = 0;
SCK3_L;
for(i=0; i<8; i++)
{
if(dat & 0x80)
{
MOSI3_H;
}
else MOSI3_L;
dat <<= 1;
SCK3_H;
delay_us(50);
temp <<= 1;
if(MISO3!=0) temp++;
SCK3_L;
delay_us(50);
}
return temp;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/
//函数名:void halSpiReadBurstReg3(u8 addr, u8 *buffer, u8 count)
//输入:
//输出:无
//功能描述:从机取数据
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/
void halSpiReadBurstReg3(u8 addr, u8 *buffer, u8 count)
{
u8 i;
CSN3_L;
delay_us(50);
while (MISO3!=0);
for (i = 0; i<count; i++)
{
buffer[i] = SpiTxRxByte3(0X55);
}
CSN3_H;
}
//从机读取数据
halSpiReadBurstReg3(0x55,spiTab,9);
printf("spiTab[0]=%x",spiTab[0]);
printf(" spiTab[1]=%x",spiTab[1]);
printf(" spiTab[2]=%x",spiTab[2]);
....................................................
printf(" spiTab[8]=%x\r\n",spiTab[8]);