请问AT89C51寄存器SBUF串行通信接收和发送数据时能不能是数组?
时间:10-02
整理:3721RD
点击:
外接的甲醛浓度传感器发送命令是7个16进制数,返回10个16进制数
接收数据 for(i=0;i<10;i++)
{
RI=0;
out=SBUF;
while(!RI);
Delay1ms(1);
}
发送数据
for(i=0;i<7;i++)
{
TI=0; //清除数据传送标志
SBUF=in;
while(!TI);
Delay1ms(1);//等特数据传送
}
以上是接收部分的。数据都存在bufRxd这个数组里,你去处理它,记得清零啊之类的操作以便后续再进行读取。
下面是发送部分的:
基本上就是这样的。仅供参考。
接收数据 for(i=0;i<10;i++)
{
RI=0;
out=SBUF;
while(!RI);
Delay1ms(1);
}
发送数据
for(i=0;i<7;i++)
{
TI=0; //清除数据传送标志
SBUF=in;
while(!TI);
Delay1ms(1);//等特数据传送
}
单片机接收和发送都是一个字节,接收时把字节存到数组然后判断接收结尾就可以了
51的不可以吧,有DMA功能的单片机就可以了。指定接收和发送的数组,启动串口和DMA就可以了
请问是这样吗?SBUF能按顺序发出来吗?
for(i=0;i<10;i++)
{
RI=0;
out=SBUF;
while(!RI);
Delay1ms(1);
}
哦?那我查查资料,谢谢提醒!
哦?那我查查资料,谢谢提醒!
接收一串数据不能这样搞的,发送和接收的delayms延时都要去掉。给你个参考,如下:
- void USART_Handler(void) interrupt 4
- {
- INT8U temp = 0;
- ES = 0;
- if( TRUE == RI)
- {
- RI = 0;
- if( cntRxd < BUF_MAX )//?o3???êy?Y?1??óD?óê?íê±??í?éò??ìD??áè?êy?Y
- {
- bufRxd[cntRxd++] = Uart_Rec();
- }
- }
- ES = 1;
-
- }
- INT8U Uart_Rec(void)
- {
- return SBUF;
- }
以上是接收部分的。数据都存在bufRxd这个数组里,你去处理它,记得清零啊之类的操作以便后续再进行读取。
下面是发送部分的:
- void Uart_Send_Byte(BYTE dat)
- {
- SBUF = dat; //Send current data
- while (!TI); //Wait for the previous data is sent
- TI = 0; //Clear TI flag
- }
- void Uart_Write(INT8U *buf, INT8U len)
- {
- while (len--) //循环发送所有字节
- {
- Uart_Send_Byte(*buf++);
- }
- }
基本上就是这样的。仅供参考。
百度单片机接收字符串,例程一大堆
你看一下STM32的单片机或者M0、M3内核的MCU资料
好的谢谢!那上面这个程序里的这个变量INT8U temp是什么用途?
好的谢谢!