/*----------------------------------------------------------------------------------------------------------------
库文件名称: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); /*判断状态标志位是否为高*/
/*控制字设置完成*/
上一篇:SJA1000 CAN总线程序