日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

8255编程c语言程序,51单片机8255驱动C程序

發布時間:2023/12/2 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8255编程c语言程序,51单片机8255驱动C程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*----------------------------------------------------------------------------------------------------------------

庫文件名稱:driver8155.h

功能描述:驅動8155,不需要了解8255的工作原理,透明操作8255的三個輸入輸出口PA、PB、PC

讀A口只需要調用rd_PA,寫則需要調用wr_PA;B、C操作也一樣

全局變量:?IO_flags,在其它程序中不能對其改寫

特殊說明:?無

//----------------------------------------------------------------------------------------------------------------*/

#include

unsigned?char?const?cfg_table[8]={

0x80,???????/*10000000b,???????;c=out??b=out??a=out*/

0x90,???????/*10010000b,???????;c=out??b=out??a=in?*/

0x82,???????/*10000010b,???????;c=out??b=in???a=out*/

0x92,???????/*10010010b,???????;c=out??b=in???a=in?*/

0x89,???????/*10001001b,???????;c=in???b=out??a=out*/

0x99,???????/*10011001b,???????;c=in???b=out??a=in?*/

0x8B,???????/*10001011b,???????;c=in???b=in???a=out*/

0x9B,???????/*10011011b,???????;c=in???b=in???a=in?*/

};

unsigned?char?rd_mem(unsigned?char?mem_ad)

{

} void?PABC_config(void?)

{

a8255_CON=cfg_table[IO_flags];

} char?rd_PA(void)?????????????????????????/*讀PA口*/

{

unsigned?char?PA_data;

ACC=IO_flags;?????????????/*把狀態標志字讀到ACC便于進行位操作*/

do

{

IO_flagsA=1;??????????????/*置PA狀態標志位為高--輸入*/

IO_flags=ACC;

PABC_config();??????????????/*調用配置子程序,完成對8255的設置*/

ACC=IO_flags;

}

while(IO_flagsA==0);?????/*判斷狀態標志位是否為高*/

/*控制字設置完成*/

PA_data=a8255_PA;?????????/*把PA口的數據讀到PA_data*/

return(PA_data);?????????/*返回PA_data*/

}

char?rd_PB(void)?????????????????????????/*讀PB口*/

{

unsigned?char?PB_data;

ACC=IO_flags;?????????????/*把狀態標志字讀到ACC便于進行位操作*/

do

{

IO_flagsB=1;??????????????/*置PB狀態標志位為高--輸入*/

IO_flags=ACC;

PABC_config();??????????????/*調用配置子程序,完成對8255的設置*/

ACC=IO_flags;

}

while(IO_flagsB==0);?????/*判斷狀態標志位是否為高*/

/*控制字設置完成*/

PB_data=a8255_PB;?????????/*把PA口的數據讀到PB_data*/

return(PB_data);?????????/*返回PB_data*/

}

char?rd_PC(void)?????????????????????????/*讀PC口*/

{

unsigned?char?PC_data;

ACC=IO_flags;?????????????/*把狀態標志字讀到ACC便于進行位操作*/

do

{

IO_flagsC=1;??????????????/*置PC狀態標志位為高--輸入*/

IO_flags=ACC;

PABC_config();??????????????/*調用配置子程序,完成對8255的設置*/

ACC=IO_flags;

}

while(IO_flagsC==0);?????/*判斷狀態標志位是否為高*/

/*控制字設置完成*/

PC_data=a8255_PC;?????????/*把PC口的數據讀到PC_data*/

return(PC_data);?????????/*返回PC_data*/

} void?wd_PA(unsigned?char?PA_data)??????????/*寫PA口*/

{

ACC=IO_flags;??????????????/*把狀態標志字讀到ACC便于進行位操作*/

{IO_flagsA=0;??????????????/*置PA狀態標志位為低--輸出*/

IO_flags=ACC;??????????????/*位操作完成,把ACC的內容寫回狀態標志字*/

PABC_config();??????????????/*調用配置子程序,完成對8255的設置*/

ACC=IO_flags;

}

while(IO_flagsA==1);??????/*判斷狀態標志位是否為高

為高,設置未完成,需從新設置*/ ???????????????a8255_PA=PA_data;???????????/*將PA_data的內容送到PA口*/

}

void?wd_PB(unsigned?char?PB_data)??????????/*寫PB口*/

{

ACC=IO_flags;??????????????/*把狀態標志字讀到ACC便于進行位操作*/

{IO_flagsB=0;??????????????/*置PB狀態標志位為低--輸出*/

IO_flags=ACC;??????????????/*位操作完成,把ACC的內容寫回狀態標志字*/

PABC_config();??????????????/*調用配置子程序,完成對8255的設置*/

ACC=IO_flags;

}

while(IO_flagsB==1);??????/*判斷狀態標志位是否為高

為高,設置未完成,需從新設置*/ ???????????????a8255_PB=PB_data;???????????/*將PB_data的內容送到PB口*/

}

void?wd_PC(unsigned?char?PC_data)??????????/*寫PC口*/

{

ACC=IO_flags;??????????????/*把狀態標志字讀到ACC便于進行位操作*/

{IO_flagsC=0;??????????????/*置PC狀態標志位為低--輸出*/

IO_flags=ACC;??????????????/*位操作完成,把ACC的內容寫回狀態標志字*/

PABC_config();??????????????/*調用配置子程序,完成對8255的設置*/

ACC=IO_flags;

}

while(IO_flagsC==1);??????/*判斷狀態標志位是否為高

為高,設置未完成,需從新設置*/ ???????????????a8255_PC=PC_data;???????????/*將PC_data的內容送到PC口*/

}

void?set_PC(unsigned?char?PC_num)

{

ACC=IO_flags;

IO_flagsC=0;

ACC=IO_flags;

PC_num=PC_num<<1;

PC_num=(PC_num|0x01);

a8255_CON=PC_num;

}

void?clr_PC(unsigned?char?PC_num)

{

ACC=IO_flags;

IO_flagsC=1;

ACC=IO_flags;

PC_num=PC_num<<1;

PC_num=(PC_num&0xFE);

a8255_CON=PC_num;

}

void?main(void)

{

set_PC(0x01);

}

/*---------------------------------------------------

文件名稱:Config.h

功能描述:端口定義和RAM配置

輸入參數:無

輸出參數:無

特殊說明:根據具體分配的地址,重新設定各值

//----------------------------------------------------------------------------------------------------------------*/

#include

#include

#define a8255_PA??? XBYTE[0x7F7C]???? /*PA口地址*/

#define a8255_PB??? XBYTE[0x7F7D]???? /*PB口地址*/

#define a8255_PC??? XBYTE[0x7F7E]???? /*PC口地址*/

#define a8255_CON?? XBYTE[0x7F7F]???? /*控制字地址*/

unsigned char IO_flags;?? /* 用于表示PA、PB、PC的當前輸入輸出狀態

內容不能被其它程序改寫,操作時ACC=IO_flags*/

sbit??? IO_flagsA=ACC^0;? /*PA的當前輸入輸出狀態

置位表示輸入,復位表示輸出*/

sbit??? IO_flagsB=ACC^1;? /*PB的當前輸入輸出狀態*/

sbit??? IO_flagsC=ACC^2;? /*PC的當前輸入輸出狀態*/

char rd_PA(void);????????? /*讀PA口*/

char rd_PB(void);????????? /*讀PB口*/

char rd_PC(void);????????? /*讀PC口*/

void wd_PA(unsigned char PA_data);? /*寫PA口*/

void wd_PB(unsigned char PB_data);? /*寫PA口*/

void wd_PC(unsigned char PC_data);? /*寫PA口*/

void PABC_config(void );??????????? /*寫8255控制字*/

總結

以上是生活随笔為你收集整理的8255编程c语言程序,51单片机8255驱动C程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。