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

📄 27-0 ad0809.asm

📁 用Keil3编写的AD0809的转换控制!!非常有用!
💻 ASM
字号:
;//****************************************************************
;//*文件名:AD0809并行模数转换程序

;//*创建人:巫升辉 

;//*2006.2.25 

;功能:把模拟的量通过并行的模数转换成数字信号,并同过调用7279显示被转换
       ;的数字量

;接线:

;//****************************************************************

        ADHEX     DATA  050H
	DBUF      DATA  060H
	BIT_COUNT DATA  070H
        TIMER     DATA  072H
        TIMER1    DATA  073H
        TIMER2    DATA  074H
	DATA_IN   DATA  020H
        DATA_OUT  DATA  021H
        CLK       BIT   P1.6
        DAT       BIT   P1.7

        ORG     0000H
        LJMP    MAIN
        ORG     0100H
MAIN:	
        CLR   A
        setb  p3.3
        MOV   R0,#DBUF
        MOV	DPTR,#0FEF3H   ;A/D
        NOP
        nop
        nop
	MOVX	@DPTR,A
WAIT:   JNB     P3.3,WAIT
	MOVX	A,@DPTR        ; 读入结果
        NOP
        nop
        nop
        MOVX  A,@DPTR          ; 读入结果

        NOP
        nop
        nop
        MOV   R7,A
        MOV   ADHEX,A      
        CALL  MUL500           ; ADHEX*500/256  
        CALL  HB2  
        CALL  TODISP           ; 拆开显示
        NOP
        CALL  DISPLAY 
        CALL  delay
        LJMP  MAIN
DISPLAY:				 
	ANL   P2,#00H                     ; CS7279有效
	MOV   DATA_OUT,#10100100B         ; A4H,复位命令
	CALL  SEND
        MOV   DATA_OUT,#11001000B         ; 译码方式0,0位显示 
	CALL  SEND
	MOV   DATA_OUT,DBUF 
	CALL  SEND			      
        MOV   DATA_OUT,#11001001B         ; 译码方式0,1位显示 
	CALL  SEND
	MOV   DATA_OUT,DBUF+1       
	CALL  SEND
        MOV   DATA_OUT,#11001010B         ; 译码方式0,2位显示  
	CALL  SEND
	MOV   DATA_OUT,DBUF+2 
	CALL  SEND
	MOV   P2,#0FFH                    ; CS7279无效
        RET

SEND:     MOV  BIT_COUNT,#8               ; 发送字符子程序
          ANL  P2,#00H
          CALL LONG_DELAY
SEND_LOOP:MOV  C,DATA_OUT.7
          MOV  DAT,C
          SETB CLK
          MOV  A,DATA_OUT
          RL   A
          MOV  DATA_OUT,A         
          CALL SHORT_DELAY
          CLR  CLK
          CALL SHORT_DELAY
          DJNZ BIT_COUNT,SEND_LOOP
          CLR  DAT
          RET

LONG_DELAY:MOV TIMER,#150              ;延时约200US
DELAY_LOOP:DJNZ TIMER,DELAY_LOOP
           RET
SHORT_DELAY:
           MOV TIMER,#20               ;延时约20US
SHORT_LP:  DJNZ TIMER,SHORT_LP
           RET
 
DELAY:MOV   TIMER,#4
AA0:  MOV   TIMER1,#0
AA1:  MOV   TIMER2,#0
AA2:  DJNZ  TIMER2,AA2
      DJNZ  TIMER1,AA1
      DJNZ  TIMER,AA0
      RET



;功能:单字节二进制无符号数乘500(1f4H=100H+0f4H)
;入口条件:被乘数在R7中。
;出口信息:乘积在R4、R5、R6中(R6低八位)。
MUL500:
    	MOV   A,#0f4H	;计算R3乘R7
	MOV   B,R7
  	MUL   AB
  	MOV   R5,B	;暂存部分积
  	MOV   R6,A
        MOV   A,R7
	ADD   A,B
	MOV   R5,A
	CLR   A
	RLC   A
	MOV   R4,A
	CLR   C
        MOV   A,R6
	SUBB  A,#80H
	JC    RETURN  
	CLR   C
        MOV   A,R5
	ADD   A,#1
	MOV   R5,A 		  
        MOV   A,R4
	ADDC  A,#0
	MOV   R4,A   

RETURN:	RET

; 功能:双字节十六进制整数转换成双字节BCD码整数

; 入口条件:待转换的双字节十六进制整数在R6、R7中。
; 出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
HB2:
        MOV     A,R4
        MOV     R6,A
        MOV     A,R5
        MOV     R7,A

        CLR     A	   ;BCD码初始化
    	MOV	R3,A
    	MOV  	R4,A
    	MOV  	R5,A
    	MOV	R2,#10H	   ;转换双字节十六进制整数
HB3:	MOV	A,R7       ;从高端移出待转换数的一位到CY中
    	RLC  	A
    	MOV	R7,A
    	MOV  	A,R6
    	RLC  	A
    	MOV	R6,A
    	MOV	A,R5       ;bcd码带进位自身相加,相当于乘2
    	ADDC	A,R5
    	DA	A          ;十进制调整
    	MOV	R5,A
    	MOV	A,R4
    	ADDC    A,R4
    	DA  	A
    	MOV	R4,A
    	MOV 	A,R3
    	ADDC	A,R3
    	MOV 	R3,A	;双字节十六进制数的万位数不超过6,不用调整
    	DJNZ    R2,HB3  ;处理完16bit
	RET 	

TODISP:
    	MOV    A,R4
	ORL    A,#80H
        MOV    DBUF+2,A   
        MOV    A,R5
	SWAP   A
	ANL    A,#0FH
        MOV    DBUF+1,A
    	MOV    A,R5
	ANL    A,#0FH
        MOV   DBUF,A
	RET

        END





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -