⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 25aa640.asm

📁 用汇编写的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 + -