📄 08ab32.asm
字号:
;*********************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 + -