?? drive8255.c
字號:
/*----------------------------------------------------------------------------------------------------------------
庫文件名稱:driver8155.h
功能描述:驅動8155,不需要了解8255的工作原理,透明操作8255的三個輸入輸出口PA、PB、PC
讀A口只需要調用rd_PA,寫則需要調用wr_PA;B、C操作也一樣
全局變量: IO_flags,在其它程序中不能對其改寫
特殊說明: 無
//----------------------------------------------------------------------------------------------------------------*/
#include<config.h>
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);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -