打印

x5045程序修改

[复制链接]
1892|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
夏之剑客|  楼主 | 2007-4-7 21:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
X5045, ov, TE, RS, se
   哪位大虾能够告诉我这个程序为什么读入的时候是D,但是读出来却是@ ,感谢阿!!!!      


  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串行时钟信号
      xadd equ 0d0h       ;x5045写入的地址

      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,#0fh      ;开显示幕
      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 DPTR, #xadd  ; 设置字节写地址
              lcall startx
          lcall wren
          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, output         ; 数据
              lcall byte_out        ; 送出数据
          inc xadd
              lcall endx
              lcall check_wip       ; 查写周期是否完成(等待写完)
              ret
;---------------单字节读-----------------------------------
;作用:这段程序送出命令,读EEPROM存储器中的一个字节数据
byte_read:    mov b,#82h
              lcall enable
              mov DPTR, #xadd  ; 设置读取数据的地址
              lcall startx
          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          ; 读取数据
          inc xadd
              lcall endx
              ret
;---------------启动x5045--------------------------------
startx:clr cs       ;让cs在整个工作周期为低,有效
       nop
       clr sclk
       nop
       ret
;-------------写使能所存(使能写操作)---------------------
wren:  lcall startx
       mov a,#06h        ;对应设置写使能锁存器
       lcall byte_out
       lcall endx
;-----------读状态寄存器-----------------------------------
rdrs: lcall startx
      mov a,#05h      ;对应设置读状态寄存器
      lcall byte_out
      lcall byte_in
      lcall endx
;-----------用wip位判是否完成内部操作----------------------
check_wip:;lcall rdrs  ;通过读状态寄存器来说明内部写周期结束否
          jb acc.0,check_wip    ;因为wip是状态寄存器的第0位
          ret
;------------写字节到EEPROM------------------------------
byte_out: mov r5,#8      ;写入一个字节(8位)数据
   bout1: clr sclk
          rlc a          ;带进位的左移,进位给c
      mov si,c
      setb sclk
      cjne r5,#8,bout1
      ret
;-----------从EEPROM中读字节------------------------------
byte_in:  mov r5,#8
   bin1:  setb sclk
          mov c,so
      rlc a
      clr sclk
      cjne r5,#8,bin1
      ret
;------------关闭x5045------------------------------------
endx: clr sclk
      nop
      setb cs
      nop 
      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,#82h
      lcall enable
      mov a,#44h
      lcall display
      lcall byte_write
      ajmp main
enter:lcall byte_read
      lcall display
      ajmp main
;----------------延时程序---------------------------------
delay:mov r7,#124          ;5ms延时
loop2:mov r6,#20
loop3:djnz r6,loop3
      djnz r7,loop2
      ret
      end
沙发
piao520| | 2009-4-11 11:52 | 只看该作者

学习中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

11

帖子

0

粉丝