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

库文件名称: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程序相关推荐

  1. c51c语言编程的音乐程序,51单片机唱歌C51音乐程序.doc

    51单片机唱歌C51音乐程序 51单片机唱歌 C51音乐程序 unsigned char n 0; //n为节拍常数变量 unsigned char code music_tab[] 0x18, 0x ...

  2. 单片机c语言的按键程序,51单片机按键扫描C程序

    原标题:51单片机按键扫描C程序 大二上学期做过80 的按键程序,当时项目要求实现按键控制 屏显示并且接收GPRS传来的数据.当时为了节省成本,就去大西电子市场买来8*8的LED块,然后自己一点一点的 ...

  3. 水下超声波测距c语言程序,51单片机超声波测距C程序

    51单片机超声波测距C程序 (2010-01-26 14:09:10) 电子工程师电子资料大学校园 超声波检测原理 超声波测距的程序流程图 程序如下: //超声波模块程序 #include #defi ...

  4. 52 8x8点阵c语言程序,51单片机8x8点阵显示程序

    <51单片机8x8点阵显示程序>由会员分享,可在线阅读,更多相关<51单片机8x8点阵显示程序(3页珍藏版)>请在人人文库网上搜索. 1.include #include#de ...

  5. sja1000编程c语言,基于51单片机SJA1000 CAN通讯实现(C语言程序)

    经过一个星期的艰苦奋斗,终于将两个SJA1000通过51单片机成功通讯了!采用的是Pelican工作模式,扩展帧数据格式,验收滤波器是采用单滤波扩展帧模式. 发送和接收代码都全部相同样! 一 实物图 ...

  6. 如何用c语言对51单片机进行编程,C语言在51单片机编程中的应用技巧

    随着单片机硬件性能的提高,编写应用程序更着重于程序本身的效率. Franklin或KEII.C51交叉编译器是专为51系列单片机设计的一种高效的C语言编译器,用其开发的应用程序易于维护,可移植性好,是 ...

  7. C语言花样霓虹灯程序,51单片机制作霓虹灯的程序+电路图

    霓虹灯的电路图: 霓虹灯的51单片机程序: #include #define uchar unsigned char #define uint unsigned int sbit  RED_LED  ...

  8. 51单片机烟雾传感器C语言程序,51单片机烟雾报警器制作+程序

    烟雾报警器制作过程及相关程序 //程序头函数 #include //宏定义 #define uint unsigned int #define uchar unsigned char #define ...

  9. 测速的c语言程序,51单片机测速c程序

    #include #define uint  unsigned int #define ulong unsigned long #define uchar unsigned char //定义一下方便 ...

最新文章

  1. Python web 开发:部署一个3行代码的wsgi app
  2. 一步一步SharePoint 2007系列文章目录
  3. Skype For Business 2015实战系列2:安装活动目录
  4. 设计灵感|独具中国韵味的海报设计
  5. 无法连接Elasticsearch解决方案
  6. ASP.NET中 Bin,App_Browser,App_code,App_Data,App_Theme 等文件
  7. python游戏程序中游戏对象是什么_Python游戏编程入门
  8. LCD1602显示中文汉字
  9. 激光雷达+imu_大疆览沃浩界(Livox Horizon)激光雷达测评
  10. 皮尔逊相关系数,斯皮尔曼等级相关系数,(易错!!)假设检验 ,SPSS
  11. Chrome浏览器扩展:bilibili哔哩哔哩视频下载助手 2.1.5_0
  12. 3d打印英语文献_利用三维扫描,3D打印,复模和铸造,数字化复制佛罗伦萨洗礼堂北门...
  13. 配合屏幕录像专家,又小又清晰!
  14. LOL全英雄皮肤爬虫
  15. 支撑起腾讯公司计费业务的TDSQL
  16. Tor配置:514 Authentication required
  17. Codeforces 85D Sum of Medians[线段树]
  18. RDKit | 建立溶解度预测的LightGBM回归模型
  19. PID算法详解(2)---PID参数整定
  20. 广州百田笔试题(武大专场)

热门文章

  1. WebSphere Application Server性能调整工具包
  2. vim 底行命令模式下的全局命令 g(global)
  3. 普通话/汉语发音口型大全
  4. cpu占用100_Java项目服务器cpu占用100%解决办法
  5. Leetcode 260. 只出现一次的数字 III
  6. C语言与Java的对比,你想好选谁了吗?
  7. hive kerberos java_Kerberos身份验证错误 - Sqoop通过Hive从SQL导入HDFS
  8. ngrok服务器搭建_利用暴露在外的API,无法检测的Linux恶意软件将矛头指向Docker服务器...
  9. oracle u01清理,Oracleの/u01/11g/diag/rdbms/orcl/orcl/incident 的清理
  10. 流量复制_详解Linux系统流量复制--gor、tcpcopy、nginx模块流量复制等