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

📄 mc68hc08as20.asm

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

;*********************08az,as32**************************************
;*   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
          EECRH   EQU  3AH
          EECRL   EQU  3BH
          dlct    equ  40h ;程序工作之前的延时计数
          P4      EQU  0A5H
        CN DATA 3cH
        JCONFIG_H data 4fh
        JCONFIG_L data 4eh

          ORG    8000H
          SJMP START

          ORG  8030H
START:      SETB   RXD
BEGIN:     MOV  SP,#50H

           lcall delay200ms
           lcall delay200ms
           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


          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亮
           lcall  delayms


           lcall  delayms

           mov dlct,#0ffh
redelay:   lcall delay15ms
           djnz dlct,redelay
;*******************READ用普通IO口模拟串口配置波特率*****************************
            CLR   RST
            LCALL  DELAY15MS
            SETB  RST
            LCALL  DELAY6MS
            lcall  delayms

            CLR   RST
            LCALL  DELAY15MS
            SETB  RST
            LCALL  DELAY6MS
            lcall  delayms

            MOV   A,#55H
            LCALL  TXD28800                                     ;1      35us

            LCALL  RXD28800

            MOV    DATAS,A
            ;lcall  output
            MOV    A,DATAS
            XRL    A,#55H
            JNZ    T144
            LJMP   READ28800
T144:       ORL P4,#04H ;中间的BUSY灭
            lcall delayms
            CLR   RST
            LCALL  DELAY15MS
            SETB  RST
            LCALL  DELAY6MS
            lcall  delayms

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


            MOV   A,#55H
            LCALL  TXD14400                                             ;2       70us       在此程序中改成了122us
            LCALL  RXD14400

            MOV    DATAS,A

            ;lcall  output
            mov    a,datas
            XRL    A,#55H
            JNZ    T88
            LJMP   READ14400
T88:        ORL P4,#04H ;中间的BUSY灭
            lcall  delayms
            CLR   RST
            LCALL  DELAY15MS
            SETB  RST
            lcall  delay6ms
            lcall  delayms
            ANL P4,#0FBH ;中间的BUSY灯亮
            lcall  delayms

            MOV   A,#55H
            LCALL  TXD8861                                              ;3         121us     在此芯片中调到了129us

            LCALL  RXD8861

            MOV    DATAS,A

            ;LCALL  OUTPUT

            MOV    A,DATAS

            XRL    A,#55H
            JNZ    T44
            LJMP   READ8861
T44:        ORL P4,#04H ;中间的BUSY灭
            lcall  delayms
            CLR   RST
            LCALL  DELAY15MS
            SETB  RST
            lcall   delay6ms
            lcall   delayms
            ANL P4,#0FBH ;中间的BUSY灯亮
            lcall  delayms
            MOV   A,#55H
            LCALL  TXD4430

            LCALL  RXD4430
            MOV    DATAS,A

           ; LCALL  OUTPUT

            MOV    A,DATAS

            XRL    A,#55H
            JNZ    AUTOBAUD
            LJMP   READ4430

;*******************READ用专用串口配置波特率****************************
autobaud: ORL P4,#04H         ;中间的BUSY灯灭
           lcall delayms

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

           MOV    R0,#03H
TDb1:      MOV    A,R0            ;从表中取数据入累加器
           MOVC   a,@A+PC
           JMP    TDB2
           ;DB    0e3h, 0e5h, 0cah, 0c6h, 8ch, 18h
           ;DB    0eah, 0f5h, 0d5h, 0efh, 0cdh      ;0e7h

           DB    0eah, 0e7h, 0d5h, 0cdh ,0f5h, 0efh
           DB    0e3h, 0e5h, 0cah, 0c6h, 8ch, 18h
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
           lcall  delayms

           inc    r0
           cjne   r0,#0fh,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用IO口模拟串口的子程序**********************
READ14400:
            mov  a,#55h            ;波特率配置正确
            lcall  output


            clr   rst
            lcall  delay15ms
            setb  rst
            lcall  delay15ms
             ANL P4,#0FBH      ;中间的BUSY灯亮


           mov   r0,#08h
tx00:
            mov a,#00h
           lcall  txd14400
           lcall  rxd14400
           lcall  delay15ms
           djnz   r0,tx00



           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     ronlyr3
REDATA:     lcall  delay1ms
            mov    a,#4ah
            lcall   txd14400
            lcall   rxd14400


            MOV    A,r1     ;TRANSMIT ADDRESS TO MCU
            LCALL  txd14400
            lcall  rxd14400

             MOV    A,r2
            LCALL  txd14400
            lcall  rxd14400

            LCALL  rxd14400    ;RECEIVE DATA FROM MCU
            mov    datas,a

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

JINWEI1:   DJNZ   R4,REDATA

ronlyr3:    mov    a,r6
            jz     reend
            DEC    R6
            MOV    A,R6
            XRL    A,#0FFH
            JZ    REEND
            LJMP  REDATA
            NOP
reend:      nop

;transmit the datas from mcu to pc

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

          ;MOV    R4,#00H
tonlyr3:   mov    a,r6
           jz     tend
           DEC    R6
           MOV    A,R6
           XRL    A,#0FFH
           JZ     TEND
           LJMP   TDATA

            NOP

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

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

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


;***********read 28800baud*****************************
read28800:
             mov  a,#55h            ;波特率配置正确
            lcall  output


            clr   rst
            lcall  delay15ms
            setb  rst
            lcall  delay15ms

           mov   r0,#08h
tx200:
            mov a,#00h
           lcall  txd28800
           lcall  rxd28800
           lcall  delay15ms
           djnz   r0,tx200



           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     ronlyr32
REDATA2:    lcall  delay1ms
            mov    a,#4ah
            lcall   txd28800
            lcall   rxd28800


            MOV    A,r1     ;TRANSMIT ADDRESS TO MCU
            LCALL  txd28800
            lcall  rxd28800

             MOV    A,r2
            LCALL  txd28800
            lcall  rxd28800

            LCALL  rxd28800    ;RECEIVE DATA FROM MCU
            mov    datas,a

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

JINWEI3:   DJNZ   R4,REDATA2

ronlyr32:    mov    a,r6
            jz     reend2
            DEC    R6
            MOV    A,R6
            XRL    A,#0FFH
            JZ    REEND2
            LJMP  REDATA2
            NOP
reend2:      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    tonlyr32
TDATA2:
           MOVx   A,@dptr
           LCALL  OUTPUT
           INC    dptr
           DJNZ   R4,TDATA2

          ;MOV    R4,#00H
tonlyr32:   mov    a,r6
           jz     tend2
           DEC    R6
           MOV    A,R6
           XRL    A,#0FFH
           JZ     TEND2
           LJMP   TDATA2

            NOP

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

           ANL  P4,#0FDH
           lcall delay200ms

⌨️ 快捷键说明

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