📄 test1220e.asm
字号:
;this is dac1220e program
; 基准:2.487v f=2.0mhz f2=2.45mhz
;
;2006.3.10 调试通过 问题:起始控制电压不线性(<20mv)
;**************************************************************************************************************
sclk equ p1.0
sdio equ p1.1
jk1 equ p1.2
org 0000h
ljmp start
org 0030h
start: mov sp,#0e0h
clr sclk ;+++++
MOV R2,#0fbH ;清05H-ffH
MOV R0,#05H
CLR A
BEGIN1: MOV @R0,A
INC R0
DJNZ R2,BEGIN1
LCALL DEL300MS ;开机延时
LCALL INIT1220E ;D/A初始化及自校准
LCALL DEL25MS
;键扫描---设定十进制数据
main: MOV 33H,#00h ;0f423fh
MOV 34H,#00H
MOV 35H,#00H
; MOV R0,#30H
; MOV R1,#33H
; LCALL BCDBIN ;三字节6位BCD(@R0) 码, 变换成3字节 BIN(@R1)
main1: MOV R0,#33H
LCALL WRIT_INR ;写33-35H 数模变换输出
mov r2,#20
lppp: lcall DEL300MS
djnz r2,lppp
clr c
mov a,35h
addc a,#0ffh
mov 35h,a
mov a,34h
addc a,#0ffh
mov 34h,a
mov a,33h
addc a,#10h
mov 33h,a
JNC main1
mov r2,#200
lpp: lcall DEL25MS
djnz r2,lpp
ajmp main
; LCALL SCLKRESET ;1220软件复位
MOV 33H,#07h ;0f423fh
MOV 34H,#00H
MOV 35H,#00H
; MOV R0,#30H
; MOV R1,#33H
; LCALL BCDBIN ;三字节6位BCD(@R0) 码, 变换成3字节 BIN(@R1)
MOV R0,#33H
LCALL WRIT_INR ;写33-35H 数模变换输出
mov r2,#80
lppp2: lcall DEL25MS
djnz r2,lppp2
SJMP MAIN
;***************************************************************************
INIT1220E: LCALL SCLKRESET ;1220软件复位
LCALL DEL25MS
LCALL WRIT_CMDR
LCALL DEL25MS
LCALL READ_CMDR ;读命令寄存器 (复位=2800H)
LCALL DEL25MS
LCALL READ_INR ; (复位=000000H)
LCALL DEL25MS
LCALL READ_OCR ; (复位=000000H)
LCALL READ_FCR ;读量程寄存器 (复位=800000H)
MOV R0,#33H ;输出
LCALL WRIT_INR
; LCALL SETSELF ;自校准
RET
;***************************************************************************
WRIT_CMDR: mov A,#24h ;写(命令寄存器)命令, ;设置工作模式
LCALL WRIT_8BIT
LCALL DEL7US
MOV A,#22H ;#62H ;写命令寄存器 H 字节 0110 0010
;写; 校准期间连接OUT;清除校准积存器
LCALL WRIT_8BIT
MOV A,#0E0H ;#0e0H ;写命令寄存器 L 字节 1110 0000
;20位;清除校准积存器;默认数据输出格式;
;默认滤波器; 地址增量
LCALL WRIT_8BIT
RET
READ_CMDR: mov A,#0a4h ;读(命令寄存器2字节)命令,判断工作状态
LCALL WRIT_8BIT
LCALL DEL7US
LCALL READ_8BIT
mov 70h,a
LCALL READ_8BIT
mov 71h,a
; ANL A,#03H ;
; JNZ INIT1220E ;非正常工作模式转
RET
READ_INR: mov A,#0C0h ;读输入寄存器3字节)命令
LCALL WRIT_8BIT
LCALL DEL7US
LCALL READ_8BIT
mov 72h,a
LCALL READ_8BIT
mov 73h,a
LCALL READ_8BIT
mov 74h,a
RET
READ_OCR: LCALL DEL7US
LCALL DEL7US
mov A,#0C8h ;读补偿寄存器
LCALL WRIT_8BIT
LCALL DEL7US
LCALL READ_8BIT
mov 75h,a
LCALL READ_8BIT
mov 76h,a
LCALL READ_8BIT
mov 77h,a
RET
READ_FCR: LCALL DEL7US
LCALL DEL7US
mov A,#0CCh ;读补偿寄存器
LCALL WRIT_8BIT
LCALL DEL7US
LCALL READ_8BIT
mov 78h,a
LCALL READ_8BIT
mov 79h,a
LCALL READ_8BIT
mov 7Ah,a
RET
DEL7US: mov r7,#03
djnz r7,$
RET
;***************************************************************************
SCLKRESET: ;软件复位 f= 2.0 Mhz
push 07h
setb sclk ;t1= 256-400us
mov r7,#63h ;3.3x100=330
lprest1: nop
djnz r7,lprest1
clr sclk ;t2> 5us
mov r7,#05h
lprest2: djnz r7,lprest2
setb sclk ;t3= 512--900us
mov r7,#0d5h
lprest3: nop
djnz r7,lprest3
clr sclk ;t2
mov r7,#05h
lprest4: djnz r7,lprest4
setb sclk ;t4=1024-1200 us
mov r7,#0ffh
lprest5: nop
nop
djnz r7,lprest5
clr sclk
pop 07h
ret
;***************************************************************************
WRIT_8BIT: MOV R7,#08H
LPWR1: SETB SCLK
RLC A
NOP
NOP
NOP
MOV SDIO,C
CLR SCLK
NOP
NOP
NOP
nop
DJNZ R7,LPWR1
RET
READ_8BIT: MOV R7,#08H
SETB P1.1 ;++++++
LPRD1: SETB SCLK
NOP
NOP
NOP
NOP
CLR SCLK
MOV C,SDIO
RLC A
nop
NOP
NOP
NOP
DJNZ R7,LPRD1
RET
;***************************************************************************
SETSELF: ;自校准
mov A,#24h ;写命令寄存器命令-
LCALL WRIT_8BIT
lcall del7us
mov A,#22h ;自校准--h
LCALL WRIT_8BIT
mov A,#0e1h ;自校准--l
LCALL WRIT_8BIT
LCALL DEL300MS
LPSELF1: LCALL DEL25MS
mov A,#85h ;读命令寄存器命令- L字节
LCALL WRIT_8BIT
lcall del7us
LCALL READ_8BIT
ANL A,#03H
JNZ LPSELF1 ;未进入正常工作模式转
RET
;*****************************;数模变换**********************************************
WRIT_INR: MOV R2,#03
WLPP0: MOV A,#40H ;写输入寄存器0命令 ;0100 0000 b
lcall WRIT_8BIT ;写1字节 A,R7
NOP
NOP
LCALL DEL7US
LOOPW1: MOV A,@R0
LCALL WRIT_8BIT
INC R0
DJNZ R2,LOOPW1
RET
;**********************;三字节6位BCD(@R0) 码, 变换成3字节 BIN(@R1)*****************************************************
bcdbin: MOV @R1,#00 ;BIN ADRASS
inc R1
MOV @R1,#00
inc R1
MOV @R1,#00
BCDBINS: MOV A,@R0 ;BCD 十万
ANL A,#0F0H
JZ BCDBH
MOV A,@R0
CLR C
SUBB A,#10H
MOV @R0,A
MOV A,@R1 ;L +100000 =186A0H
ADD A,#0A0H
MOV @R1,A
DEC R1 ;M
MOV A,@R1
ADDC A,#86H
MOV @R1,A
DEC R1 ;H
MOV A,@R1
ADDC A,#01
MOV @R1,A
INC R1
inc R1
SJMP BCDBINS
BCDBH: MOV A,@R0 ;BCD 万
ANL A,#0FH
JZ BCDBINS2
CLR C
SUBB A,#01H
MOV @R0,A
MOV A,@R1 ;L +10000
ADD A,#10H
MOV @R1,A
DEC R1 ;M
MOV A,@R1
ADDC A,#27H
MOV @R1,A
JNC BCDNEXT1
DEC R1 ;H
MOV A,@R1
ADDC A,#0
MOV @R1,A
INC R1
BCDNEXT1: inc R1 ;L
SJMP BCDBINS
BCDBINS2: INC R0 ;BCD 千
BCDBIN0:MOV A,@R0
SWAP A
ANL A,#0FH
JZ BCDBIN1
MOV A,@R0
CLR C
SUBB A,#10H
MOV @R0,A
MOV A,@R1 ;L+1000
ADD A,#0E8H
MOV @R1,A
dec R1
MOV A,@R1
ADDC A,#03
MOV @R1,A
inc R1
SJMP BCDBIN0
BCDBIN1: mOV A,@R0 ;BCD 百
JZ BCDBINb
CLR C
SUBB A,#01
MOV @R0,A
MOV A,@R1 ;
ADD A,#64H
MOV @R1,A
dec R1
MOV A,@R1
ADDC A,#00
MOV @R1,A
inc R1
SJMP BCDBIN1
bcdbinb: inc R0 ;BCD 十
BCDBIN2:MOV A,@R0
SWAP A
ANL A,#0FH
JZ BCDBIN3
MOV A,@R0
CLR C
SUBB A,#10H
MOV @R0,A
MOV A,@R1
ADD A,#0AH
MOV @R1,A
dec R1
MOV A,@R1
ADDC A,#00
MOV @R1,A
inc R1
SJMP BCDBIN2
BCDBIN3:MOV A,@R1 ;BCD 个
ADD A,@R0
MOV @R1,A
dec R1
MOV A,@R1
ADDC A,#00
MOV @R1,A
RET
;*******************************************************
DEL25MS: ;开机延时
mov r6,#23
lpdel1: mov r7,#0ffh
lpdel0: nop
nop
djnz r7,lpdel0
djnz r6,lpdel1
RET
del300ms: mov r5,#10
lpdel3: lcall del25ms
djnz r5,lpdel3
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -