51单片机通过串口实现数据的发送与接收程序

51单片机通过串口实现数据的发送与接收程序,第1张

串口裂滑收发,要有通信协议。也就是什么时候开始接收,接收到指令后,转发什么数据。这个要知道,才可以写。而且使用不同的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)

{

//数据发送函数

}

}

我用颤码贺的新唐芯片,8051内核,跟51差不多,望采纳茄派

void UART_Initial (void)

{

P02_Quasi_Mode //Setting UART pin as Quasi mode for transmit

P16_Quasi_Mode //Setting UART pin as Quasi mode for transmit

SCON_1 = 0x50 //UART1 Mode1,REN_1=1,TI_1=1

T3CON = 0x08 //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1

clr_BRCK

RH3= HIBYTE(65536 - (1000000/u32Baudrate)-1) /*16 MHz */

RL3= LOBYTE(65536 - (1000000/u32Baudrate)-1) /*16 MHz */

set_TR3//Trigger Timer3

}

以上是初始化的

void Send_Data_To_UART1(UINT8 c)

{

TI_1 = 0

SBUF_1 = c

while(TI_1==0)

}

这个是发送模世

void UART_isr (void) interrupt 4 //串行中断服务程序

{

if (RI_1==1)

{ /* if reception occur */

clr_RI_1/* clear reception flag for next reception */

Receive_Date[c] = SBUF_1

if (Receive_Date[0] == First_Date)

{

c++

}

else if(Receive_Date_Size >0 &&Receive_Date_Size <4)

{

c++

}

else if(Receive_Date[c] == Last_Date &&Receive_Date_Size ==4)

{

c = 0

Flag_Receive_One = 1

}

else

{

c = 0

}

}

}

接收

首先需要对串口初始化,配置波特率,波特率和时钟强相关。

然后就可以发送接收了,发送接收分为中断和轮询。

发送时就是向一个寄存器写入数据,mcu会自动将寄存器的数据送入发送缓冲区,mcu自动将缓冲区的数据通过tx线编程电平发送出去。

接收也是一样,外槐此部送来的数据如磨mcu自动转化为数字信号存放在接收缓渣明斗冲区,将第一个数据依次送入接收寄存器,如果中断使能会有中断,在中断里读取接收寄存器的数据,


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存