protous實(shí)驗(yàn)報(bào)告兩個(gè)單片機(jī)之間的串行通信.pdf
約4頁PDF格式手機(jī)打開展開
protous實(shí)驗(yàn)報(bào)告兩個(gè)單片機(jī)之間的串行通信,兩個(gè)單片機(jī)之間的串行通信 一、設(shè)計(jì)要求 在某個(gè)控制系統(tǒng)中有u1、u2這兩個(gè)單片機(jī)?u1單片機(jī)首先將p1端口指撥開關(guān)數(shù)據(jù)載入sbuf?然后經(jīng)由txd將數(shù)據(jù)傳送給u?單片機(jī)?u?單片機(jī)將接收數(shù)據(jù)存入sbuf?再由sbuf載入累加器?并輸出至p?端口?點(diǎn)亮相應(yīng)端口的led。 二、實(shí)驗(yàn)所需元器件 單片機(jī)at89c51 瓷片電容...
![](http://img.queshao.com/images/pcgzh.gif)
![](http://preview.queshao.com/tobuy/252994.gif)
內(nèi)容介紹
此文檔由會(huì)員 dingpeng52 發(fā)布
兩個(gè)單片機(jī)之間的串行通信
一、設(shè)計(jì)要求
在某個(gè)控制系統(tǒng)中有U1、U2這兩個(gè)單片機(jī)?U1單片機(jī)首先將P1端口指撥開關(guān)數(shù)據(jù)載入SBUF?
然后經(jīng)由TXD將數(shù)據(jù)傳送給U?單片機(jī)?U?單片機(jī)將接收數(shù)據(jù)存入SBUF?再由SBUF載入累
加器?并輸出至P?端口?點(diǎn)亮相應(yīng)端口的LED。
二、實(shí)驗(yàn)所需元器件
單片機(jī)AT89C51 瓷片電容CAP-22pF 晶振CRYSTAL 電解電容CAP-ELEC
電阻RES 按扭BUTTON 發(fā)光二極管
LED-YELLOW
發(fā)光二極管LED?
RED
開關(guān)SWITCH 撥碼開關(guān)DIPSW?S 發(fā)光二極管LED?
GREEN
發(fā)光二極管LED?
RED
三、電路原理圖?
兩個(gè)單片機(jī)之間的串行通信電路圖
四、程序設(shè)計(jì)
這兩個(gè)單片機(jī)均工作在半工狀態(tài)?U?將P?端口的狀態(tài)通過TXD發(fā)半空給U??而U?接收
U?的數(shù)據(jù)?然后控制P1端口的LED顯示。因此?需編寫兩個(gè)不同的程序?其程序流程圖如
下所示?
Y
N
N
單片機(jī)1開始
設(shè)置波特率
串行寄存器設(shè)置
啟動(dòng)TR
讀撥入鍵值
載入SBUF發(fā)送
鍵值是否與前次相同
單片機(jī)2開始
串行寄存器設(shè)置
清除RI
啟動(dòng)TR
載入SBUF發(fā)送
數(shù)據(jù)暫存
數(shù)據(jù)輸出到P1
結(jié)束
結(jié)束
設(shè)置波特率
是否接收到數(shù)據(jù)?
是否發(fā)送完畢? 五、C語言程序?
U1的C語言程序?
#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
void send(uchar state)
{
SBUF=state;
while(TI==0);
TI=0;
}
void SCON_init(void)
{
SCON=0x50;
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TI=0;
TR1=1;
ES=1;
}
void main()
{
P1=0xff;
SCON_init();
while(1)
{
send(P1);
}
}
U2的C語言程序?
#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
uchar state;
void receive()
{
while(RI==0)
state=SBUF;
RI=0;
}
void SCON_init(void)
{
SCON=0x50;
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
RI=0;
TR1=1;
}
void main()
{
SCON_init();
while(1)
{
receive();
P1=state;
}
}
一、設(shè)計(jì)要求
在某個(gè)控制系統(tǒng)中有U1、U2這兩個(gè)單片機(jī)?U1單片機(jī)首先將P1端口指撥開關(guān)數(shù)據(jù)載入SBUF?
然后經(jīng)由TXD將數(shù)據(jù)傳送給U?單片機(jī)?U?單片機(jī)將接收數(shù)據(jù)存入SBUF?再由SBUF載入累
加器?并輸出至P?端口?點(diǎn)亮相應(yīng)端口的LED。
二、實(shí)驗(yàn)所需元器件
單片機(jī)AT89C51 瓷片電容CAP-22pF 晶振CRYSTAL 電解電容CAP-ELEC
電阻RES 按扭BUTTON 發(fā)光二極管
LED-YELLOW
發(fā)光二極管LED?
RED
開關(guān)SWITCH 撥碼開關(guān)DIPSW?S 發(fā)光二極管LED?
GREEN
發(fā)光二極管LED?
RED
三、電路原理圖?
兩個(gè)單片機(jī)之間的串行通信電路圖
四、程序設(shè)計(jì)
這兩個(gè)單片機(jī)均工作在半工狀態(tài)?U?將P?端口的狀態(tài)通過TXD發(fā)半空給U??而U?接收
U?的數(shù)據(jù)?然后控制P1端口的LED顯示。因此?需編寫兩個(gè)不同的程序?其程序流程圖如
下所示?
Y
N
N
單片機(jī)1開始
設(shè)置波特率
串行寄存器設(shè)置
啟動(dòng)TR
讀撥入鍵值
載入SBUF發(fā)送
鍵值是否與前次相同
單片機(jī)2開始
串行寄存器設(shè)置
清除RI
啟動(dòng)TR
載入SBUF發(fā)送
數(shù)據(jù)暫存
數(shù)據(jù)輸出到P1
結(jié)束
結(jié)束
設(shè)置波特率
是否接收到數(shù)據(jù)?
是否發(fā)送完畢? 五、C語言程序?
U1的C語言程序?
#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
void send(uchar state)
{
SBUF=state;
while(TI==0);
TI=0;
}
void SCON_init(void)
{
SCON=0x50;
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TI=0;
TR1=1;
ES=1;
}
void main()
{
P1=0xff;
SCON_init();
while(1)
{
send(P1);
}
}
U2的C語言程序?
#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
uchar state;
void receive()
{
while(RI==0)
state=SBUF;
RI=0;
}
void SCON_init(void)
{
SCON=0x50;
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
RI=0;
TR1=1;
}
void main()
{
SCON_init();
while(1)
{
receive();
P1=state;
}
}