?? 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 + -