跑马灯/输入输出接口(片选地址74LS273)


;NAME:  跑马灯
;AUTOR:
;TIEE: 2012年4月12日 18:12:25
;CONTENT: P1.0~P1.7接发光二极管L1~L8     
     CSEG AT 4000H         ;定义起始地址,为什么是4000H呢
                       ;存储器:程序存储器、数据存储器统一编址,达64K,板上ROM(16K);RAM
                       ;(32K)供用户使用,可扩展至48k。用户存储器起始地址为4000H;8051原
                       ;有中断入口地址均定位在偏移4000H之后的相应地址
     LJMP START 
     CSEG AT 4100H 
START:    
     MOV A, #01H          ; 先让第一个发光二极管点亮 ,选#01的原因是加了反相器
 LOOP:     
     MOV P1, A            ; 从P1口输出到发光二极管    
       
 DELAY500MS:               ;延时0.5秒 
        MOV R7,#0BH
 DL1:
        MOV R6,#5CH
 DL0:
        MOV R5,#7AH
        DJNZ R5,$
        DJNZ R6,DL0
        DJNZ R7,DL1 
        RL   A             ; 左移一位,点亮下一个发光二极管 
        LJMP  LOOP
 
 END                 
                                  

 

 

 

;NAME:  输入输出接口(读出开关的闭合还是断开)
;AUTOR: 
;TIME: 2012年4月12日 18:22:14
;CONTENT: P1.0~P1.7接按钮K1~K8;74LS273的SO0~SO7接发光     二极管L1~L8,片选端CSU8\接CS0(由程序选择的入口地址而定)。 
PORT EQU 0CFA7H
;片选地址CS0 CSEG AT 4000H        ;绝对寻址,同上 LJMP START CSEG AT 4100H START: MOV P1, #0FFH LOOP: MOV A, P1 ;从P1口读取开关状态 MOV DPTR, #PORT MOVX @DPTR, A ;从74LS273输出到发光二极管 LJMP LOOP ;循环 END

 

片选地址74ls172的接法

 

74LS273是一个八位的数据/地址锁存器。本例采用74LS273扩展I/O输出端口,通过片选信号和写信号将数据总线上的值锁存在74LS273中,同时在74LS273的端口输出数据。当数据总线上的值撤销后,由于74LS273能锁存信号,所以74LS273的输出端保持不变,直到有新的数据被锁存。

1. 硬件设计

创建一个新的Design,添加如下元件(略去晶振和复位电路):

元 件 名

所 在 类

参 数

备 注

AT89C51

Microprocessor ICs

8051 Family

 

单片机

LED-YELLOW

Optoelectronics

Leds

 

LED

RES

Resistors

Generic

270Ω

电阻

74LS273

TTL 74LS Series

Flip-Flop & Latches

双稳态多谐振荡器&闭锁

锁存器

74LS32

TTL 74LS Series

Gates & Inverters

门电路 & 反相器

或门

用8个发光二极管显示单片机的输出数据,输出为低电平时LED灯亮。74LS273的D0~D7为8位数据输入端,接单片机的P0口,Q0~Q7为8位数据输出端,CLK为触发时钟输入端,MR为数据清除使能端。采用或门74LS32进行地址译码,U3:A的输入端分别接单片机的P2.7口和WR口,输出端接74LS273的CLK口。

从74LS273的真值表可以看出,当MR为低电平时,所有的Q端为0,否则Q端随D端而定,因此,MR应置为高电平。CLK在上升沿时完成数据锁存操作,因此U3:A的输出必须完成一个由低到高的变化。当写指令有效时,输出低电平,只有P2.7同时为低电平时,才能在写指令完成时实现一个由低到高的电平变化,这样在写完成后,数据被74LS273锁定。可见,74LS273地址应该为0XXX XXXX XXXX XXXX,一般我们设为7FFF。

2. 程序设计

在Keil C51中,有以下的内存类型:

  • code    以 MOVC a,@A+DPTR 读取的程序内存
  • data    可以直接存取的内部数据存储器
  • idata    以 Mov @Rn 存取的内部数据存储器
  • bdata    可以位寻址(Bit Addressable)的内部存储器
  • xdata    以 MOVX @DPTR 存取的外部数据存储器
  • pdata    以 MOVX @Rn 存取的外部数据存储器

为了定义使用方便,在absacc.h文件中对此进行了宏定义,比如此例中的地址0x7fff,就可写为XBYTE[0x7fff]。

#include "at89x51.h"

#include "absacc.h"

 

#define A74273 XBYTE[0x7fff]

void main(void)

{

    A74273 = 0x2b;

    while(1);  

}

 

注意了:当写指令有效时(应该是WR,无效时为高),输出低电平,只有P2.7同时为低电平时,才能在写指令完成时实现一个由低到高的电平变化,这样在写完成后,数据被74LS273锁定。可见,74LS273地址应该为0XXX XXXX XXXX XXXX,一般我们设为7FFF。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM