proteus教程——操作内存并行扩展8255
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相关推荐
- proteus教程——使能端口控制8255
**使能端口控制8255 * 该教程代码是使能端口,而不是操作内存,操作内存WR和RD sbit wr = P3^6; sbit rd = P3^7; 在我们使用 8255 可编程外设界面之前,我建议 ...
- group by 和 left join 哪个慢_手机自带内存和扩展内存一样吗?哪个更好?
前个月,无意中看到某手机的营销文案,运存4GB,总内存可达256GB.明眼人自然可以看到,这不过是通过TF卡扩展内存得到总256GB.因为还没有见过那个机器用4+256的组合的,常见都是4+32,4+ ...
- 尚硅谷 宋红康 JVM教程_01_内存与垃圾回收篇——02
本系列相关链接 尚硅谷 宋红康 JVM教程_01_内存与垃圾回收篇--01 (20210103-20210110) https://blog.csdn.net/wei198621/article/de ...
- java动态扩展_java栈内存动态扩展要怎么理解?要如何实现?
小伙伴们知道如何在java栈中内存动态扩展吗?这是虚拟机中的一个概念,下面让我们一起来看看该如何实现吧. 一.内存概念 在java中,我们一般会简单把java内存区域划为两种:堆内存与栈内存.其实这种 ...
- OpenMP共享内存并行编程详解
1. 介绍 并行计算机可以简单分为共享内存和分布式内存,共享内存就是多个核心共享一个内存,目前的PC就是这类(不管是只有一个多核CPU还是可以插多个CPU,它们都有多个核心和一个内存),一般的大型计算 ...
- ES6 入门教程 9 数组的扩展 9.1 扩展运算符
ES6 入门教程 ECMAScript 6 入门 作者:阮一峰 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录 ES6 入门教程 9 数组的扩展 9.1 扩展运算符 9.1.1 含义 9.1 ...
- C#实用教程-操作xml文件
C#实用教程-操作xml文件 C#实用教程-操作xml文件 引言:什么是xml文件 Xml的特征 Xml的格式 与HTML的区别 对Xml进行操作 读取xml文件: 当前xml文件内容如下: 创建xm ...
- 【C 语言】指针数据类型 ( 指针类型变量 | 使用 * 操作内存 )
文章目录 一.指针类型变量 二.使用 * 操作内存 一.指针类型变量 指针 也是 变量 , 也占用内存空间 , 可以用于保存 内存地址 ; 测试 指针 变量占用的内存空间大小 : 定义一个 int * ...
- SAP UI5 应用开发教程之四十一 - Chrome 扩展 UI5 Inspector 的离线安装和使用方法试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
最新文章
- Web 开发与设计之 Google 兵器谱
- SQL学习之使用视图
- 我丢,去面试初级Java开发岗位,被问到泛型?
- Longest Substring With At Most K Distinct Characters
- android novate乱码,Novate 一款Android RxStyle的网络框架
- Linux的system()和popen()差异
- 行为设计模式 - 命令设计模式
- The method getTextContent() is undefined for the type Node 错误解决办法
- matlab 求正交补,机器人动力学(一)空间向量(Spatial Vectors)简介
- DreamWeaver CS3中的SPRY的自定义验证
- Delphi的Indy通信中发送流文件的注意事项
- 数据库课程设计 ——酒店管理系统
- 网站被国外IP攻击 禁止海外IP访问网站的解决办法
- 二分类模型(清风建模学习笔记)
- 更改计算机bios密码怎么办,计算机BIOS通用密码的修改
- 单片机加减法C语言,如何利用51单片机实现加减法计算
- 完整教程:spring-boot-starter-data-elasticsearch整合elasticsearch 6.x
- 企立方:拼多多商家运营思路
- typora下载与教程
- 1.1.5 在同一折线图中画2条曲线
热门文章
- android pmem内存,android内存管理-ION/PMEM【转】
- android.nfc.tech圈存,荣耀7使用nfc功能教程及注意事项,亲测可以刷公交卡
- 搜索引擎的检索模型-查询与文档的相关度计算
- 【华为云技术分享】如何将90%的代码自动迁移到鲲鹏平台上
- 什么邮箱最安全?教你三招快速提升邮箱安全性方法,职场人必看!
- 迎接2016,一个程序员的总结
- 编译原理 机械工业出版社 第一章第三章部分习题答案
- 你只认识大众汽车的车标怎么能行?赶紧用python采集所有车标学习一下
- matlab 膨胀 结构元,图像形态学膨胀 结构元素
- Three.js - 模拟太阳、地球、月亮的运动(十一)