?? 25aa640.asm
字號:
#include ht46r47.inc
cs equ pa.3
SO equ pa.2
SI equ pa.1
CLK equ pa.0
SO_C equ pac.2
data .section 'data'
data1 db ? ;寫狀態寄存器指令值
data2 db ? ;8位數據賦值
data3 db ? ;32位數據賦值
data4 db ? ;7f位數據賦值
sheetdata db ? ;數據表位數
count1 db ? ;定義計數1變量,時間延時用
count2 db ? ;定義計數2變量,時間延時用
win_address db ? ;要寫入的地址值
win_data db ? ;要寫入的數據值
rout_address db ? ;要讀出的地址值
rout_data db ? ;要讀出數據存儲器中的數據值(包括狀態寄存器中的數據值)
WAIT_WRITE MACRO ;為了給寫足夠的時間,25AA640=5MS ;延時 (2*R2+3)*R1+2=(2*27+3)*98+2=6000us 約6ms
LOCAL R1,R2
mov a,27
mov count1,a
R1:
mov a,98
mov count2,a
R2:
sdz count2
jmp R2
sdz count1
jmp R1
ENDM
code .section 'code'
org 00h
jmp star
star:
set cs
clr pac ;設PA口為輸出
CLR SO_C ;設SO口為輸出
;-----------------------------------------------
;;;;;;;設置寫狀態寄存器指令
clr cs
mov a,01h
call wdata
mov a,00h ;寫入前狀態寄存器值00
call wdata
nop
set cs
nop
;-----------------------------------------------
;;;;;;;;;設置寫使能
; clr cs
; mov a,06h
; call wdata
; set cs
; nop
;------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;設置寫失效
; clr cs
; mov a,04h
; call wdata
; set cs
; nop
;-------------------------------------------------
;;;;;;;;;;;;設置讀狀態寄存器指令
; clr cs
; mov a,05h
; call wdata
; nop
; call rdata ;讀出目前狀態寄存器值
; nop
; set cs
; nop
; mov a,routdata ;將狀態寄存器值放入ACC
;---------------------------------------------------
MAIN:
mov a,00h ;要寫入數據的開始地址值
mov win_address,a
call page_write ;頁寫
mov a,79h ;要寫入數據的地址值
mov win_address,a
mov a,06h ;要寫入的數據
mov win_data,a
; CALL BYTE_WRITE ;字節寫
mov a,001h ;要讀出數據的地址值
mov rout_address,a
call read
MOV A,rout_data ;可以檢驗讀出的值是否和寫入的值一樣
;=======================================================
byte_write: ;;;;;;;;;;;;;;;;;;;字節寫(向存儲器中寫入1個數據)
clr cs
mov a,06h ;設置寫使能
call wdata
set cs
nop
clr cs
mov a,02h ;設置寫指令
call wdata
mov a,00h ;設置寫入的前8位地址數據
call wdata
mov a,win_address ;設置寫入的后8位地址數據
call wdata
mov a,win_data ;要寫入數據的值
call wdata
set cs
WAIT_WRITE ;給寫至少5MS的時間
ret
;=======================================================
page_write: ;;;;;;;;;;;頁寫(最多向存儲器中寫入連續32個數據)
mov a,00h
mov sheetdata,a ;指定載入數據存儲器700H位置的數
pageloop:
clr cs
mov a,06h ;設置寫使能
call wdata
set cs
nop
clr cs
mov a,02h ;設置寫指令
call wdata
mov a,00h ;設置寫入的前8位地址數據
call wdata
mov a,win_address ;指定寫入數據的開始地址位置
call wdata
mov a,32 ;頁寫最多32個數據(25AA640內部規定)
mov data3,a
loop3:
mov a,sheetdata
mov tblp,a ;指定載入數據存儲器7xxH位置的數
tabrdl acc ;讀入ACC(TBLP,A 所指定的數)
call wdata
inc sheetdata
inc win_address ;地址加一,若不考慮寫地址從00開始,可以跟SHEETDATA用一樣的.
;----------------------------
mov a,083h ;判斷寫數據的個數 ‘83h’表示連續寫00h-82h的值) 此值可以隨意,跟下面的有區別
sub a,sheetdata
sz acc
jmp DL32
jmp extout
DL32:
sdz data3
jmp loop3
out:
set cs
wait_write
jmp pageloop
extout:
set cs
wait_write
ret
;----------------------------
; sdz data3
; jmp loop3
; set cs
; WAIT_WRITE ;給寫至少5MS的時間
; mov a,080h ;判斷寫數據的個數 ‘80h’表示連續寫00H-7F的值,此值可以為 20H,40H,60H 80H A0H C0H E0H
; sub a,sheetdata
; sz acc
; jmp pageloop
; ret
;==============================================
read: ;;;;;;;;;;;;;;;;;;;讀出存儲器中的值
clr rout_data ;清除
clr cs
mov a,03h ;讀指令
call wdata
mov a,00h ;寫入讀出數據的前8位地址
call wdata
mov a,rout_address ;寫入讀出數據的后8位地址
call wdata
call rdata ;讀出上面地址中的數據
set cs
ret
;==============================================
;delay: ;低指令
; set count1
; set count2
;dloop:
; sdz count1
; jmp dloop
; sdz count2
; jmp dloop
; ret
;====================================================
wdata: ;;;;;;;;;;;;;;;;;;;;;;;;;寫寄存器
mov data1,a
mov a,8
mov data2,a
wloop:
clr clk
clr si
sz data1.7
set si
nop
set clk
rl data1
sdz data2
jmp wloop
ret
;====================================================
rdata: ;;;;;;;;;;;;;;;;;;;;;;;;;讀寄存器
mov a,8
mov data2,a
SET SO_C ; SET PAC.2 設SO口為輸入
rloop:
clr clk
rl rout_data
clr rout_data.0
sz so
set rout_data.0
set clk
nop
sdz data2
jmp rloop
nop
ret
;====================================================
org 700h
; 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
dc 006h,0ffh,0ffh,000h,040h,000h,001h,000h,000h,040h,00fh,02ch,044h,010h,028h,006h ;0x00h------0x0fh
dc 01ch,034h,04ch,018h,030h,048h,014h,02ch,044h,010h,028h,040h,00ch,024h,03ch,008h ;0x10h------0x1fh
dc 020h,038h,04eh,01eh,036h,04eh,01ah,032h,04ah,016h,02eh,046h,012h,02ah,042h,00eh ;0x20h------0x2fh
dc 026h,03eh,00ah,022h,03ah,001h,013h,005h,000h,048h,000h,038h,098h,038h,0a2h,034h ;0x30h------0x3fh
dc 085h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,003h,030h,000h,000h ;0x40h------0x4fh
dc 000h,000h,000h,002h,001h,002h,040h,021h,000h,003h,000h,000h,000h,099h,000h,000h ;0x50h------0x5fh
dc 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h ;0x60h------0x6fh
dc 000h,000h,000h,082h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h ;0x70h------0x7fh
dc 000h,000h,000h ;0x80h------0x8fh
;=====================================================
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -