当前位置:首页 > > 充电吧
[导读]单片机自身的 RAM 存储空间和引脚数目往往有些不足,当需要在外部拓展不太多的时候,8155 芯片就是首选了。一片 8155,可以提供 256 字节的 RAM,3 个并行 IO 接口和一个 14 位的

单片机自身的 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,电路可以如下连接:



图中,由于使用了 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 流动发光,比较简单,就不在这里插图了。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

8位单片机在嵌入式设计领域已经成为半个多世纪以来的主流选择。尽管嵌入式系统市场日益复杂,8位单片机依然不断发展,积极应对新的挑战和系统需求。如今,Microchip推出的8位PIC®和AVR®单片机系列,配备了先进的独立...

关键字: 单片机 嵌入式 CPU

在嵌入式系统开发中,程序烧录是连接软件设计与硬件实现的关键环节。当前主流的单片机烧录技术已形成ICP(在电路编程)、ISP(在系统编程)、IAP(在应用编程)三大技术体系,分别对应开发调试、量产烧录、远程升级等不同场景。...

关键字: 单片机 ISP ICP IAP 嵌入式系统开发

在嵌入式系统开发中,看门狗(Watchdog Timer, WDT)是保障系统可靠性的核心组件,其初始化时机的选择直接影响系统抗干扰能力和稳定性。本文从硬件架构、软件流程、安全规范三个维度,系统分析看门狗初始化的最佳实践...

关键字: 单片机 看门狗 嵌入式系统

本文中,小编将对单片机予以介绍,如果你想对它的详细情况有所认识,或者想要增进对它的了解程度,不妨请看以下内容哦。

关键字: 单片机 开发板 Keil

随着单片机系统越来越广泛地应用于消费类电子、医疗、工业自动化、智能化仪器仪表、航空航天等各领域,单片机系统面临着电磁干扰(EMI)日益严重的威胁。电磁兼容性(EMC)包含系统的发射和敏感度两方面的问题。

关键字: 单片机 电磁兼容

以下内容中,小编将对单片机的相关内容进行着重介绍和阐述,希望本文能帮您增进对单片机的了解,和小编一起来看看吧。

关键字: 单片机 复位电路

在这篇文章中,小编将为大家带来单片机的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 单片机 异常复位

今天,小编将在这篇文章中为大家带来单片机的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: 单片机 仿真器

单片机将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对它的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 单片机 中断 boot

一直以来,单片机都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来单片机的相关介绍,详细内容请看下文。

关键字: 单片机 数字信号 模拟信号
关闭