双单片机控制流水灯(精)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

案例8 双单片机通信控制流水灯

用串行工作方式进行单片机之间的通信,电路图如下图所示。两个89S51单片机通过串行口进行通信,设置U1使用的晶振频率是11.0592MHz,U2使用的晶振频率是22.1184MHz,U1的RXD接U2的TXD,U1的TXD接U2的RXD,U2接8个发光二极管,要求由U1向U2发送数据,使8个发光二极管按从左到右逐一点亮的流水灯效果。

MCS-51单片机之间的串行异步通信

1.串行口的编程串行口需初始化后,才能完成数据的输入、输出。其初始化过程如下:

(1)按选定串行口的工作方式设定SCON的SM0、SM1两位二进制编码。

(2)对于工作方式2或3,应根据需要在TB8中写入待发送的第9位数据(地址为1,数据为0)。

(3)若选定的工作方式不是方式0,还需设定接收/发送的波特率。

(4)设定SMOD的状态,以控制波特率是否加倍。

(5)若选定工作方式1或3,则应对定时器T1进行初始化以设定其溢出率。

2.案例分析由于串行口通信时传输的“0”或者“1”是通过相对于“地”的

电压区分的,因此使用串行口通信时,必须将双方的“地”线相连以使其具有相同的电压参考点。需要注意的是,异步通信时两个单片机的串行口波特率必须是一样的。由于U1使用的晶振频率是11.0592MHz,U2使用的晶振频率是22.1184MHz,因此二者的串行口初始化程序不完全一样。假设使用240bit/s的波特率,使用串行工作方式1,Tl使用自动装载的方式2,则Ul的TH1应初始化为136,U2的TH1应初始化为16。

对应的程序完成如下功能:Ul和U2进行双工串行通信,Ul给U2循环发送流水灯控制字,U2收到控制字后送到P0口,点亮相应发光二极管,双方都用中断方式进行收发。

(1)单片机U1的源程序

#include

unsigned char sdata=0xfe;

void isr_uart();

void main()

{

TMOD=0X20;

TH1=136;

TL1=136;

SCON=0x40;

PCON=0;

TR1=1;

EA=1;ES=1;

SBUF=sdata;

while(1);

}

void isr_uart() interrupt 4

{

sdata<<=1;

sdata |=1;

if(sdata==0xff) sdata=0xfe; SBUF=sdata;TI=0;

}

(2)单片机U2的源程序#include unsigned char sdata;

void isr_uart();

void main()

{

TMOD=0X20;

TH1=16;

TL1=16;

SCON=0X50;

PCON=0;

TR1=1;

EA=1;ES=1;

while(1) ;

}

void isr_uart() interrupt 4 {

RI=0;sdata=SBUF;

P0=sdata;

}

相关文档
最新文档