就我们平时所用到8255的功能,本人认为很简单!!

为什么这么说呢?

其实我只是把8255看成一个139译码器(2-4),CS为片选,A0,A1分别选中PA,PB,PC,D口(控制寄存器),唯一不同的是可以通过D口控制PA,PB,PC的工作方式。先来看看8255的引脚图 http://www.51hei.com/chip/161.html

首先CS=0,即P25=0,然后就是通过P21,P22分别选中几个口。所以PA的地址可以0000-D9FF

同理PB:DBFF,PC:DDFF,CON:DFFF。

通过配置D口来控制P口的功能,不管三七二十一,都配置成输出就可以(方式一)。

#include

#define a8255_PA    XBYTE[0xD1FF]     /*PA口地址*/

#define a8255_PB    XBYTE[0xD2FF]     /*PB口地址*/

#define a8255_PC    XBYTE[0xDDFF]     /*PC口地址*/

#define a8255_CON   XBYTE[0xDFFF]     /*控制字地址*/

a8255_CON=0x81;

以上是例子的程序里面配置的,由于开始没有看到这个头文件,看到这程序感觉有点懵,后面我看了头文件的东西,哈哈,原来是这么回事啊!当然他头文件里面有很多东西,其实只有只一句起作用:#define XBYTE ((unsigned char volatile xdata *) 0)

幸亏看ARM的时候见过这东西,不然真的不知道怎么办了!!!!

#define XBYTE ((unsigned char volatile xdata *) 0)

定义 :XBYTE 为 指向 外部 地址空间

unsigned char 数据类型的指针,指针值为0(我也不知道为什么为char型)

至于 volatile的作用就是让编译器不至于优化掉它的操作(不是特别理解)

这样,可以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)访问外部RAM了。

所以我们用8255的时候可以不用头文件。

#define XBYTE ((unsigned char volatile xdata *) 0)

#define a8255_PA    XBYTE[0xD1FF]     /*PA口地址*/

#define a8255_PB    XBYTE[0xD2FF]     /*PB口地址*/

#define a8255_PC    XBYTE[0xDDFF]     /*PC口地址*/

#define a8255_CON   XBYTE[0xDFFF]     /*控制字地址*/

只要把上面五行代码拷贝进去就行了!unsigned char 数据类型的指针,指针值为0(我也不知道为什么为char型)

这是c语言中的强制转换,转换成什么类型根据要转换成的目标的单位长度,单片机是8位的,都是以字节为单位,所以转换成char。在arm中,一般就要转成unsigned int(4字节)。当然,如果操作的外设的数据宽度是16bits,就要转换成unsigned short

con排插与单片机相连_单片机与8255芯片连接详解相关推荐

  1. 嵌入式单片机基础篇(一)之stm32F1GPIO详解

    嵌入式单片机基础篇(一)之stm32F1GPIO详解 stm32F1GPIO详解 下面以stm32f103zet6以及51单片机为例,讲解单片机最基本部分IO口 第一部分:stm32 STM32 的 ...

  2. 单片机基础之ADD与ADDC的区别详解

    单片机基础之ADD与ADDC的区别详解 ADD 两数相加,不加进位位. ADDC 两数相加,加进位位.进位当时为1就加1,进位为0就加0. 一般在多字节数相加时,低字节相加用ADD ,高字节相加就用A ...

  3. 《单片机串口通信及测控应用实战详解》——6.3 PC端程序设计

    本节书摘来异步社区<单片机串口通信及测控应用实战详解>一书中的第6章,第6.3节,作者:李江全,聂晶,梁习卉子,刘新英,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  4. wxpython视频教程-单片机C语言入门_单片机教程_单片机编程语言 - C语言网

    本教程由 继承叔 编写,面向对单片机有基础认知的初学者! 1.单片机了解 单片机是一块集成电路的控制芯片,我们熟知的家电例如洗衣机的定时控制和滚筒运作,电饭煲的保温功能和鸣叫提醒,电冰箱,空调等等这些 ...

  5. 51单片机实训项目之“万年历”代码原理详解

    一.原理图 二.芯片器件 STC89C52 DS18B20(温度传感器) DS1302(时钟芯片) LCD1602液晶显示 独立按键 杜邦线 三.仿真图 四.程序代码详解 (一).子程序 EEPROM ...

  6. 51单片机——LED 点阵点亮一个点,小白详解

    LED点阵介绍: LED点阵是由发光二极管排列组成的显示器件,在我们生活中的电器中随处可见,被广泛用于汽车报站器,广告屏等. 通常用用较多的是8*8点阵,然后使用多个8*8点阵组成不同分辨率的LED点 ...

  7. 微型计算机典型组成原理图,51单片机最小系统原理图、PCB及组成原理详解

    单片机:单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器RAM.只读存储器ROM.多种I/O口和中断系统.定时器 ...

  8. vbox虚拟机能获取到ip但是上不了网_虚拟机三种网络模式详解

    由于linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费.那么如何解决这个问题? 虚拟机软件是很好的选择,常用的虚拟机软件有vmware workstation ...

  9. 安卓市场和安智市场_安卓市场小米市场ASO详解

    本文由鸟哥笔记春羽计划出品 本文2003字 今天我们要讲的是小米应用市场从0-1的获量的过程,小米市场如何在应用市场通过ASO获得大量的流量呢?下面有这几点. 量词分析 进行应用市场带量词分析,组建自 ...

  10. python选择排序从大到小_经典排序算法和Python详解之(一)选择排序和二元选择排序...

    本文源自微信公众号[Python编程和深度学习]原文链接:经典排序算法和Python详解之(一)选择排序和二元选择排序,欢迎扫码关注鸭! 扫它!扫它!扫它 排序算法是<数据结构与算法>中最 ...

最新文章

  1. programcreek
  2. 大象喝水(信息学奥赛一本通-T1032)
  3. linux 装jdk出错,redhat linux 9.0安装jdk出错,该如何解决
  4. ucc编译器(优化)
  5. webpack核心提炼
  6. MongoDB 索引操作详解
  7. 并发编程学习之线程池
  8. CPU使用率过高应该如何处理
  9. MongoDB安装中使用配置文件的方式启动服务时出现错误:forked process: 2784 ERROR: child process failed, exited with 100
  10. XQ6657Z35-EVM 的DSP + ZYNQ核心板,SRIO通讯
  11. 使用mac电脑生成 icns图标
  12. 特斯拉自家电池厂浮出水面!占地18万平米,就在加州超级工厂隔壁
  13. Python基于改进Unet的新冠肺炎等级分割系统(源码&教程)
  14. 鱼眼摄像头 实时动、静目标的检测,跟踪,分类
  15. 实时数仓在滴滴的实践和落地
  16. es6.3.1 搜索中must和should混合的用法
  17. java word上传下载_JSP实现word文档的上传,在线预览,下载
  18. prophet Diagnostics诊断
  19. .nav css,Bootstrap CSS组件之导航(nav)
  20. Windos10双系统之Ubuntu

热门文章

  1. 蹩脚的Access分页语句
  2. 三层交换 VLAN 互访配置
  3. HDU-4826 Labyrinth
  4. 第一章 80C51单片机概述
  5. LICEcap:GIF屏幕录制工具
  6. 小女子菜鸟一枚,因本科毕业设计第一次接触安卓开发……图片上传问题求教
  7. EndNote X9在Word插入参考文献时在工具来不显示,使用时显示服务器运行失败,和用国标GBT 7714遇到的错误
  8. steam显示没网络连接网络连接网络连接服务器,steam无法连接网络,steam显示无法连接网络...
  9. gentoo 下Local time zone must be set--see zic manual page解决办法
  10. Don't Starve,好脚本,好欢乐