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)
{
//数据发送函数
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)