⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 93c46.asm

📁 用于51系列单片机上的存储器控制。通过led直观的表现出来。 硬件部分为8051单片机和93c46存储器 以及8个led
💻 ASM
字号:
/************************************************************
* 程序功能:用93c46控制led灯
* 硬件说明:	AT89S51		93C46
*			   P3_4		   DO
*			   P3_5		   DI
*			   P3_6		   SK
*			   P3_7		   CS
1 用一个 4PIN 数据排线一端插入 CPU 部分 JP53(P3 口)的 P3.4,P3.5,P3.6,P3.7。另外一端插入 93C46 部分的输入端 JP46.
2 用一条 8PIN 的数据排线把 CPU 部份的 P2 口(JP52)接到八路指示灯部份的 JP32。	
************************************************************/
        READ EQU 0         ;读93C46
        WRITE EQU 2        ;写入93C46
        EWEN EQU 4         ; 93C46写入使能
        EWDS EQU 6         ; 93C46写入禁止

        CS BIT P3.7        ; 93C46 CS
        CLK BIT P3.6       ; 93C46 CLK
        DI BIT P3.5        ; 93C46 DI
        DO BIT P3.4        ; 93C46 DO

        ADR46 EQU 20H

        ORG 00H
START0: MOV 21H,#00H       ; 取地址码
        MOV 22H,#08H       ; 8组8个码
        MOV P3,#10H

        MOV ADR46,#00H     ;93C46地址00H
START:  MOV A,#EWEN        ;写入使能
        CALL TO9346
        MOV A ,21H         ;载入取码指针
        MOV DPTR,#TABLE    ;至TABLE取码
        MOVC A,@A+DPTR

        MOV R4,A           ;存入"写入寄存器"
        MOV A,#WRITE       ;写入数据
        CALL TO9346

        MOV A,#EWDS        ;写禁止
        CALL TO9346

        INC 21H            ;取下一个码
        INC ADR46          ;下一个地址
        CALL DELAY1
        DJNZ 22H,START
        MOV R0,#30H        ;存入8051的RAM 地址
        MOV ADR46,#00H     ;93C46 :00地址
        MOV 22H,#08H       ; 93C46 8个地址8个码
A1:     MOV A,#READ        ;读(地址)的数据
        CALL TO9346
        MOV A,R4           ;93C46输出的数据载入ACC
        MOV @R0,A
        INC ADR46          ;读下一个地址
        INC R0             ;下一个RAM
        DJNZ 22H,A1

A2:     MOV 22H,#08H
        MOV R0,#30H
OUTPUT: MOV A,@R0
        MOV P2,A           ;输出至P2
        CALL DELAY1 ;
        INC R0
        DJNZ 22H,OUTPUT
        JMP A2

TO9346: SETB CS            ;93C46 CS=1
        SETB DI            ;DI=1
        SETB CLK           ;CLK=1
        CALL DELAY         ;启动位
        CLR CLK            ;CLK=0
        CALL DELAY
        MOV DPTR,#JPTBL46
        JMP @A+DPTR        ;依ACC值跳至相关地址
JPTBL46:AJMP SREAD         ;读
        AJMP SWRITE        ;写
        AJMP SEWEN         ;写使能
        AJMP SEWDS         ;写禁止
SREAD:
        MOV A,#80H         ;送操作码10
        CALL SDATA
        MOV A,ADR46        ;载入93C46地址
        CALL SADR          ;写入7位地址(DI)
        CALL RDT46         ;读出数据(DO),存入3CH
        MOV R4,A
        ;CALL RDT46        ;读出数据(DO),存入3DH
        ;MOV 3DH,A
        JMP EX9346
SWRITE:
        MOV A,#40H         ;送操作码01
        CALL SDATA
        MOV A,ADR46        ;载入93C46地址
        CALL SADR          ;写入7位地址
        MOV A,R4           ;写入(3CH)数据
        CALL SDT46
        ;MOV A,3DH         ;写入(3DH)数据
        ;CALL SDT46
        JMP EX9346
SEWEN:
        CLR A              ;送操作码00
        CALL SDATA
        MOV A,#60H         ;写使能操作码11XXXXX
        CALL SADR
        JMP EX9346
SEWDS:
        CLR A              ;送操作码00
        CALL SDATA
        CLR A              ;写7位禁止操作码000XXXX
        CALL SADR

EX9346: CLR CS             ;CS=0
        RET

SADR:
        CLR C
        RLC A
        MOV R3,#7
        JMP SD1
SDATA:
        MOV R3,#2
        JMP SD1
SDT46:  MOV R3,#8          ;写入8位数据
SD1:    RLC A ;
        MOV DI,C
        SETB CLK
        CALL DELAY
        CLR CLK
        CALL DELAY
        DJNZ R3,SD1
        RET

RDT46:  MOV R3,#8          ;读出8位数据
RD1:    SETB CLK
        CALL DELAY
        CLR CLK
        CALL DELAY
        MOV C,DO
        RLC A
        DJNZ R3,RD1
        RET

DELAY:  MOV R7,#0FH
        DJNZ R7,$
        RET

DELAY1: MOV R4,#20
D1:     MOV R5,#20
D2:     MOV R6,#248
        DJNZ R6,$
        DJNZ R5,D2
        DJNZ R4,D1
        RET

TABLE:  DB 0FEH ,0FDH ,0FBH, 0F7H ;广告一个灯左移
        DB 0EFH ,0DFH ,0BFH, 7FH ;
        END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -