1.8255A芯片介绍


点击芯片详细介绍或blog查看更多

8255A 有三个端口,即 A 端口、B端口和 C端口。

  • 端口 A包含一个 8 位输出闩锁/缓冲器和一个 8 位输入缓冲。
  • 端口 B类似于 端口 A
  • 端口 C可按控制字分为两个部分,即端口 C 下部 (PC0-PC3) 和端口 C 上部 (PC7-PC4)。
  • 8255共有40个引脚,采用双列直插式封装,各引脚功能如下:
    D0–D7:三态双向数据线,与单片机数据总线连接,用来传送数据信息。
    CS:片选信号线,低电平有效,表示芯片被选中。
    RD:读出信号线,低电平有效,控制数据的读出。
    WR:写入信号线,低电平有效,控制数据的写入。
    Vcc:+5V电源。
    PA0–PA7:A口输入/输出线。
    PB0–PB7:B口输入/输出线。
    PC0–PC7:C口输入/输出线。
    RESET:复位信号线。
    A1、A0:地址线,用来选择8255内部端口。
    GND:地线。

2.电路设计

PA,PC(PCH,PCL)端键盘输入,PB端LED输出,示波器观察ALE和读写端

3.程序设计

#include < absacc.h>//包含绝对地址访问库函数absacc.hvoid main() {unsigned long t;XBYTE[0x7fff]= 0x99;//写控制字:A口.C口输人,B口输出while(1) {DBYTE[0x30] = XBYTE[0x7ffc];//读A口数据,存内RAM30HXBYTE[0x7ffd] = ~DBYTE[0x30] ;//从B口输出A口数据(取反)for(t=0; t<11000; t ++ );//延时0.5 sDBYTE[0x31]= XBYTE[0x7ffe] ;//读C口数据,存内RAM31HXBYTE[0x7ffd]= ~DBYTE[0x31] ;//从B口输出C口数据(取反)
for(t=0;t<11000;t++ );}}

4.解释

1.写控制字:A口.C口输人,B口输出

XBYTE[0x7fff]= 0x99;//写控制字:A口.C口输人,B口输出

如图有设置PA,PC(PCH,PCL)端输入,PB端输出

2.控制A0,A1
芯片373保存低8位地址FF,所以A0,A1被Q0,Q1拉高

3.内存操作

 DBYTE[0x30] = XBYTE[0x7ffc];//读A口数据,存内RAM30HXBYTE[0x7ffd] = ~DBYTE[0x30] ;//从B口输出A口数据(取反)

执行两条语句
ALE、RD和WD会被单片机主动拉低会被拉低60us


4.ALE

ALE功能:用来锁存P0口送出的低8位地址。80C51在并行扩展外存储器(包括并行扩展I/O口)时,P0口用于分时传送低8位地址和数据信号,且均为二进制数。那么如何区分是低8位地址还是8位数据信号呢?当ALE信号有效时,P0口传送的是低8位地址信号;ALE信号无效时,P0口传送的是8位数据信号。用户可在ALE信号的下降沿,锁定P0口传送的内容,即低8位地址信号。

当ALE信号为高电平时,P0口上的信息为低8位地址,在ALE信号的下降沿时将P0口上的低8位地址送到地址锁存器锁存起来。
在ALE为低电平期间P0口上的信息为指令或数据信息。在ALE为低电平期间P0口上的信息为指令或数据信息,以实现低位地址与数据的分离。
下图是地址数据分离图

杂:8255芯片文档对比介绍:

1.C口置位/复位控制字
C口的某些位作为A口和B口选通(联络)信号时,不受方式选择控制字的D0和D3控制,对C端口任意一位进行置位或复位操作

点击8255A芯片使用手册查看更多

2.控制A0,A1

结束

世界弥漫着焦躁不安的气息,因为每一个人都急于从自己的枷锁中解放出来。 – 尼采

proteus教程——操作内存并行扩展8255相关推荐

  1. proteus教程——使能端口控制8255

    **使能端口控制8255 * 该教程代码是使能端口,而不是操作内存,操作内存WR和RD sbit wr = P3^6; sbit rd = P3^7; 在我们使用 8255 可编程外设界面之前,我建议 ...

  2. group by 和 left join 哪个慢_手机自带内存和扩展内存一样吗?哪个更好?

    前个月,无意中看到某手机的营销文案,运存4GB,总内存可达256GB.明眼人自然可以看到,这不过是通过TF卡扩展内存得到总256GB.因为还没有见过那个机器用4+256的组合的,常见都是4+32,4+ ...

  3. 尚硅谷 宋红康 JVM教程_01_内存与垃圾回收篇——02

    本系列相关链接 尚硅谷 宋红康 JVM教程_01_内存与垃圾回收篇--01 (20210103-20210110) https://blog.csdn.net/wei198621/article/de ...

  4. java动态扩展_java栈内存动态扩展要怎么理解?要如何实现?

    小伙伴们知道如何在java栈中内存动态扩展吗?这是虚拟机中的一个概念,下面让我们一起来看看该如何实现吧. 一.内存概念 在java中,我们一般会简单把java内存区域划为两种:堆内存与栈内存.其实这种 ...

  5. OpenMP共享内存并行编程详解

    1. 介绍 并行计算机可以简单分为共享内存和分布式内存,共享内存就是多个核心共享一个内存,目前的PC就是这类(不管是只有一个多核CPU还是可以插多个CPU,它们都有多个核心和一个内存),一般的大型计算 ...

  6. ES6 入门教程 9 数组的扩展 9.1 扩展运算符

    ES6 入门教程 ECMAScript 6 入门 作者:阮一峰 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录 ES6 入门教程 9 数组的扩展 9.1 扩展运算符 9.1.1 含义 9.1 ...

  7. C#实用教程-操作xml文件

    C#实用教程-操作xml文件 C#实用教程-操作xml文件 引言:什么是xml文件 Xml的特征 Xml的格式 与HTML的区别 对Xml进行操作 读取xml文件: 当前xml文件内容如下: 创建xm ...

  8. 【C 语言】指针数据类型 ( 指针类型变量 | 使用 * 操作内存 )

    文章目录 一.指针类型变量 二.使用 * 操作内存 一.指针类型变量 指针 也是 变量 , 也占用内存空间 , 可以用于保存 内存地址 ; 测试 指针 变量占用的内存空间大小 : 定义一个 int * ...

  9. SAP UI5 应用开发教程之四十一 - Chrome 扩展 UI5 Inspector 的离线安装和使用方法试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

最新文章

  1. Web 开发与设计之 Google 兵器谱
  2. SQL学习之使用视图
  3. 我丢,去面试初级Java开发岗位,被问到泛型?
  4. Longest Substring With At Most K Distinct Characters
  5. android novate乱码,Novate 一款Android RxStyle的网络框架
  6. Linux的system()和popen()差异
  7. 行为设计模式 - 命令设计模式
  8. The method getTextContent() is undefined for the type Node 错误解决办法
  9. matlab 求正交补,机器人动力学(一)空间向量(Spatial Vectors)简介
  10. DreamWeaver CS3中的SPRY的自定义验证
  11. Delphi的Indy通信中发送流文件的注意事项
  12. 数据库课程设计 ——酒店管理系统
  13. 网站被国外IP攻击 禁止海外IP访问网站的解决办法
  14. 二分类模型(清风建模学习笔记)
  15. 更改计算机bios密码怎么办,计算机BIOS通用密码的修改
  16. 单片机加减法C语言,如何利用51单片机实现加减法计算
  17. 完整教程:spring-boot-starter-data-elasticsearch整合elasticsearch 6.x
  18. 企立方:拼多多商家运营思路
  19. typora下载与教程
  20. 1.1.5 在同一折线图中画2条曲线

热门文章

  1. android pmem内存,android内存管理-ION/PMEM【转】
  2. android.nfc.tech圈存,荣耀7使用nfc功能教程及注意事项,亲测可以刷公交卡
  3. 搜索引擎的检索模型-查询与文档的相关度计算
  4. 【华为云技术分享】如何将90%的代码自动迁移到鲲鹏平台上
  5. 什么邮箱最安全?教你三招快速提升邮箱安全性方法,职场人必看!
  6. 迎接2016,一个程序员的总结
  7. 编译原理 机械工业出版社 第一章第三章部分习题答案
  8. 你只认识大众汽车的车标怎么能行?赶紧用python采集所有车标学习一下
  9. matlab 膨胀 结构元,图像形态学膨胀 结构元素
  10. Three.js - 模拟太阳、地球、月亮的运动(十一)