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

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

库文件名称:driver8155.h

功能描述:驱动8155,不需要了解8255的工作原理,透明操作8255的三个输入输出口PA、PB、PC

读A口只需要调用rd_PA,写则需要调用wr_PA;B、C操作也一样

全局变量: IO_flags,在其它程序中不能对其改写

特殊说明: 无

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

#includeunsigned 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控制字*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值