MAX485兩微控制器半雙工通訊

2023-01-10 11:42:04 字數 1312 閱讀 3185

#include<>

#define uint unsigned int

#define uchar unsigned char

sbit p0_0=p0^0定義p0^0為max485使能控制埠

ucharidatatable[17]=

uchar keyscan();

外部中斷int0實現接收子函式

void int0(void) interrupt 0

int m;

p1=0xff接收前先使接收方燈全部熄滅

for(m=0;m<5;m輸出按鍵傳送的5次燈的狀態

p1=table2[m];

delay(500呼叫延時子函式

t1,int0中斷初始化函式

void init()

接收子函式receive

void receive接收子函式

傳送子函式send

void send

while(sbuf!=0x01); //接收到訊號如果等於0x01那麼握手成功,否則繼續重新收發

while(flag) i=keyscan(); //將掃瞄的鍵盤編碼對應的num號碼賦值給i

flag=1;

p0_0=1設定max485傳送使能端有效

ti=0開啟傳送中斷

sbuf=table[i-1將設定陣列中的數賦值給傳送緩衝區

while (!ti如果沒傳送完,那麼繼續等待

p1=table[i-1將設定陣列中的數賦值給傳送p1

ti=0若收到,0->ti

}主函式main

void main()

else if(num1==1如果num1=1,那麼對應為傳送方

}}矩陣鍵盤4*4函式

uchar keyscan()

break; //第四列第一行按鍵編號為1

case 0xde: break; //第四列第二行按鍵編號為2

case 0xbe: break; //第四列第三行按鍵編號為3

case 0x7e: break; //第四列第四行按鍵編號為4

while(temp!=0xf0去抖動,並且實現下一次按鍵的掃瞄

temp=p2;

temp=temp&0xf0;

}p2=0xfd選中第三列

temp=p2;

temp=temp&0xf0取p2口資料的高四位,對應為按鍵的行掃瞄碼

while(temp!=0xf0如果有按鍵按下執行以下子函式,軟體防抖動

{ delay(5延時函式呼叫

temp=p2p2口資料送入temp

51微控制器串列埠485通訊程式

以下為微控制器串列埠485通訊程式,從機程式 當然也適用於主機程式 主機傳送可以先用串列埠幫手軟體來除錯,經過keil uvision4實際測試,測試效果如結尾 所示,大部分來自網路,只是改了兩個地方 len sizeof dbuf if i errlen 1 幀超長,錯誤,返回,就可以實現了,其中...

微控制器實習

第四次實習 樓道照明燈 一 實習題目 樓道照明燈 二 實習目的 綜合實驗,掌握80c51微控制器的程式設計除錯方法。三 實習內容 實現樓道間照明燈的方便控制,乙個照明燈,在樓上和樓下各有乙個 閉合式 開關控制。開關的閉合並不直接決定燈的亮滅,而開關狀態的改變才是決定燈亮滅的關鍵。即不管兩個開關當前的...

微控制器總結

微控制器引腳 80c51的資料儲存器配置 80c51的特殊功能暫存器 sfr 五個中斷源 兩個外部中斷,兩個定時器計數器中斷,乙個序列介面中斷。int0 int1輸入低電平或負跳變訊號作為中斷觸發事件 t0 t1定時器 計數器中斷 序列口中斷 8051微控制器中斷源的向量位址 tcon的中斷標誌 中...