用单片机AT89C51扩展并行可编程I/O接口芯片8255。

用单片机AT89C51扩展并行可编程I/O接口芯片8255。PA口的每位都接一个发光二极管,要求发光二极管从左到右以一定延迟轮流显示,并不断循环。

程序和仿真图如下,程序和仿真文件见附件。有问题请追问。

RD_8255 EQU P2.0  ;8255读引脚 低电平有效

WR_8255 EQU P2.1  ;8255写引脚 低电平有效

A0_8255 EQU P2.2  ;

A1_8255 EQU P2.3  ;

;A1,A0:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器。    

;当A1=0, A0=0时,PA口被选择;     

;当A1=0, A0=1时,PB口被选择;     

;当A1=1, A0=0时,PC口被选择;      

;当A1=1. A0=1时,控制寄存器被选择。

RESET_8255 EQU P2.4;8255复位引脚 高电平复位

CS_8255 EQU P2.5 ;8255 片选 低电平有效


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

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

ORG  0000H

JMP  MAIN

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

MAIN:

MOV  SP,#60H

    CLR CS_8255 ;低电平有效

    CLR RESET_8255 ;高电平复位

    

    MOV   P0, #80H   ;PA输出 10000000


    CLR   WR_8255    ;写入控制寄存器

    SETB  WR_8255

    MOV R3,#01H

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

LOOP:

    MOV   P0, R3   ;输出

    CLR   A1_8255    ;选定PA

    CLR   A0_8255

    CLR   WR_8255    ;

    NOP              ;

    NOP              ;

    SETB  WR_8255

   

    CALL DELAY500MS

    MOV A,R3

    RLC A

    MOV R3,A


    SJMP  LOOP

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

DELAY500MS:   ;误差 0us

    MOV R7,#0CDH

DL1:

    MOV R6,#74H

DL0:

    MOV R5,#09H

    DJNZ R5,$

    DJNZ R6,DL0

    DJNZ R7,DL1

    RET

END

温馨提示:答案为网友推荐,仅供参考
相似回答