51单片机8255驱动C程序_第1页
51单片机8255驱动C程序_第2页
51单片机8255驱动C程序_第3页
51单片机8255驱动C程序_第4页
51单片机8255驱动C程序_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业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_table8= 0 x80, /*b, ;c=out b=out a=out*

2、/ 0 x90, /*b, ;c=out b=out a=in */ 0 x82, /*b, ;c=out b=in a=out*/ 0 x92, /*b, ;c=out b=in a=in */ 0 x89, /*b, ;c=in b=out a=out*/ 0 x99, /*b, ;c=in b=out a=in */ 0 x8B, /*b, ;c=in b=in a=out*/ 0 x9B, /*b, ;c=in b=in a=in */ ; unsigned char rd_mem(unsigned char mem_ad) void PABC_config(void ) a8255_

3、CON=cfg_tableIO_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*/ retu

4、rn(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*/

5、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_dat

6、a*/ 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_

7、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; /*

8、将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

9、的内容送到PC口*/ void set_PC(unsigned char PC_num) ACC=IO_flags; IO_flagsC=0; ACC=IO_flags; PC_num=PC_num1; PC_num=(PC_num|0 x01); a8255_CON=PC_num; void clr_PC(unsigned char PC_num) ACC=IO_flags; IO_flagsC=1; ACC=IO_flags; PC_num=PC_num1; PC_num=(PC_num&0 xFE); a8255_CON=PC_num; void main(void) set_PC(0

10、x01); /*-文件名称:Config.h功能描述:端口定义和RAM配置输入参数:无输出参数:无特殊说明:根据具体分配的地址,重新设定各值/-*/#include #include #define a8255_PA XBYTE0 x7F7C /*PA口地址*/#define a8255_PB XBYTE0 x7F7D /*PB口地址*/#define a8255_PC XBYTE0 x7F7E /*PC口地址*/#define a8255_CON XBYTE0 x7F7F /*控制字地址*/unsigned char IO_flags; /* 用于表示PA、PB、PC的当前输入输出状态 内容不能被其它程序改写,操作时ACC=IO_flags*/ sbit IO_flagsA=ACC0; /*PA的当前输入输出状态 置位表示输入,复位表示输出*/sbit IO_flagsB=ACC1; /*PB的当前输入输出状态*/sbit IO_flagsC=ACC2; /*PC的当前输入输出状态*/char rd_PA(void); /*读PA口*/ char rd_PB(void); /*读PB口*/char rd_PC(void); /*读PC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论