串口通信的一个子程序,求注释?

串口通信的一个子程序,求注释?,第1张

SBUF = *pTI = 0

这里的SBUF与TI都没有定义,应该不在这个函数里。猜测,SBUF,是发送缓冲区。TI是发送标志位。当发送缓冲区有字符时,等待发送标志位为0。毁滑也即这个标志位为0的时候,这个字符已经发送纤毕腊出去了。然后,p++,SBUF=*p,再发送下一个字符。

全部的循环,直到遇到字符串的结束标志'\0'。也即最后一个字符之后的字数芹符串结束标志,这个发送函数也就执行完了。

#include<reg51.h>

void initUART(void)

{

 TMOD=0x20   //M1=1,M0=0 定时器1工作方式2(定时常数重装,8 位)

 SCON=0x50   //SM0=0,SM1=1,REN=1 串口工作方式1,允许接收

 TH1=0xfd    //晶液冲振11.0592时,波喊蔽特率9600

 TL1=TH1     //TL1计数,溢出后,TH1值送入TL1

 EA=1        闹渗歼//开总中断

 ES=1        //允许串口中断

 TR1=1       //启动定时器1

}

void main()

{

while(1)

initUART()  //调用串口初始化子程序

}

void UARTinterrupt( ) interrupt 4

{

if(RI)

  RI=0

P1=SBUF

}

}

串口裂滑收发,要有通信协议。也就是什么时候开始接收,接收到指令后,转发什么数据。这个要知道,才可以写。而且使用不同的51单片机,其内部寄存器配置是不同的。

一般来说,过程如下:

1,配置串口参数、波特率等,开启串口中断;

void Init_UART()

{

}

2,中断函数里写中断响应函数,根据接收的指令或者数据,执行相应的动作;

程序一般为:

void UART_ISR() interrupt x using y

{

串口中断搏弯处理函数

}

x - 单片机的C51中断号

y - 指定使用的当前工作寄肆银腊存器组号(0-3 PSW中的RS0,RS1组合)

3,主程序

int main(void)

{

Init_UART()

while(1)

{

//数据发送函数

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12563075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存