串行口通信C51程序?

串行口通信C51程序?,第1张

 三、程序设计

本讲设计实例程序如下:

#include “AT89X52.h” (1)

void Init_Com(void) ( 2)

{

TMOD = 0x20( 3)

PCON = 0x00( 4)

SCON = 0x50( 5)

TH1 = 0xE8( 6)

TL1 = 0xE8( 7)

TR1 = 1( 8)

}

void main(void) ( 9)

{

unsigned char dat( 10)

Init_Com(); ( 11)

while(1) ( 12)

程序详细说明:

(1)头文件包含。

(2)声明串口初始化程序。

(3)设置定时器1 工作在模式2,自动装载初值(详见第二讲)。

(4)SMOD 位清0,波特率不加倍。

(5)串行口工作在方式1,并允许接收。

(6)定时器1 高8 位赋初值。波特率为1200b/s(7)定时器1 低8 位赋初值。

(8)启动定时器。

(9)主函数。

(10)定义一个字符型变量。

(11)初始化串口。

(12)死循环。

(13)如果接收到数据。

(14)将接收到的数据赋给之前定义的变量。

(15)将接收到的值输出到P0 口。

(16)对接收标志位清0,准备再次接收。

(17)将接收到的数据又发送出去。

(18)查询是否发送完毕。

(19)对发送标志位清0。

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

{

//数据发送函数

}

}

要串口通讯其实是很简单的:

只要设置以下参数:TMOD TH1 TL1 SMOD(PCON) SCON EA ES TR1等。

以下代码,供初始化用参考:

MOV TMOD,#20H 定时器1用作波特率发生器

ORL PCON,#80H

MOV TL1,#0F3H 4800波特率的初值,板子使用12M晶振,初值=256-12000000/32/12/2400

MOV TH1,#0F3H

MOV SCON,#50H 串口的工作方式,设置为方式2

SETB EA 打开总中断

SETB ES 打开串口中断

SETB TR1 启动波特率发生

不同的机子只要设置相同的波特率,理论上就可以通讯。

MOV SBUF,A 将A中的数据发出去

MOV A,SBUF 将收到的数据放入A中

至于其它细节性的东西,可以参考相关书本或文章。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存