www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] AT93C46匯編讀寫示例程序;說明:軟件包僅適用于93C468位存儲(chǔ)器結(jié)構(gòu)狀態(tài),軟件包可嵌入到80C51ROM中任一空間。;fosc=12MHz;----------------------------------------------------------R31EQU1FHCSEQUP1.

AT93C46匯編讀寫示例程序;說明:軟件包僅適用于93C468位存儲(chǔ)器結(jié)構(gòu)狀態(tài),軟件包可嵌入到80C51ROM中任一空間。
;fosc=12MHz
;----------------------------------------------------------
R31EQU1FH

CSEQUP1.0;片選端
SKEQUP1.1;模擬時(shí)鐘信號(hào)輸出端
DIEQUP1.2;串行數(shù)據(jù)輸出端
DOEQUP1.3;串行數(shù)據(jù)輸入端
;----------------------------------------------------------
ORG0000H
JMPMAIN

ORG0100H
MAIN:
MOVR0,#7FH
CLRA
MOV@R0,A
DJNZR0,$-2
MOVSP,#60H
MAIN1:
MOVR0,#30H
MOVR7,#16
MOVA,#1
MOV@R0,A
INCR0
INCA
DJNZR7,$-3

CALLEWNE;擦寫允許
MOVA,#01100000B;地址"11xxxxx"
CALLINADR;輸出地址

CALLEWNE;片擦除(將整個(gè)存儲(chǔ)器置為"1")
MOVA,#01000000B;片擦除地址
CALLINADREW;輸出地址
CALLDLY10ms

CALLRD16;讀指定地址單元的數(shù)據(jù)

CALLWRITE;將數(shù)據(jù)寫入指定地址單元

CALLERASE;擦除(將指定地址單元置為"1")
MOVA,#01H;地址
CALLINADREW;輸出地址
CALLDLY10ms

CALLRD16;讀

CALLEWNE;擦/寫禁止
MOVA,#0;地址"00xxxxx"
CALLINADR;輸出地址

JMPMAIN1
;==========================================================
;----------------------------------------------------------
;將存在80C51內(nèi)RAM30H為首地址的16字節(jié)數(shù)據(jù)依次寫入93C46首址00H的EEPROM
;注意:93C46上電復(fù)位后,芯片處于寫保護(hù)狀態(tài),所以在擦寫操作前,應(yīng)開啟"寫允許".
;否則無(wú)法寫入數(shù)據(jù).

WRITE:
MOVA,#01100000B;地址"11xxxxx"
CALLINADR;輸出地址
MOVR0,#30H;置源數(shù)據(jù)區(qū)首址
MOVR1,#00H;置93C46寫入單元首址
MOVR7,#16;字節(jié)數(shù)
CALLWRIT6
RET
;----------------------------------------------------------
;將AT93C46首址為00H的16字節(jié)數(shù)據(jù)讀出并存入80C51以30H為首址的內(nèi)RAM中

RD16:MOVR0,#20H;置數(shù)據(jù)存儲(chǔ)區(qū)首址
MOVA,#00H;置93C46讀出單元首地址
MOVR7,#16;字節(jié)數(shù)送R7
LCALLSTATRD;啟動(dòng)讀
LCALLINADR;輸出93C46讀出單元首址
RD160:
LCALLREAD;讀出一個(gè)字節(jié)數(shù)據(jù)
MOV@R0,A;存一個(gè)字節(jié)數(shù)據(jù)
INCR0;指向下一存儲(chǔ)單元地址
DJNZR7,RD160;判16字節(jié)數(shù)據(jù)讀完否?未完繼續(xù)
CLRCS;16字節(jié)數(shù)據(jù)讀完,置93C46低功耗備用狀態(tài)
CALLDLY10ms;延時(shí)10ms,以便進(jìn)行芯片的其它功能操作
RET
;----------------------------------------------------------
;入口:數(shù)據(jù)區(qū)首址在R0,93C46單元地址在R1,寫入的字節(jié)數(shù)在R7中

WRIT6:
LCALLSTATWR;啟動(dòng)寫
MOVA,R1;置93C46寫入單元地址
LCALLINADR;輸出93C46寫入地址單元
MOVA,@R0;讀寫入數(shù)據(jù)
LCALLWRIT;寫入一個(gè)字節(jié)
LCALLDLY1ms;延時(shí)1ms
INCR0;指向8051下一個(gè)數(shù)據(jù)地址
INCR1;指向93C46下一個(gè)寫入單元地址
DJNZR7,WR61;判6字節(jié)數(shù)據(jù)寫完否?未完繼續(xù)
CLRCS;93C46進(jìn)入備用狀態(tài),降低功耗
CALLDLY10ms
RET
WR61:JBDO,WRIT6;判REDAY/BUSY,DO=1,寫入下一字節(jié)
SJMPWR61;DO=0,轉(zhuǎn)等待

;==========================================================
;啟動(dòng)讀子程序
;說明:STATRD子程序輸出啟動(dòng)和讀操作代碼"110"
;----------------------------------------------------------
STATRD:
CLRCS;片選置低
CLRSK;時(shí)鐘置低
SETBCS
SETBDI;置啟動(dòng)"1"
SETBSK;時(shí)鐘上升沿輸出啟動(dòng)信號(hào)"1"
CLRSK
SETBSK;時(shí)鐘上升沿輸出"1"
CLRSK
CLRDI;置輸出"0"
SETBSK;時(shí)鐘上升沿輸出"0"
CLRSK;時(shí)鐘置低
RET
;----------------------------------------------------------
;啟動(dòng)寫子程序
;說明:STATWR子程序輸出啟動(dòng)和寫操作代碼"101"
;----------------------------------------------------------
STATWR:
CLRCS;片選置低
CLRSK;時(shí)鐘置低
SETBCS;置片選
SETBDI;置啟動(dòng)"1"
SETBSK;時(shí)鐘上升沿輸出啟動(dòng)信號(hào)"1"
CLRSK
CLRDI;置輸出"0"
SETBSK;時(shí)鐘上升沿輸出"0"
CLRSK
SETBDI;置輸出"1"
SETBSK;時(shí)鐘上升沿輸出"1"
CLRSK;時(shí)鐘置低
RET
;----------------------------------------------------------
;擦寫允許/禁止啟動(dòng)和操作代碼"100"
;該子程序可用于:擦寫允許(EWEN)、寫禁止(EWDS)、片寫(WRAL)、片擦除(ERAL),
;只是各自的地址不同而也.
;擦寫允許/禁止操作代碼"100",地址"11xxxxx"/"00xxxxx"
;----------------------------------------------------------
EWNE:
CLRCS;片選置低
CLRSK;時(shí)鐘置低
SETBCS;置片選
SETBDI;置啟動(dòng)"1"
SETBSK;時(shí)鐘上升沿輸出啟動(dòng)信號(hào)"1"
CLRSK
CLRDI;置輸出"0"
SETBSK;時(shí)鐘上升沿輸出"0"
CLRSK
CLRDI;置輸出"0"
SETBSK;時(shí)鐘上升沿輸出"1"
CLRSK;時(shí)鐘置低
RET
;----------------------------------------------------------
;擦指令ERASE啟動(dòng)和操作代碼"111"
;----------------------------------------------------------
ERASE:
CLRCS;片選置低
CLRSK;時(shí)鐘置低
SETBCS;置片選
SETBDI;置啟動(dòng)"1"
SETBSK;時(shí)鐘上升沿輸出啟動(dòng)信號(hào)"1"
CLRSK
SETBDI;置輸出"1"
SETBSK;時(shí)鐘上升沿輸出"0"
CLRSK
SETBDI;置輸出"1"
SETBSK;時(shí)鐘上升沿輸出"1"
CLRSK;時(shí)鐘置低
RET
;----------------------------------------------------------
;輸出讀寫單元地址子程序
;入口:7位地址已存在A中D6~D0
;----------------------------------------------------------
INADR:
MOVR2,#7;置寫入地址位數(shù)(存儲(chǔ)單元8位結(jié)構(gòu)時(shí),地址為7位)
RLCA;先左移一位,地址移至D7~D1,D0無(wú)效
IR1:CLRSK;時(shí)鐘置低
RLCA;左移一位
MOVDI,C;存入DI端口
SETBSK;時(shí)鐘上升沿輸出至93C46DI端
DJNZR2,IR1;判斷7位地址寫完否,未完繼續(xù)
RET
;----------------------------------------------------------
;輸出擦單元地址子程序

INADREW:
CALLINADR
CLRCS
NOP
SETBCS
JNBDO,$;DO=0,表示編程正在進(jìn)行;
;DO=1,表示該指定地址的寄存器單元已擦完,可以執(zhí)行下一條指令。
RET
;----------------------------------------------------------
;讀一個(gè)字節(jié)子程序
;出口:8位數(shù)據(jù)存在A中
;----------------------------------------------------------
READ:CLRSK;時(shí)鐘置低
MOVR2,#8;置讀入位數(shù)8
RD1:SETBSK;時(shí)鐘上升沿讀入一位數(shù)據(jù)
NOP
MOVC,DO;存入Cy
RLCA;左移入A中
CLRSK;時(shí)鐘置低
DJNZR2,RD1;判8位數(shù)據(jù)讀完否?未完繼續(xù)
RET
;----------------------------------------------------------
;確良寫一個(gè)字節(jié)子程序
;入口:寫入數(shù)據(jù)須事先存入A中.
;若需寫入多個(gè)字節(jié)數(shù)據(jù),須在1ms后,93C46DO端出現(xiàn)高電平后才能重新啟動(dòng)寫入.
;----------------------------------------------------------
WRIT:
MOVR2,#8;置寫入位數(shù)8
WR1:CLRSK;時(shí)鐘置低
RLCA;A中數(shù)據(jù)移一位至Cy中
MOVDI,C;數(shù)據(jù)傳送至DI端
nop
SETBSK;時(shí)鐘上升沿輸出至93C46
DJNZR2,WR1;判8位數(shù)據(jù)寫完否?未完繼續(xù)
CLRCS;8位數(shù)據(jù)寫完,CS下降沿啟動(dòng)93C46擦寫
SETBCS;CS次高位,以使DO端REDAY/BUSY狀態(tài)位號(hào)有效
RET
;----------------------------------------------------------
DLY1ms:;延時(shí)1ms子程序
MOVR31,#29;
L2:PUSHR31
L3:DJNZR31,L3
POPR31
DJNZR31,L2
RET
DLY10ms:;延時(shí)10ms子程序
MOVR31,#100
L20:PUSHR31
L30:DJNZR31,L30
POPR31
DJNZR31,L20
RET
;==========================================================
END

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉