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

📄 check.asm

📁 x5045相关程序
💻 ASM
字号:
      RS BIT P3.3          ;寄存器选择,1表示数据寄存器,0表示指令寄存器
      RW BIT P3.5          ;读写信号线,高电平为读,低电平为写,
                           ;RS RW同时为低表示写指令,RS低RW高则是读忙信号,反之写入数据
      E  BIT P3.4          ;液晶显示使能,高到低时执行命令
      key_bit bit 01h      ;键盘标志位
      keyboard bit P2.6
      lcd_bg bit P1.2      ;背光     
      output equ p0   
      cs bit p2.7          ;x5045电路选择端
      so bit p3.5          ;x5045串行数据输入端
      si bit p3.7          ;x5045串行数据输出端
      sclk bit p3.6        ;x5045串行时钟信号
      mrd equ  2ch         ;读数据存于MRD开始的缓冲区
      numbyt   equ 2fh     ;传送字节数存放单元
  
      org 0000h
      ajmp init
      org 0003h
      ajmp ankey
init: mov sp,#0f0h
      clr lcd_bg
      mov b,#01h      ;清屏
      lcall enable    ;每次操作都要保存
      mov b,#38h      ;功能选择
      lcall enable 
      mov b,#0eh      ;开显示幕
      lcall enable
      mov b,#06h      ;表示光标向右移,屏幕上文字不移动
      lcall enable 
      setb ea              ;中断开放
      setb ex0             ;允许INT0
welcome: mov b,#80h            ;设定第一行起始地址
         lcall enable
         mov a,#41h
	 lcall display
	 mov b,#0c0h
	 lcall enable
	 mov a,#42h
	 lcall display
main: jnb key_bit,next
      clr key_bit
      ajmp key
next: nop
      ajmp main
;-----------------写入程序寄存器--------------------------
enable:clr rs         ;写指令到寄存器
      clr rw
      clr e          ;先禁止,在第二次进入的时候就有效了
      lcall delay
      mov output,b
      setb e
      clr e
      ret
;----------------显示-------------------------------------
display: clr rw 
         setb rs 
	 mov output,a
	 setb e
	 lcall delay
	 clr e
	 ret
;****************x5045************************************
;----------------单字节写---------------------------------
;作用:这段程序送出命令,读EEPROM存储器中的一个字节数据
byte_write:mov r0,#0e0h    ;地址单元的高8位
           mov a,@r0
           mov dph,a
           inc r0
           mov a,@r0
           mov dpl,a
           mov r1,#numbyt       ;从传送字节数存元中获取待写字节数   
           mov r0,#mrd         ;待写数据缓冲区
w_l:lcall wren           ;写允许
    clr sclk             ;将SCK拉低
    clr cs               ;将/CS拉低
    mov a,#02h
    mov b,dph
    mov c,b.0
    mov acc.3,c
    lcall  byte_out         ;送出含有地址最高位的写指令
    mov a,dpl
    lcall  byte_out         ;送出地址的低8位
    mov a,@r0
    lcall  byte_out         ;送出数据
    clr    sclk             ;将SCK拉低
    setb   cs               ;升高/CS
    lcall   check_wip       ;测试是否已器件内部是否写完
    inc dpl 
    inc r0
    
    djnz r1,w_l
    ret
;---------------单字节读-----------------------------------
;作用:这段程序送出命令,读EEPROM存储器中的一个字节数据
byte_read: mov r0,#0e0h    ;地址单元的高8位
           mov a,@r0
           mov dph,a
           inc r0
           mov a,@r0
           mov dpl,a
           mov r1,#numbyt       ;从传送字节数存元中获取待写字节数  
           mov r0,#mrd         ;待读数据缓冲区
R_L:clr sclk               ; 将SCK拉低
    clr cs                 ; 将/CS拉低
    MOV  a,#03h
    mov  b,dph
    mov  c,b.0
    mov  acc.3,c
    lcall   byte_out       ; 送出含有地址最高位的读指令
    mov a,dpl 
    lcall  byte_out        ;送出低8位地址
    lcall  byte_in         ; 读数据
    clr    sclk            ; 将SCK拉低
    setb   cs              ;升高/CS
    ret
;-------------写使能所存(使能写操作)---------------------
wren:  clr sclk
       clr cs
       mov a,#06h        ;对应设置写使能锁存器
       lcall byte_out
       clr sclk               ;关闭x5045
       setb cs
       ret
;-----------读状态寄存器-----------------------------------
rdsr: clr sclk
      clr cs
      mov a,#05h      ;对应设置读状态寄存器
      lcall byte_out
      lcall byte_in
      clr sclk               ;关闭x5045
      setb cs
      ret
;-----------用wip位判是否完成内部操作----------------------
check_wip:mov r4,#99h           ;设置最大查询数目
check_wi1:lcall rdsr            ;通过读状态寄存器来说明内部写周期结束否
          jnb acc.0,check_wi2    ;因为wip是状态寄存器的第0位
	  djnz r4,check_wi1
check_wi2:ret
;------------写字节到EEPROM------------------------------
byte_out: mov r5,#8      ;写入一个字节(8位)数据
   bout1: clr sclk
          rlc a          ;带进位的左移,进位给c
	  mov si,c
	  setb sclk
	  djnz r5,bout1
	  clr si
	  ret
;-----------从EEPROM中读字节------------------------------
byte_in:  mov r5,#8
   bin1:  setb sclk
   	  clr sclk
          mov c,so
	  rlc a
	  djnz r5,bin1
	  ret
;**********************************************************
;----------------键盘中断---------------------------------
ankey:push acc
      push psw
      setb key_bit
      pop psw
      pop acc
      reti
;----------------按键判断---------------------------------
key:  mov output,#0ffh
      clr keyboard
      mov a,output
      setb keyboard
      jnb acc.4,menu
      jnb acc.5,enter
      ljmp main
;--------------按键处理----------------------------------
menu: mov b,#0eh
      lcall enable
      mov b,#82h
      lcall enable
      mov a,#45h
      mov mrd,a
      lcall display
      mov numbyt,#1       ;写入1个字节
      lcall byte_write      ;将数据写入EEPROM
      ajmp main
enter:mov b,#0eh
      lcall enable
      mov b,#84h
      lcall enable
      mov numbyt,#1       ;读出1个字节
      lcall byte_read       ;读数据存于MRD开始的缓冲区
      lcall display
      ajmp main
;----------------延时程序---------------------------------
delay:mov r7,#124          ;5ms延时
loop2:mov r6,#20
loop3:djnz r6,loop3
      djnz r7,loop2
      ret
      end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -