欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
52單片機雙機通信Proteus仿真程序
[打印本頁]
作者:
杜鳴磊
時間:
2020-5-18 08:17
標題:
52單片機雙機通信Proteus仿真程序
在PROTEUS上采用雙單片機A和B,采取TXD連接另一個單片機的RXD,建立一對一通信A外接4個按鍵,編號1~3;B外接一個數碼管,平時顯示0。 A按鍵后,B顯示相應鍵號0.3秒;
進階要求1:A的TXD與B的RXD間加入按鍵開關K,通過K的ON/OFF來控制通信連接的有效和無效;
運行中,K由ON改為OFF,通信無效時,B不響應A的按鍵表示通信未建立;
進階2:通信無效時,B顯示9,表示通信無效;運行中K由OFF改為ON,系統自動回復正常
1,首先考慮資源分配
波特率設置要用定時器1自動重裝載模式。
定時器1用于產生10ms中斷
定時器2用來產生20ms中斷
故可選用89c52單片機
2:主函數完成3個定時器初始化函數,之后在while(1)休眠或啥也不干。
3:定時器2中斷服務函數:
自動重裝載模式不需要重置本定時器
按鍵掃描函數獲取鍵號,若無按鍵鍵號為0
重置并啟動超時定時器(tim0)
根據S_OK狀態點亮LED(S_OK=0時點亮)
4:接收中斷模塊
S_OK置1
關閉超時定時器
5:10ms定時中斷模塊
S_OK=0
關閉超時定時器
接收B板模塊
同樣需要3個定時器
1:main函數中三個定時器初始化
2:接收中斷
直接顯示鍵號,開啟0.3s定時器
重置啟動超時定時器
發送信息給A板
3:0.3s定時中斷
關閉本定時器
顯示0
4:超時中斷函數
S_OK=0
數碼管顯示9
關閉本定時器
關閉0.3s定時器
發送A板主函數文件程序示例。完整程序和proteus圖見附件。
51hei.png
(6.4 KB, 下載次數: 52)
下載附件
2020-5-18 14:16 上傳
單片機源程序如下:
#include <reg52.h>
#include"init.h"
//sfr T2MOD=0XC9;
void send(uchar num); //聲明子函數的時候要加分號
void delay(int z) //晶振11.592.延時z毫秒
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void key()
{
if(key3==0)
flash=4;
else if(key2==0)
flash=3;
else if(key1==0)
flash=2;
else if(key0==0)
flash=1;
else
flash=0;
}
void send(uchar num)
{
SBUF=num; //把發送的內容寫進sbuf,自動發送 ,發送數據時TI為0,!0為1
while(!TI); //!邏輯非,發送完數據,發送完數據時TI為1.!1為0,停止發送
// led=1;
TI=0; //TI需要軟件清零
}
void tim0() interrupt 1//超時中斷
{
static unsigned char count;
//定義變量,記錄中斷次數
// TH0=0xd8;
// TL0=0xf0; //定時器重置,一幀數據一來一回兩個多毫秒,定時10ms夠了
S_OK=0; //進入超時中斷,說明通信已經中斷
led=1;
led2=1;
TR0=0; //通信已經中斷,關閉超時定時器
// count++;
// if(count==50)
// {
// led2=~led2;
// count=0;
// }
}
void receive() interrupt 4
//串行接收和發送中斷
{
if(RI==1)
{
S_OK=1; //進入接收中斷說明通信正常
RI = 0; //RI要手動清0
led=0;
led2=0;
TR0=0; //關閉超時定時器
}
if(TI==1)
{
TI=0;
// TH0=0xd8;
// TL0=0xf0;
TH0=0xec;
TL0=0x78;
TR0=1;
}
}
void timer_T2() interrupt 5 //中斷函數
{
static unsigned char count1; //定義變量,記錄中斷次數
TF2=0; //軟件清零定時器2溢出標志位
count1++;
//重置并啟動超時定時器
//根據S_OK點亮led3
if(count1==3)
{
key(); //掃描按鍵
SBUF=flash; //發送一次鍵號key(); //掃描按鍵
count1=0; //清零
}
}
void main()
{
//待運行一次的初始化函數
tim2init();
tim1init() ;
tim0init();
TR0=0;
led=0;
led2=0;
led3=0;
while(1)
{
// send(flash);
// if(S_OK==0)
// led3=1;
// else
// led3=0;
//key();
}
}
復制代碼
全部資料51hei下載地址:
程序源碼和原理圖.rar
(105.97 KB, 下載次數: 33)
2020-5-18 08:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1