本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
93C46的读写实验程序,汇编编写的。
- ;*******************************************************************
- ;* 当选择8 位结构时93C46 有7 条10 位的指令
- ;* 指令、地址和写入的数据在时钟信号SK 的上升沿时由DI 引脚输入
- ;* DO 引脚除了从器件读取据或在进行了写操作后查询准备/繁忙ready/busy 的器件工作状态外平常是高阻态的
- ;******************************************************************************************
- ;程序首先从89S51的 ADDR,WDM 读出欲写入93C46的地址和数据,然后再把写入的数据读出来
- ;存放在 RDM ,再把ADDR , RDM 同过四位数码管显示出来.
- ;-------------端口和存储单元的定义---------------
- CS EQU P3.5 ;片选端
- SK EQU P2.6 ;模拟时钟信号输出端
- DI EQU P2.5 ;串行数据输出端
- DO EQU P2.4 ;串行数据输入端
- WDM EQU 51H ;欲写入数据存储单元
- RDM EQU 50H ;读出存放于 89S51 RAM 的存储单元
- ADDR EQU 42H ;欲写入93C46的地址
- ;------------------------------------------------
- ORG 0000H
- LJMP MAIN
- ORG 0100H ;主程序
- MAIN:
- MOV ADDR,#20H ;欲写入的地址设置(可根据需要自行修改)
- MOV WDM,#0ffH ;要写入的数据(可根据需要自行修改)
- LCALL EWEN46 ;调用写允许子程序,93C46每次上电后在进行写操作前都要先写允许
- LCALL WRITE ;调用写入子程序
- LCALL READ ;调用读子程序
- SJMP $
- ;*********************************************************************
- ;********************** 各功能子程序 *****************************
- ;*********************************************************************
- ;----------------------------------------------------
- ;发送高电平 1
- ;-----------------------------------------------------
- HIGH46:
- SETB DI
- SETB SK
- NOP
- CLR SK
- NOP
- RET
- ;-----------------------------------------------------
- ;发送低电平 0
- ;-----------------------------------------------------
- LOW46:
- CLR DI
- SETB SK
- NOP
- CLR SK
- NOP
- RET
- ;-------------------------------------------
- ;---------------------延时-------------------
- DL2MS:
- MOV R4,#8;
- DD3:
- MOV R5,#124
- DJNZ R5,$
- DJNZ R4,DD3
- RET
- ;--------------------------------------------
- ;-----------------------------------------------------
- ;-------------------写操作允许子程序--------------------
- ;-----------------------------------------------------
- EWEN46: ; ( 10011***** )
- SETB CS ;启动93C46
- NOP
- LCALL HIGH46 ;1
- LCALL LOW46 ;0
- LCALL LOW46 ;0
- LCALL HIGH46 ;1
- LCALL HIGH46 ;1
- LCALL LOW46 ;0
- LCALL LOW46 ;0
- LCALL LOW46 ;0
- LCALL LOW46 ;0
- LCALL LOW46 ;0
- NOP
- CLR CS ;93C46 进入休眠,降低功耗
- RET
- ;-----------------------------------------------------------------
- ;------------向指定的地址中写入一个字节数据(八位)子程序---------
- ;-----------------------------------------------------------------
- WRITE: ;101
- SETB CS ;启动93C46
- NOP
- MOV A,ADDR ;把欲写入的数据的地址
- LCALL HIGH46 ;1
- LCALL LOW46 ;0
- LCALL HIGH46 ;1
- WR_ADDR: ;欲写入地址的设置,93C46的地址为 7 位
- MOV C,ACC.6
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.5
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.4
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.3
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.2
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.1
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.0
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- WR_DAT: ;写入一个字节数据(8位)
- MOV A,WDM
- MOV C,ACC.7
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.6
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.5
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.4
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.3
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.2
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.1
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.0
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- LCALL DL2MS ;调用延时,等待DO空闲!!!
- LCALL DL2MS
- LCALL DL2MS
- LLK: CLR CS ;93C46 进入休眠,降低功耗
- RET
- ;-----------------------------------------------------------------
- ;-----------------------------------------------------
- ;----------从指定的地址中读出一个字节数据(八位)子程序
- ;-----------------------------------------------------
- READ: ;110
- SETB CS ;启动93C46
- NOP
- MOV A,ADDR ;把欲读出的数据的地址送给A
- LCALL HIGH46
- LCALL HIGH46
- CLR DI
- SETB SK
- NOP
- CLR SK
- NOP
- RD_ADDR: ;读出地址设置(7位地址)
- MOV C,ACC.6
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.5
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.4
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.3
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.2
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.1
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- MOV C,ACC.0
- MOV DI,C
- SETB SK
- NOP
- CLR SK
- NOP
- RD_DAT: ;读出一个字节的数据
- SETB SK
- NOP
- MOV C,DO
- MOV ACC.7,C
- CLR SK
- NOP
- SETB SK
- NOP
- MOV C,DO
- MOV ACC.6,C
- CLR SK
- NOP
- SETB SK
- NOP
- MOV C,DO
- MOV ACC.5,C
- CLR SK
- NOP
- SETB SK
- NOP
- MOV C,DO
- MOV ACC.4,C
- CLR SK
- NOP
- SETB SK
- NOP
- MOV C,DO
- MOV ACC.3,C
- CLR SK
- NOP
- SETB SK
- NOP
- MOV C,DO
- MOV ACC.2,C
- CLR SK
- NOP
- SETB SK
- NOP
- MOV C,DO
- MOV ACC.1,C
- CLR SK
- NOP
- SETB SK
- NOP
- MOV C,DO
- MOV ACC.0,C
- CLR SK
- NOP
- MOV RDM,A ;保存读出的数据到 RDM(22H)
- CLR CS ;93C46 进入休眠,降低功耗
- RET
- ;---------------------------------------------------------------------------
- ;-----------------------------------------------------
- ;-----------擦除所有单元子程序--------------------------
- ;-----------------------------------------------------
- EARASE:
- SETB CS ;启动93C46
- NOP
- LCALL HIGH46
- LCALL LOW46
- CLR DI
- SETB SK
- NOP
- CLR SK
- NOP
- SETB DI
- SETB SK
- NOP
- CLR SK
- NOP
- CLR DI
- SETB SK
- NOP
- CLR SK
- NOP
- CLR DI
- SETB SK
- NOP
- CLR SK
- NOP
- CLR DI
- SETB SK
- NOP
- CLR SK
- NOP
- CLR DI
- SETB SK
- NOP
- CLR SK
- NOP
- CLR DI
- SETB SK
- NOP
- CLR SK
- NOP
- SETB DI
- SETB SK
- NOP
- CLR SK
- NOP
- LCALL DL2MS ;调用延时,等待DO空闲!!!
- LCALL DL2MS
- LCALL DL2MS
- LLL: CLR CS ;93C46 进入休眠,降低功耗
- RET
- ;----------------------------------------------------------------------
- END
复制代码 |