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

📄 test1220e.asm

📁 dac1220e的应用程序 this is dac1220e program 基准:2.487v f=2.0mhz f2=2.45mhz 2006.3.10 调试通过 问题:起始控制电压
💻 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 + -