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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何编写更少,更好的代码,或Project Lombok

我长期以来一直打算撰写有关Lombok项目的文章 &#xff0c;以至于每当一个自重的Java开发人员都已经听说过它时&#xff0c;我可能会写它。 尽管如此&#xff0c;值得一提的是&#xff0c;如果只是提醒自己&#xff0c;不要犹豫&#xff0c;尝试性能增强工具并查看它们是否合适…

c语言ue,小话C语言中的cotinue和break

#includeint fun(){ printf("fun\n");return 1;}int main(int argc,char *argv[]){int c0;printf("please input your num ,case 3 to break\n");do{scanf("%d",&c);switch(c){case 0:break; /*这里的break只会跳出swtich*/case 1:continue;…

c语言 at指令,学渣求指教,如何识别字符串中的AT命令并逐个输出,求程序!!!...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Topic – to implement a parser to retrieve AT command line and print out (1) the tokensone by one and (2) the elapse time of each command line (processing).Please submit the solution in 48 hours.- The solution cou…

defender 删除_Java 8中的默认方法(Defender方法)简介

defender 删除我们都知道Java中的接口仅包含方法声明&#xff0c;而没有实现&#xff0c;并且任何实现该接口的非抽象类都必须提供实现。 让我们看一个例子&#xff1a; public interface SimpleInterface {public void doSomeWork(); }class SimpleInterfaceImpl implements …

江西财经研究生834c语言试卷,江西财经大学2006年考研C语言程序设计试题(B卷)

1、给定一个数X&#xff0c;判断它至少能被3&#xff0c;5&#xff0c;7中的两个数整除的表达式。(5分)某学生今年学习5门课程&#xff0c;其考试成绩为&#xff1a;X1、X2、X3、X4、X5.请写出该同学符合三好学生学习成绩的表达式。(5分)3、a&#xff0c;b&#xff0c;c为三条边…

JAX-RS 2.1的Jersey客户端依赖性

泽西岛是JAX-RS 2.1的参考实现。 为了在企业容器外部运行具有JSON-P和JSON-B映射的JAX-RS 2.1客户端&#xff0c;需要以下Jersey依赖项。 Jersey客户端2.6版实现了JAX-RS 2.1 API。 以下依赖性将客户端运行时添加到项目中&#xff1a; <dependency><groupId>org.…

1到10用递归c语言,为什么这个递归能输出1到10

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼首先你的main函数调用printN&#xff0c;作为调用者他会做这么几件事1.将参数10压栈&#xff1b;2.将Return Address压栈&#xff0c;即第19行的地址&#xff1b;3.跳转到函数体&#xff1b;在函数体中&#xff0c;作为被调用者他会…

Android 画布画线,android实现一个简单的画布,可以用手指画线条。

满意答案wpdhc2016.07.05采纳率&#xff1a;49% 等级&#xff1a;7已帮助&#xff1a;359人public class DrawView extends View {Context mycontext;int toasttime 1000*60;boolean enabletoast true;//之前的坐标float preX;float preY;//路径private Path path;//画笔p…

camel 数据库_使用Camel在来自不同来源的Solr中索引数据

camel 数据库Apache Solr是建立在Lucene之上的“流行的&#xff0c;快速的开源企业搜索平台”。 为了进行搜索&#xff08;并查找结果&#xff09;&#xff0c;通常需要从不同的源&#xff08;例如内容管理系统&#xff0c;关系数据库&#xff0c;旧系统&#xff09;中提取数据…

android手机连接windows,Windows PC连接Android adb shell的方法

今天突发奇想&#xff0c;想用跟笔记本连接的键鼠操作自己的安卓设备(具体操作先挖个坑之后再填)。首先遇到的问题就是&#xff0c;如何用Windows PC连接自己的安卓设备&#xff0c;因为笔者的笔记本的USB接口有限&#xff0c;又有多部安卓设备&#xff0c;还想同时对多部Andro…

对状态代码使用JAX-RS异常

从JAX-RS资源发送特定HTTP&#xff08;错误&#xff09;状态代码的一种方法是使用javax.ws.rs.core.Response类及其类似Builder Pattern的API。 如果要根据响应主体指定返回类型&#xff0c;则仍然可以这样做&#xff0c;并通过抛出WebApplicationException针对错误发送不同的状…

设置html文字居中自动换行,CSS怎么设置文字自动换行?

CSS怎么设置文字自动换行&#xff1f;下面本篇文章就给大家介绍css设置文字(特别是连续的数字和英文)自动换行的方法。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你们有所帮助。关于换行问题&#xff0c;正常字符的换行是比较合理的&#xff0c;…

html霓虹灯效果图,HTML5 SVG+CSS3霓虹灯文字边框动画特效

【实例简介】【实例截图】【核心代码】使用SVG CSS实现动态霓虹灯文字效果#svgBox{[/b] width:100%;margin:100px auto;}.text{font-size: 64px;font-weight: bold;text-transform: uppercase;fill: none;stroke-width: 2px;stroke-dasharray: 90 310;animation: stroke 6s inf…

动态生成的html元素无法调用js函数,如何确保动态生成的div在js函数被调用之前被加载到DOM中?...

$("#submitB").click(function() {$.post("/previewproposal", $("#proposal-form").serialize(), function(data){$.colorbox({html:data});}, "html");});呈现的HTML是这样的&#xff1a;$(document).ready(function(){function plo…

lambdas for_Java 8 Lambdas –缺少脱离Java的链接

lambdas for我学习了函数式编程&#xff0c;但是后来我决定我更喜欢命令式编程&#xff0c;于是我转回去。 —没人 从命令式编程过渡到函数式编程是当今非常普遍的事情。 互联网上的博客文章充斥着关于它的证词。 我读过的所有内容以及与我交谈过的每个人&#xff08;包括我自…

吉林省2021高考成绩排名查询,2021年吉林高考成绩排名查询系统,吉林高考位次排名表...

最近好多家长和考生留言&#xff0c;希望知道&#xff1a;吉林高考位次是什么&#xff1f;吉林高考位次与名次的区别&#xff1f;如何根据位次选大学&#xff1f;2020年吉林高考位次就是指考生高考成绩在全省同类考生中的位置。高考位次主要分为三大类&#xff1a;省市位次、区…

Picocli 2.0:类固醇上的Groovy脚本

Picocli 2.0增加了对其他JVM语言&#xff08;尤其是Groovy&#xff09;的支持。 当Groovy语言具有CliBuilder类的内置CLI支持时&#xff0c;为什么要使用picocli&#xff1f; 您可能会喜欢picocli的使用帮助&#xff0c;默认情况下会显示ANSI 颜色和样式 。 您可能喜欢的另一个…

angular字符串转成html,详解angular如何调用HTML字符串的方法

详解angular如何调用HTML字符串的方法前面的文章我们介绍过angular6.0的数据绑定&#xff0c;也就是前面页面如何调用后台的数据&#xff0c;我们接触到了调用普通数据——如&#xff1a;调用产品详情{{post.content}}。在使用中&#xff0c;我们会发现&#xff0c;如果按原来的…

西南交大计算机几个专业,西南交通大学计算机科学与技术专业

西南交通大学计算机科学与技术专业计算机科学与技术专业解读计算机科学与技术专业我校早在60年代初就创办了计算机技术专业&#xff0c;是全国较早设立该专业的高等学校之一。1978年由中科院院士曹建猷教授等主持恢复开办计算机科学及应用专业&#xff0c;1981年在国内首批获得…

模拟耗时操作_在集成测试中模拟耗时的动作

模拟耗时操作最近在我的一个项目中&#xff0c;我遇到一种情况&#xff0c;需要为该应用程序创建集成测试。 这不是很奇怪&#xff0c;不是吗&#xff1f; 有趣的是&#xff0c;应用程序的逻辑涉及一些并发问题&#xff0c;并且其中一个组件必须连接到外部服务&#xff0c;这将…