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

📄 08ab32.asm

📁 本程序实现了对MOTOROLA08AB32单片机EEPROM的访问
💻 ASM
📖 第 1 页 / 共 3 页
字号:

;*********************08az,as20**************************************
;*   08as32,08az32 EEPROM ADDRESS  0X0800-0x09ff                    *
;*   EECR  ADDRESS $FE1D                                            *
;*   READ  EEPROM  0X88                                             *
;*   WRITE EEPROM  0X99                                             *
;*   ERASE EEPROM  0X77                                             *
;*   wrong order  0x77                                              *
;********************************************************************
          CTRLDIR EQU  P3.3
          CTRL    EQU  P3.4
          Qrxd    EQU  P1.2 ;transmit and receive with pc
          Qtxd    EQU  P1.3
          RST     EQU  P1.7  ;reset mcu
          RXD     EQU  P1.5 ;receive from mcu
          TXD     EQU  P3.5 ;transmit to mcu
          BPBACK  EQU  P1.4 ;
          IRQBACK EQU  P3.2 ;read the pin test value-IRQ
          HIGHBACK EQU P1.0 ;read the pin test value-HIGH
          LOWBACK EQU  P1.1 ;read the pin test value-LOW

          VCC12BACK EQU P1.6   ;relaycs = P1 ^ 6;	此脚复用
          RELAYDIN EQU P1.0     ;
          RELAYSCK EQU P1.1;

          ADDH    EQU  30H  ;beginning address high  r1
          ADDL    EQU  31H  ;beginning address low    r2
          Lenh    EQU  32H  ;length high              r6
          Lenl    equ  33h  ;length low               r4
          order   equ  34h  ;select order
          DATAS   EQU  35H  ;RECEIVE DATA FROM MCU   r5
          BAUD    EQU  36H  ;TO SET THE BAUD RATE
          auto    equ  37h   ;收回的自动配置波特率的数据
          del     equ  3ch
          del1    equ  3dh

          sebit   equ  38h;  security bit
          pins    equ  39h ;test 0f pins
          dlct    equ  40h ;程序工作之前的延时计数
          P4      EQU  0A5H
        CN DATA 3cH
        JCONFIG_H data 4fh
        JCONFIG_L data 4eh
          ORG    8000H
          SJMP START
          ORG  8013H
START:      SETB   RXD
BEGIN:     MOV  SP,#50H

           mov     a,#55h
           lcall   output
fuwei:
           SETB   CTRL             ;适配器断电
           lcall  delayms
           SETB    CTRLDIR
           lcall  delayms
           ORL P4,#04H

          lcall input      ;receive order from pc
          mov  order,a
          lcall input
          mov  addh,a
          lcall  input
          mov   addl,a
          lcall  input
          mov    lenh,a
          lcall  input
          mov    lenl,a

          ;lcall J_COFIG

          ORL P4,#08H           ;重新操作置灭红灯

          mov    a,order
          xrl  a,#88h
          jz   readeep  ;read eeprom
          mov  a,order
          xrl  a,#99h
          jnz  era
          ljmp  wrteep  ;write eeprom
era:       mov  a,order
          xrl   a,#077h
          jnz   fanhui
          ljmp  erase
fanhui:   mov  a,order
          xrl   a,#11h
          jnz    wrong
          mov   ie,#00h
          ljmp   0000h
wrong:    mov  a,#77h  ;receive wrong order
          lcall output
          ljmp  fuwei


;beginning of read eeprom*****************************************************************************
readeep:
           lcall pintest
           CLR   CTRLDIR
           lcall  delayms
           CLR    CTRL          ;适配器供电

           lcall  delayms
           lcall  delayms
           lcall  delayms

          ANL P4,#0FBH          ;中间的BUSY亮


           mov dlct,#0ffh
redelay:   lcall delay15ms
           djnz dlct,redelay
;*******************READ用专用串口配置波特率****************************
autobaud:  ORL P4,#04H ;中间的BUSY灭
           lcall delayms

            CLR   RST
            LCALL  DELAY15MS
            SETB  RST
            lcall  delay6ms
            lcall  delayms
            ANL P4,#0FBH          ;中间的BUSY亮


           MOV    R0,#03H
TDb1:      MOV    A,R0            ;从表中取数据入累加器
           MOVC   a,@A+PC
           JMP    TDB2
           DB    0eah, 0e7h, 0d5h, 0cdh
TDB2:
           mov   baud,a
           mov   a,#55h
           LCALL  txdbaud
           lcall  rxdbaud
           mov    auto,a

           ;lcall  output

           MOV    A,AUTO
           xrl    a,#55h
           jz     autotr

           clr    rst
           lcall   delay15ms
           setb   rst
           lcall  delay6ms

           inc    r0
           cjne   r0,#07h,tdb1

           mov    a,#0AAh      ;波特率没配对
           lcall  output
           mov    a,#0cch      ;波特率没配对
           lcall  output

           ANL P4,#0F7H         ;中间的BUSY亮

          ANL  P4,#0FDH
          lcall delay200ms
          ORL  P4,#02h       ;蜂鸣器
          lcall delay200ms
          ANL  P4,#0FDH
          lcall delay200ms
          ORL  P4,#02h       ;蜂鸣器
          lcall delay200ms
          ANL  P4,#0FDH
          lcall delay200ms
          ORL  P4,#02h       ;蜂鸣器

           SETB   CTRL             ;适配器断电
           lcall  delayms
           SETB    CTRLDIR
           lcall  delayms


loopa:    LJMP   FUWEI

autotr:    ljmp   autotrxd         ; 用专用串口配置的波特率子程序




;*********************READ用专用串口配置的波特率子程序*********************

autotrxd:   mov  a,#55h            ;波特率配置正确
            lcall  output

            clr   rst
            lcall  delay15ms
            setb  rst
            lcall  delay6ms

           mov   r0,#08h               ;8 个00 安全位
txd00:
            mov a,#00h
           lcall  txdbaud
           lcall  rxdbaud
           lcall  delay15ms
           djnz   r0,txd00



           lcall  delayms
           lcall   delayms
           lcall  delayms
           lcall  delayms
           lcall   delayms
           lcall  delayms
           lcall  delayms
           lcall  delayms
           mov    a,#0bbh
           lcall  output;  芯片测试通过

            mov    r1,addh
            mov    r2,addl
            mov    r6,lenh
            mov    r4,lenl
            MOV DPTR,#0000H

            mov    a,r4
            jz     ronlyr31
REDATA1:    lcall  delay2ms
            mov    a,#4ah
            lcall   txdbaud
            lcall   rxdbaud
            lcall   delay35us
            lcall   delay35us
            lcall   delay35us
            lcall   delay35us

            MOV    A,r1     ;TRANSMIT ADDRESS TO MCU
            LCALL  txdbaud
            lcall  rxdbaud
            lcall  delay35us
            lcall  delay35us
            lcall  delay35us
            lcall  delay35us

            MOV    A,r2
            LCALL  txdbaud
            lcall  rxdbaud
            lcall  delay35us



            LCALL  rxdbaud    ;RECEIVE DATA FROM MCU
            mov    datas,a

            mov    a,datas
            MOVx   @dptr,a
            INC    dptr
            INC    r2
            CJNE   r2,#00H,JINWEI2  ;判断低地址是否加到进位
            INC    r1

JINWEI2:   DJNZ   R4,REDATA1

ronlyr31:   mov    a,r6
            jz     reend1
            DEC    R6
            MOV    A,R6
            XRL    A,#0FFH
            JZ    REEND1
            LJMP  REDATA1
            NOP
reend1:      nop

;transmit the datas from mcu to pc

           MOV   DPTR,#0000H        ; transmit the datas from mcu to pc
           mov   r6,lenh
           mov   r4,lenl
           mov   a,r4
           jz    tonlyr31
TDATA1:
           MOVx   A,@dptr
           LCALL  OUTPUT
           INC    dptr
           DJNZ   R4,TDATA1

tonlyr31:   mov    a,r6
           jz     tend1
           DEC    R6
           MOV    A,R6
           XRL    A,#0FFH
           JZ     TEND1
           LJMP   TDATA1

            NOP

tend1:     mov  dptr,#0ff04h   ;中间灯灭
           mov   a,#01h
           movx  @dptr,a
           mov  dptr,#0ff05h     ;control=0,断电
           mov   a,#00h
           movx  @dptr,a
            ljmp fuwei

LOOP:      ORL   P4,#04H   ;中间灯灭

           ANL  P4,#0FDH
           lcall delay200ms
           ORL  P4,#02h       ;蜂鸣器

           SETB   CTRL             ;适配器断电
           lcall  delayms
           SETB    CTRLDIR
           lcall  delayms
            ljmp  fuwei  ;the end of read 08az32 and 08as32



pintest:
          ANL P4,#0FBH

          MOV C,BPBACK
          RLC A
          MOV C,IRQBACK
          RLC A
          RLC A
          RLC A
          MOV C,HIGHBACK
          RLC A
          MOV C,LOWBACK
          RLC A
          MOV C,RST
          RLC A
          MOV pins,A
          ORL A,#98H
          CPL A
          JZ  pinpass

          MOV A,#0AAH
          LCALL OUTPUT
          MOV A,pins
          lcall output

          ANL P4,#0f7H                ;点亮红灯
          ORL P4,#04H                 ;置灭绿灯
          ANL  P4,#0FDH
          lcall delay200ms
       ;   lcall delay200ms
          ORL  P4,#02h
          lcall delay200ms
          ;lcall delay200ms
          ANL  P4,#0FDH
          lcall delay200ms
          ;lcall delay200ms
          ORL  P4,#02h
          lcall delay200ms
          ;lcall delay200ms
          ANL  P4,#0FDH
          lcall delay200ms
          ;lcall delay200ms
          ORL  P4,#02h
          lcall delay200ms
          ;lcall delay200ms              ;蜂鸣器 响3次

          ljmp fuwei
pinpass:
          MOV A,#55H
          LCALL OUTPUT
          MOV A,#0FFH
          LCALL OUTPUT
          RET

;**************************************DELAY  INPUT OUTPUT TXD RXD I/0TXD RXD**************************************************

;all delays********************************************************************************
DELAY90US:  MOV  R3,#03H ;3个30.1us
D90us1:     MOV  R7,#63H
D90us2:     DJNZ R7,D90us2  ;3个机器周期
             DJNZ R3,D90us1
             RET


DELAY300US:  MOV  R3,#0AH ;10个30.1us
D300us1:     MOV  R7,#63H
D300us2:     DJNZ R7,D300us2  ;3个机器周期
             DJNZ R3,D300us1
             RET

delay1ms:    mov  r3,#64h    ;100个10us delay
d1ms1:       mov  r7,#20h   ;10us delay
d1ms2:       djnz  r7,d1ms2
             djnz  r3,d1ms1
             ret

delay2ms:    mov  r3,#0c8h    ;200个10us delay
d2ms1:       mov  r7,#20h   ;10us delay
d2ms2:       djnz  r7,d2ms2
             djnz  r3,d2ms1
             ret

delay3ms:   mov  r3,#28h    ;40个75us delay
d3ms1:      mov  r7,#0f9h   ;75us delay
d3ms2:      djnz  r7,d3ms2
            djnz  r3,d3ms1
            ret


delay6ms:   mov  r3,#50h    ;80个75us delay
d6ms1:      mov  r7,#0f9h   ;75us delay
d6ms2:      djnz  r7,d6ms2
            djnz  r3,d6ms1
            ret
delay200ms: mov del,#65
d200ms3:    mov  r3,#69h     ;200个25us delay
d200ms1:    mov  r7,#100h   ;75us delay
d200ms2:     djnz  r7,d200ms2
            djnz  r3,d200ms1
            djnz  del,d200ms3
            ret


delay15ms:    mov  r3,#0c8h     ;200个25us delay
d15ms1:       mov  r7,#0f9h   ;75us delay
d15ms2:       djnz  r7,d15ms2
              djnz  r3,d15ms1
              ret

delayms:     mov  r3,#0ffh    ;255个76.5us delay   19.5ms
dns1:        mov  r7,#0ffh    ;76.5us delay
dns2:        djnz  r7,dns2
             djnz  r3,dns1
             ret





 ;*******************from wangqi txd rxd to pc******************
      MOV DPTR,#8000H
shou100:
       MOV R5,#00h
txX:   lCALL input
       MOVx @dptr,a
       INC dptr
       DJNZ R5,TXX
       RET

fa100:
        MOV DPTR,#8000H
        MOV R5,#00H
TX:     SETB qtxd
        ACALL DELAY
        MOVX A,@DPTR
        ACALL OUTPUT
        INC DPTR
        DJNZ R5,TX
        RET
input:  jb Qrxd,$          ;2                          1.5    1.5   1.5;;;;;;;;;;;;;;;;;;;;;16
;100 NOP
        SETB  PSW.2
        MOV   R1,#30
DEL10NS:

        DJNZ  R1,DEL10NS
        NOP
        CLR   PSW.2
        lcall delay             ;2                              1.5     1.5    1.5;;;;;;;;;;;;;;;;16
        mov r3,#8                                               ;1.5     1.5    1.5;;;;;;;;;;;;;;;8
inp:   mov c,Qrxd;1                                 1.5   1.5   1.5;;;;;;;;;;;;;;;;;;;8
       rrc a                ;1                                 3   3   3;;;;;;;;;;;;;;;;;;;;;;;;;4
       lcall delay          ;2                                 1.5   1.5   1.5;;;;;;;;;;;;;;;;;;;16
       djnz r3,inp                                      ;       2   2   2;;;;;;;;;;;;;;;;;;;;;;;;12
       jnb Qrxd,$                                           ;   1.5   1.5   1.5;;;;;;;;;;;;;;;;;;16
       ret                                                 ;     3   3   3;;;;;;;;;;;;;;;;;;;;;;;8

DELAY:
     MOV R7,#50               ;1   ///////  (1+2x+2)0.6us   50us    1.5 1.5;;;;;;;;;;;;;;;;;;;;8
     nop
     nop
MS:  DJNZ R7,MS            ;2                                     2   2   2;;;;;;;;;;;;;;;;;12
     nop
     nop
     RET                      ;2                                     3   3   3;;;;;;;;;;;;;;;;;8
                  ;2                                     3   3   3;;;;;;;;;;;;;;;;;8


OUTPUT:
       CLR C     ;1                                             3   3   3
       MOV Qtxd,C       ;2                                             3   3   3
       LCALL DELAY      ;2                                             1.5   1.5   1.5
       MOV R3,#8        ;1                                             1.5   1.5   1.5
OUT:   RRC A        ;1                                             3   3   3
       MOV Qtxd,C       ;2                                             3   3   3
       LCALL DELAY      ;2                                             1.5  1.5   1.5

       DJNZ R3,OUT      ;2                                             2   2   2
       nop
       SETB C           ;1                                             3   3   3
       MOV Qtxd,C       ;2                                             3   3   3
       LCALl DELAY      ;2                                             1.5   1.5   1.5
       RET              ;2                                            3   3   3

;**********************from wangqi txd rxd to pc end***********************


 ;*************************to motorola mcu p3.0 RXD P3.1 TXD****************

;向mcu发送一个字节BAUD
;TXDBAUD:  MOV    TMOD,#20H     ;定时器设定为方式2
;          MOV    TL1,36h      ;定时器初值
 ;         MOV    TH1,36h      ;8位重装值
  ;        SETB   TR1           ;启动定时器1
   ;       MOV    SCON,#40H     ;串口设为方式1,REN=1  不允许接收
    ;      MOV    PCON,#80H     ;波特率系数选择位是1 即SMOD=1
     ;     MOV    SBUF,A
;WAITBAUD: JBC    TI,CONTBAUD
 ;         AJMP   WAITBAUD

;CONTBAUD:     RET

;从MCU接收一个字节,BAUD
;RXDBAUD:  MOV    TMOD,#20H
 ;         MOV    TL1,36h
  ;        MOV    TH1,36h
   ;       SETB   TR1
    ;      MOV    SCON,#50H     ;串口设为方式1,REN=1,允许接收
     ;     MOV    PCON,#80H
      ;    SETB   REN
;WAITT:    JBC    RI,READ
 ;         AJMP   WAITT
;READ:     MOV    A,SBUF
 ;         RET

RXDBAUD:  jb rxd,$

⌨️ 快捷键说明

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