8255编程c语言程序,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_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程序相关推荐
- c51c语言编程的音乐程序,51单片机唱歌C51音乐程序.doc
51单片机唱歌C51音乐程序 51单片机唱歌 C51音乐程序 unsigned char n 0; //n为节拍常数变量 unsigned char code music_tab[] 0x18, 0x ...
- 单片机c语言的按键程序,51单片机按键扫描C程序
原标题:51单片机按键扫描C程序 大二上学期做过80 的按键程序,当时项目要求实现按键控制 屏显示并且接收GPRS传来的数据.当时为了节省成本,就去大西电子市场买来8*8的LED块,然后自己一点一点的 ...
- 水下超声波测距c语言程序,51单片机超声波测距C程序
51单片机超声波测距C程序 (2010-01-26 14:09:10) 电子工程师电子资料大学校园 超声波检测原理 超声波测距的程序流程图 程序如下: //超声波模块程序 #include #defi ...
- 52 8x8点阵c语言程序,51单片机8x8点阵显示程序
<51单片机8x8点阵显示程序>由会员分享,可在线阅读,更多相关<51单片机8x8点阵显示程序(3页珍藏版)>请在人人文库网上搜索. 1.include #include#de ...
- sja1000编程c语言,基于51单片机SJA1000 CAN通讯实现(C语言程序)
经过一个星期的艰苦奋斗,终于将两个SJA1000通过51单片机成功通讯了!采用的是Pelican工作模式,扩展帧数据格式,验收滤波器是采用单滤波扩展帧模式. 发送和接收代码都全部相同样! 一 实物图 ...
- 如何用c语言对51单片机进行编程,C语言在51单片机编程中的应用技巧
随着单片机硬件性能的提高,编写应用程序更着重于程序本身的效率. Franklin或KEII.C51交叉编译器是专为51系列单片机设计的一种高效的C语言编译器,用其开发的应用程序易于维护,可移植性好,是 ...
- C语言花样霓虹灯程序,51单片机制作霓虹灯的程序+电路图
霓虹灯的电路图: 霓虹灯的51单片机程序: #include #define uchar unsigned char #define uint unsigned int sbit RED_LED ...
- 51单片机烟雾传感器C语言程序,51单片机烟雾报警器制作+程序
烟雾报警器制作过程及相关程序 //程序头函数 #include //宏定义 #define uint unsigned int #define uchar unsigned char #define ...
- 测速的c语言程序,51单片机测速c程序
#include #define uint unsigned int #define ulong unsigned long #define uchar unsigned char //定义一下方便 ...
最新文章
- Python web 开发:部署一个3行代码的wsgi app
- 一步一步SharePoint 2007系列文章目录
- Skype For Business 2015实战系列2:安装活动目录
- 设计灵感|独具中国韵味的海报设计
- 无法连接Elasticsearch解决方案
- ASP.NET中 Bin,App_Browser,App_code,App_Data,App_Theme 等文件
- python游戏程序中游戏对象是什么_Python游戏编程入门
- LCD1602显示中文汉字
- 激光雷达+imu_大疆览沃浩界(Livox Horizon)激光雷达测评
- 皮尔逊相关系数,斯皮尔曼等级相关系数,(易错!!)假设检验 ,SPSS
- Chrome浏览器扩展:bilibili哔哩哔哩视频下载助手 2.1.5_0
- 3d打印英语文献_利用三维扫描,3D打印,复模和铸造,数字化复制佛罗伦萨洗礼堂北门...
- 配合屏幕录像专家,又小又清晰!
- LOL全英雄皮肤爬虫
- 支撑起腾讯公司计费业务的TDSQL
- Tor配置:514 Authentication required
- Codeforces 85D Sum of Medians[线段树]
- RDKit | 建立溶解度预测的LightGBM回归模型
- PID算法详解(2)---PID参数整定
- 广州百田笔试题(武大专场)
热门文章
- WebSphere Application Server性能调整工具包
- vim 底行命令模式下的全局命令 g(global)
- 普通话/汉语发音口型大全
- cpu占用100_Java项目服务器cpu占用100%解决办法
- Leetcode 260. 只出现一次的数字 III
- C语言与Java的对比,你想好选谁了吗?
- hive kerberos java_Kerberos身份验证错误 - Sqoop通过Hive从SQL导入HDFS
- ngrok服务器搭建_利用暴露在外的API,无法检测的Linux恶意软件将矛头指向Docker服务器...
- oracle u01清理,Oracleの/u01/11g/diag/rdbms/orcl/orcl/incident 的清理
- 流量复制_详解Linux系统流量复制--gor、tcpcopy、nginx模块流量复制等