<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基於DRAM的單片機通信軟件程序

基於DRAM的單片機通信軟件程序

作者: 時(shí)間:2012-10-24 來(lái)源:網(wǎng)絡(luò ) 收藏
基於雙口RAM的單片機通信,軟件程序:
#define _DPRAMCOMM_H#include  reg52.h>        // 引用標準庫的頭文件#include  absacc.h>#define uchar unsigned char #define LP_STT_SEM XBYTE[0x0000]    // 左端狀態(tài)旗語(yǔ)#define LP_PRO_SEM XBYTE[0x0001]    // 左端配置旗語(yǔ)#define RP_STT_SEM XBYTE[0x0002]    // 右端狀態(tài)旗語(yǔ)#define RP_PRO_SEM XBYTE[0x0003]    // 右端配置旗語(yǔ)#define INTL_SEM XBYTE[0x0004]   // 左中斷旗語(yǔ)#define INTR_SEM XBYTE[0x0005]   // 右中斷旗語(yǔ)#define DPRAM_INTL XBYTE[0x2FFF]   // 右端口中斷#define DPRAM_INTR XBYTE[0x2FFE]   // 左端口中斷#define READY 11     // 0x11表示準備就緒bit get_sem(uchar *sem_type);void InitProvRP(void);void Prov(void);void FillState(void);void GetState(void);uchar int0flag;      // 外部中斷0標志uchar rdyflag;      // 另一端準備好標志uchar ProvTimes;     // 表示配置次數uchar xdata *LpStateRamAddr; // 雙口RAM左端狀態(tài)空間起始地址uchar xdata *LpProvRamAddr;     // 雙口RAM左端配置空間起始地址uchar xdata *RpStateRamAddr; // 雙口RAM右端狀態(tài)空間起始地址  uchar xdata *RpProvRamAddr;  // 雙口RAM右端配置空間起始地址uchar xdata ArrayState[254]; // 存放狀態(tài)信息的數組/* 40ms定時(shí)中斷服務(wù)子程序:定期更新左端的狀態(tài)信息,查詢(xún)右端的狀態(tài)信息*/void timer0_int() interrupt 1 using 1{TR0 = 0;      // 關(guān)閉T0TH0 = 0x70;     // 重置40ms定時(shí)器的計數初值TL0 = 0x00; FillState(); // 定期更新左端狀態(tài)讓右端單片機可查詢(xún)GetState();     // 定期查詢(xún)右端單片機的狀態(tài)信息   }    /* 外部中斷0服務(wù)子程序:設置中斷標志位int0flag,讀清中斷*/void out_int0() interrupt 0 using 1{uchar ch;int0flag = 1;  // 表示外部中斷0,實(shí)際是雙口RAM產(chǎn)生的中斷get_sem(INTL_SEM);                   // 申請并獲得左中斷旗語(yǔ)ch = DPRAM_INTR;       // 讀清中斷INTL_SEM = 0x01;    // 釋放左中斷旗語(yǔ)} /* 主程序 */void main(){ int0flag = 0;rdyflag = 0;ProvTimes = 0;LpStateRamAddr = 0x2000;LpProvRamAddr = 0x2400;RpStateRamAddr = 0x3000;RpProvRamAddr = 0x3400;/* 等待右端單片機準備就緒 */while(rdyflag!=1){get_sem(RP_STT_SEM);  // 申請并獲得右端狀態(tài)旗語(yǔ)if (*RpStateRamAddr == READY) rdyflag = 1;   // 右端單片機準備就緒標志置1RP_STT_SEM = 0x01;   // 釋放右端狀態(tài)旗語(yǔ)}/* 對右端單片機進(jìn)行初始配置 */InitProvRP(); /* 通過(guò)向左端狀態(tài)空間的第一地址單元寫(xiě)READY向右端表示左端準備就緒 */get_sem(LP_STT_SEM);   // 申請并獲得左端狀態(tài)旗語(yǔ)*LpStateRamAddr = READY;  // 左端單片機準備就緒LP_STT_SEM = 0x01;    // 釋放左端狀態(tài)旗語(yǔ)ProvTimes++;     // 對右端口的配置次數加1  EA = 1;       // 開(kāi)CPU中斷EX0 = 1;      // 開(kāi)外部中斷0 ET0 =1;       // 開(kāi)T/C0中斷PX0 = 0;      // 外部中斷低優(yōu)先級PT0 = 1;      // 計數器高優(yōu)先級TMOD = 0x01;     // T/C0工作在方式1TH0 = 0x70;      // 預置40ms定時(shí)器的計數初值TL0 = 0x00;TR0 = 0;      // 不啟動(dòng)T0/* 右端單片機接收左端對其的初始化配置,運行正常后觸發(fā)雙口RAM的左端中斷,左端單片機受中斷觸發(fā)后對右端單片機作第二次配置,并啟動(dòng)40ms定時(shí)器,開(kāi)始定期更新本機的狀態(tài)信息并監測右端單片機的狀態(tài) */while(int0flag==1){if (ProvTimes==1){ProvTimes++;   // 對右端口的配置次數加1Prov();     // 對右端口單片機二次配置/* 通過(guò)出發(fā)右端中斷,通知右端單片機接受二次配置*/get_sem(INTR_SEM);  // 申請并獲得右中斷旗語(yǔ)DPRAM_INTL = 0xFF;     // ITNR腳為低,出發(fā)右端單片機中斷INTR_SEM = 0x01;  // 釋放右中斷旗語(yǔ)}TR0 = 1;     // 啟動(dòng)40ms定時(shí)器T0  }   }/* 申請并獲得旗語(yǔ)函數 */bit get_sem(uchar *sem_type)          {*sem_type = 0x00;    // 申請旗語(yǔ)while((*sem_type!=0x00));  // 無(wú)限循環(huán)直至獲得旗語(yǔ)    return(1);}/* 對右端單片機的初始化配置函數:為簡(jiǎn)化起見(jiàn),通過(guò)向左端的配置空間2500H~25FFH全寫(xiě)0x22,表示對右端單片機的初始配置命令  */void InitProvRP(void){uchar i;get_sem(LP_PRO_SEM);   // 申請左端配置旗語(yǔ) for (i=0;i++;i=255)*(LpProvRamAddr+i) = 0x22; LP_PRO_SEM = 0x01;    // 釋放左端配置旗語(yǔ)  }/* 對右端單片機的二次配置函數:為簡(jiǎn)化起見(jiàn),通過(guò)向左端的配置空間2500H~25FFH全寫(xiě)0x33,表示對右端單片機的初始配置命令  */void Prov(void){uchar i;get_sem(LP_PRO_SEM);   // 申請左端配置旗語(yǔ) for (i=0;i++;i=255)*(LpProvRamAddr+i) = 0x33; LP_PRO_SEM = 0x01;    // 釋放左端配置旗語(yǔ)}/* 更新本機狀態(tài)函數:為了簡(jiǎn)化起見(jiàn),此函數表示為向左端狀態(tài)空間第一地址單元(存放設備就緒信息)以后的254字節全寫(xiě)0x44  */void FillState(void){uchar i;get_sem(LP_STT_SEM);   // 申請并獲得左端狀態(tài)旗語(yǔ)for (i=0;i++;i=254)*(LpStateRamAddr+i+1) = 0x44;LP_STT_SEM = 0x01;    // 釋放左端狀態(tài)旗語(yǔ)}/* 查詢(xún)另一端單片機狀態(tài)函數:為簡(jiǎn)化起見(jiàn),此函數表示為用數組ArrayState存取右端狀態(tài)空間第一地址單元(存放設備就緒信息)以后的254字節(3001H~30FFH)包含的狀態(tài)信息  */ void GetState(void){uchar i;get_sem(RP_STT_SEM);   // 申請并獲得右端狀態(tài)旗語(yǔ)for (i=0;i++;i=254)ArrayState[i] = *(RpStateRamAddr+i+1);RP_STT_SEM = 0x01;    // 釋放右端狀態(tài)旗語(yǔ)}


關(guān)鍵詞: DRAM 單片機 通信軟件

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>