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