;* ========================================================================== *
; 东哥 单片机 学习网 网址: www.55dianzi.com
; 名称: AT93C46的汇编读写软件包
; 文件名: 93C46_8.ASM
; 程序模块已通过硬件仿真调试,方便实用.
;* ========================================================================== *
; 说明: 软件包仅适用于93C46 8位存储器结构状态,软件包可嵌入到80C51 ROM中任一空间。
; fosc = 12MHz
;----------------------------------------------------------
R31 EQU 1FH
CS EQU P1.0 ;片选端
SK EQU P1.1 ;模拟时钟信号输出端
DI EQU P1.2 ;串行数据输出端
DO EQU P1.3 ;串行数据输入端
;----------------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0100H
MAIN:
MOV R0,#7FH
CLR A
MOV @R0,A
DJNZ R0,$-2
MOV SP,#60H
MAIN1:
MOV R0,#30H
MOV R7,#16
MOV A,#1
MOV @R0,A
INC R0
INC A
DJNZ R7,$-3
CALL EWNE ;擦写允许
MOV A,#01100000B ;地址"11xxxxx"
CALL INADR ;输出地址
CALL EWNE ;片擦除(将整个存储器置为"1")
MOV A,#01000000B ;片擦除地址
CALL INADREW ;输出地址
CALL DLY10ms
CALL RD16 ;读指定地址单元的数据
CALL WRITE ;将数据写入指定地址单元
CALL ERASE ;擦除(将指定地址单元置为"1")
MOV A,#01H ;地址
CALL INADREW ;输出地址
CALL DLY10ms
CALL RD16 ;读
CALL EWNE ;擦/写禁止
MOV A,#0 ;地址"00xxxxx"
CALL INADR ;输出地址
JMP MAIN1
;==========================================================
;----------------------------------------------------------
;将存在80C51内RAM 30H为首地址的16字节数据依次写入93C46首址00H的EEPROM
;注意: 93C46上电复位后,芯片处于写保护状态,所以在擦写操作前,应开启"写允许".
;否则无法写入数据.
WRITE:
MOV A,#01100000B ;地址"11xxxxx"
CALL INADR ;输出地址
MOV R0,#30H ;置源数据区首址
MOV R1,#00H ;置93C46写入单元首址
MOV R7,#16 ;字节数
CALL WRIT6
RET
;----------------------------------------------------------
;将AT93C46 首址为00H的16字节数据读出并存入80C51以30H为首址的内RAM中
RD16: MOV R0,#20H ;置数据存储区首址
MOV A,#00H ;置93C46读出单元首地址
MOV R7,#16 ;字节数送R7
LCALL STATRD ;启动读
LCALL INADR ;输出93C46读出单元首址
RD160:
LCALL READ ;读出一个字节数据
MOV @R0,A ;存一个字节数据
INC R0 ;指向下一存储单元地址
DJNZ R7,RD160 ;判16字节数据读完否?未完继续
CLR CS ;16字节数据读完,置93C46低功耗备用状态
CALL DLY10ms ;延时10ms,以便进行芯片的其它功能操作
RET
;----------------------------------------------------------
;入口: 数据区首址在R0,93C46单元地址在R1,写入的字节数在R7中
WRIT6:
LCALL STATWR ;启动写
[1] [2] [3] 下一页
本文关键字:软件程序 51单片机,单片机-工控设备 - 51单片机