在 51 单片机系统中使用 8155

发布者:彭勇最新更新时间:2018-05-07 来源: eefocus关键字:单片机系统 手机看文章 扫描二维码
随时随地手机看文章

单片机自身的 RAM 存储空间和引脚数目往往有些不足,当需要在外部拓展不太多的时候,8155 芯片就是首选了。


一片 8155,可以提供 256 字节的 RAM,3 个并行 IO 接口和一个 14 位的定时器。


8155 的内部还集成了地址锁存器,如果只是需要扩展 8155,就可以省去常用的地址锁存器 74LS373。


下面,先写一个使用单片机自身资源来驱动 16 个 LED 进行流水的程序。


然后,再把它改造为利用 8155 来驱动。


利用 51 单片机驱动 16 个 LED 流水灯的汇编语言程序如下。

;=========================================================


; 16 个 LED 接到 P0, P2。


    ORG   0000H

START:

    MOV   30H, #254   ;片内 RAM

    MOV   31H, #255   ;30H 31H 中仅有一个低电平

;-------------------------------------

    MOV   R2, #16     ;循环 16 遍

LOOP:

    MOV   P0, 30H     ;输出到 LED 

    MOV   P2, 31H

    CALL  DLY200MS    ;延时

    CALL  SHIFT_L     ;移位

    DJNZ  R2, LOOP    ;循环 16 遍


    SJMP  START       ;再从头开始

;-------------------------------------

SHIFT_L:              ;16位数左移一位

    MOV   A, 30H

    RLC   A           ;高位移入Cy

    MOV   30H, A

;---------------

    MOV   A, 31H

    RLC   A           ;Cy移入低位,且高位移入Cy

    MOV   31H, A

;---------------

    MOV   A, 30H

    MOV   ACC.0, C    ;把Cy(高位)写入低位

    MOV   30H, A

;---------------

RET

;-------------------------------------

DLY200MS:             ;延时200ms,误差0us

    MOV   R6, #197    ;

DL0:

    MOV   R7, #250    ;1

    DJNZ  R7, $       ;2 * 250 = 500

    DJNZ  R7, $       ;2 * 256 = 512

    DJNZ  R6, DL0     ;(1 + 500 + 512 + 2) * 197 = 199955

    MOV   R7, #19     ;1

    DJNZ  R7, $       ;2 * 19 = 38

    NOP               ;1

RET                   ;1 + 199955 + 1 + 38 + 1 + 2 = 199998

;-------------------------------------


END 

;=========================================================


上述程序所对应的电路,太简单了,就不在这里显示插图了,读者可自行画图。


当在电路中加入了一片 8155,电路可以如下连接:


在 51 单片机系统中使用 8155 - 非著名博主 - 电子信息角落


图片链接:http://xiangce.baidu.com/picture/detail/077253d8ef5443cc7ce6c5e5461a899e2034497a


图中,由于使用了 P2.7 和 P2.0 连接到 CS 和 IO/M,所以,8155 的接口地址、存储器地址分别为:


;I/O 地址:

COMMAND  EQU  7F00H

  PORTA  EQU  7F01H       

  PORTB  EQU  7F02H       

  PORTC  EQU  7F03H

TIMER_L  EQU  7F04H

TIMER_H  EQU  7F05H


;MEM 地址:


;7E00H ~ 7EFFH


因此,前面的流水灯程序,就要如下修改:


;=========================================================

;51单片机流水灯(16个灯)

;P0, P2 外接 16 个 LED--改为 PA, PB

;30H, 31H 片内RAM ----改为 片外


    ORG   0000H

START:

    MOV   DPTR, #COMMAND

    MOV   A, #00000011B;PA方式0输出,PB方式0输出

    MOVX  @DPTR, A


    INC   DPTR        ;转到PA

    MOV   A, #00110011B;测试共阳极7段数码管

    MOVX  @DPTR, A

    INC   DPTR        ;转到PB

    MOV   A, #00001111B

    MOVX  @DPTR, A


;    MOV   30H, #254   ;--改为 7E30H

;    MOV   31H, #255   ;--改为 7E31H


    MOV   DPTR, #7E30H

    MOV   A, #254

    MOVX  @DPTR, A


    MOV   DPTR, #7E31H ;片外 RAM 7E30H 7E31H

    MOV   A, #255      ;中仅有一个低电平

    MOVX  @DPTR, A

;-------------------------------------

    MOV   R2, #16     ;循环 16 遍

LOOP:


;    MOV   P0, 30H     ;输出到 LED 

;    MOV   P2, 31H


    MOV   DPTR, #7E30H

    MOVX  A, @DPTR

    MOV   DPTR, #PORTA

    MOVX  @DPTR, A


    MOV   DPTR, #7E31H

    MOVX  A, @DPTR

    MOV   DPTR, #PORTB

    MOVX  @DPTR, A


    CALL  DLY200MS    ;延时

    CALL  SHIFT_L     ;移位

    DJNZ  R2, LOOP    ;循环 16 遍


    SJMP  START       ;再从头开始

;-------------------------------------

SHIFT_L:              ;16位数左移一位

;    MOV   A, 30H

    MOV   DPTR, #7E30H

    MOVX  A, @DPTR


    RLC   A           ;高位移入Cy


;    MOV   30H, A

    MOVX  @DPTR, A

;---------------

;    MOV   A, 31H

    MOV   DPTR, #7E31H

    MOVX  A, @DPTR


    RLC   A           ;Cy移入低位,且高位移入Cy


;    MOV   31H, A

    MOVX  @DPTR, A

;---------------

;    MOV   A, 30H

    MOV   DPTR, #7E30H

    MOVX  A, @DPTR


    MOV   ACC.0, C    ;把Cy(高位)写入低位


;    MOV   30H, A

    MOVX  @DPTR, A

;---------------

RET

;-------------------------------------

DLY200MS:             ;延时200ms,误差0us

    MOV   R6, #197    ;

DL0:

    MOV   R7, #250    ;1

    DJNZ  R7, $       ;2 * 250 = 500

    DJNZ  R7, $       ;2 * 256 = 512

    DJNZ  R6, DL0     ;(1 + 500 + 512 + 2) * 197 = 199955

    MOV   R7, #19     ;1

    DJNZ  R7, $       ;2 * 19 = 38

    NOP               ;1

    RET               ;1 + 199955 + 1 + 38 + 1 + 2 = 199998

;-------------------------------------


END 


;=========================================================


原来程序中,凡是对 30H、31H 读写的指令,都改成对片外 RAM 读写。


凡是对 P0、P2 输出的指令,都改成对片外 PA、PB 输出。


这样写,程序的长度,将近增加了一倍。呵呵,没有办法,只能这样。


经过修改,即可利用 8155 的资源,进行流水灯的实验了。


显示的效果,是只有一个 LED 流动发光,比较简单,就不在这里插图了。


关键字:单片机系统 引用地址:在 51 单片机系统中使用 8155

上一篇:51单片机:在2位数码管上循环显示00-99,间隔0.5秒
下一篇:用 51 单片机和 DAC0832 做波形发生器

推荐阅读最新更新时间:2024-03-16 16:01

51单片机教程:单片机寻址方式与指令系统
通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习8051单片机的指令部份。 一、概述 1、指令的格式 我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机很“笨”,只能懂得数字,如前面我们写进机器的75H,90H,00H等等,所以指令的第一种格式就是机器码格式,也说是数字的形式。但这种形式实在是为难我们人了,太难记了,于是有另一种格式,助记符格式,如MOV P1,#0FFH,这样就好记了。 这两种格式之间的关系呢,我们不难理解,本质上它们完全等价,只是形式不一样而已。 2、汇编 我们写指令使用
[单片机]
非接触式e5551读写器的开发
摘要:介绍了非接触式e5551卡工作原理和与单片机的接口,给出了非接触式e5551卡读写器的硬件电路和读卡、写卡程序流程图。 关键词:非接触式卡 射频识别 读写器 RF 射频识别RFIDRadio Frequency Identification技术是二十世纪九十年代兴起的一项自动识别技术,它利用无线射频方式进行非接触式双向通信。RFID系统中卡片与读写器之间无须物理接触即可完成识别,可实现多目标识别和运动目标识别,应用范围更加广泛。 根据工作频率不同,RFID系统可分为低频、中频、高频系统。低频系统一般工作在100kHz~500kHz,中频系统工作在10MHz~15MHz,它们主要适用于短距离、低成本识别高频系统工作
[单片机]
Hash查找法在Keil C51中的实现
摘要:散列(hash)是一种重要的存储方法,也是一种常见的查找方法。它是指在记录的存储位置和它的关键字之间建立一个确定的对应关系。本文以射频卡门禁控制器为例,说明用射频卡卡号作为关键字,用Hash查找法确定此卡能否开门,并给出对应的Keil C51程序。 单片机应用系统中,经常要涉及到数据的存储和查找。以射频卡门禁系统为例,见图1。系统由51系列单片机、射频卡(RF卡)读卡电路、存储单元24C256、继电器等部分组成。其基本原理为:用户刷卡后,RF卡读卡电路读出卡号,通过I/O口线送入单片机。单片机收到卡号后,在存储单元中查找此卡是否允许开门。如允许,则命令继电器动作,打开电磁门锁:如不允许,则返回。 iframe id="
[单片机]
Hash查找法在Keil C<font color='red'>51</font>中的实现
基于嵌入式器件AT89C51SNDIC的电子治疗仪设计方案解析
1 引言 目前采用两个电极片对称覆盖治疗人体部位的电子治疗仪,是通过电极片上的脉动电压与治疗人体部位电阻产生作用,在治疗部位产生人体能够感知的脉动电流,刺激神经肌肉,使其收缩和舒张,产生运动效应,以达到治疗目的。但目前市场上此类型治疗仪产生的脉动电压只有少数几种,由于脉动电流频率周期固定,如果某治疗部位长期接受其脉动,就会产生抗疗作用,引起自发性紧张,从而降低治疗效果。为了解决这一问题,将MP3发出的随机音乐信号引入治疗仪,使音频信号与2.4 kHz的中频治疗频率进行调制,产生多种脉动电压和频率周期不断变换的脉动电流。它们随音乐信号起伏变化而发生作用,使患者一边欣赏着喜欢的音乐一边接受治疗,分散注意力,缓解紧张情绪,从而有助于提高
[单片机]
基于嵌入式器件AT89C<font color='red'>51</font>SNDIC的电子治疗仪设计方案解析
51单片机入门教程(2)——实现流水灯
一、搭建流水灯电路 在Proteus中搭建流水灯电路如图 二、流水灯程序 我们可以把流水灯看作依次点亮若干个灯。 程序如下: #include reg52.h sbit led1 = P2^0; sbit led2 = P2^1; sbit led3 = P2^2; sbit led4 = P2^3; sbit led5 = P2^4; sbit led6 = P2^5; sbit led7 = P2^6; sbit led8 = P2^7; void main() { //点亮第一个灯 led1 = 1; led2 = 0; led3 = 0; led4 = 0; led5 = 0; l
[单片机]
<font color='red'>51</font>单片机入门教程(2)——实现流水灯
使用AT89C51和DS18B20温度测量方法
  温度的测量和控制在激光器、光纤光栅的使用及其他的工农业生产和科学研究中应用广泛。温度检测的传统方法是使用诸如热电偶、热电阻、半导体PN结之类的模拟温度传感器。信号经取样、放大后通过模数转换,再交自单片机处理。被测温度信号从温敏元件到单片机,经过众多器件,易受干扰、不易控制且精度不高。因此,本文介绍一种新型的可编程温度传感器DS18B20,他能代替模拟温度传感器和信号处理电路,直接与单片机沟通,完成温度采集和数据处理。DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。   2温度测量系统硬件   系统结构图如图1所示 。这里通过上拉电
[单片机]
使用AT89C<font color='red'>51</font>和DS18B20温度测量方法
基于C8051F410单片机实现集装箱的安全监测装置与系统设计
引言 随着当前物流行业的快速发展。作为物流主要运输方式的集装箱运输.其运输效率及货运安全性日益受到人们关注。近几年来,随着RFID技术的发展和推广,将RFID技术用于集装箱信息识别.实现集装箱运输的智能化已经成为各集装箱厂家竞相开发的目标。RFID技术是一种利用射频通信方法实现的非接触式、快速、实时和准确的采集与处理信息的自动射频识别技术。目前集装箱运输上对RFlD技术的应用仅仅限于利用阅读器射频信道识别电子标签内集装箱信息.并有实现其运输安全上的保证。本文设计了一种基于C8051F410单片机的双频固定式阅读器。该阅读器与智能集装箱安全设备及路标设备配合实用.不仅能快速识别集装箱信息,而且能监测集装箱内货物的安全。一旦集装箱被非
[单片机]
基于C80<font color='red'>51</font>F410单片机实现集装箱的安全监测装置与系统设计
“Silicon Labs C8051F单片机技术研讨会”西安登场
专业电子元器件代理商 益登科技 今日宣布, 将与 高 效能模拟与混合信号 IC 领导厂商 Silicon Laboratories 携手合作,于 11 月 28 日 在西安举办 “C8051F 系列单片机技术研讨会 ” ,向用户呈现这些产品独特的功能。 据了解, C8051F 系列单片机因为其极高的指令运行速度,高性能的模拟功能和高集成性,受到用户的广泛欢迎。 随着 C8051F 系列单片机新产品的不断推出,一些新的应用也涌现出来。 此次研讨会将致力深入剖析 C8051F 的各种技术,介绍新近推出的 Ethernet 系列、 OTP 系列、 Automotive 系
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved