首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
93C46的读写实验程序
来源:本站整理  作者:佚名  2011-02-05 21:46:00



;*******************************************************************
 ;* 当选择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

关键词:

·上一文章:24c02开机计数器程序
·下一文章:ADC0832转换程序

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:17,320.31000 毫秒