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

📄 adc0832_success_5v.asm

📁 已调试成功的ADC0832程序,内有用PROTEUS画的仿真电路图,可将从外界采集到的0~5V电压在数码管上显示
💻 ASM
字号:
   ORG 00H
SJMP 0030H
ORG 0003H
SJMP RET_LOOP
ORG 0030H
;....................初始化外部中断0
SETB EA
SETB EX0
SETB PX0
SETB IT0
ADOUT_M DATA 31H
MOV P1,#0FFH

;..................复位后显示学号4420
LOOP:
	SETB P2.3
        MOV P0,#0C0H
        CLR P2.0
        CALL DELAY2
        
	SETB P2.0
        MOV P0,#0A4H
        CLR P2.1
        CALL DELAY2

	SETB P2.1
        MOV P0,#99H
        CLR P2.2
        CALL DELAY2

	SETB P2.2
        MOV P0,#99H
        CLR P2.3
        CALL DELAY2
        SJMP LOOP

;....................外部中断0子程序,将模拟电压转成数字电压,输出至AOUT_M(31H)
RET_LOOP:
;植入说明: 占用A、B、CY、R7
/*-------------------------------------------*/
ADC_CS BIT P3.3 ;使能接口
ADC_CLK BIT P3.4 ;时钟接口
ADC_DO BIT P3.5 ;数据输出接口(复用)
ADC_DI BIT P3.5 ;数据输入接口
;以下语句在调用转换程序前设定
;以下为ADC0832读取数据子程序
;==== ADC0832读数据子程序====
ADCONV:
MOV P1,#00H
SETB ADC_CS
nop
CLR ADC_CLK
nop
CLR ADC_CS
nop
SETB ADC_DI
nop
SETB ADC_CLK
nop
CLR ADC_DI
CLR ADC_CLK
nop
  
  MOV A,#10
  MOV C,ACC.1
  MOV ADC_DI,C     ;          //输/出控制位1
  SETB ADC_CLK
  nop
  CLR ADC_DI
  CLR ADC_CLK
  MOV C,ACC.0
  MOV ADC_DI,C
  SETB ADC_CLK
  nop
  SETB ADC_DI
  CLR ADC_CLK;             //到/此clk输出了三个脉冲,输入模式和通道号已经选择
  SETB ADC_CLK
  CLR A
  MOV R0,#08
LOOP_REV:
          

    CLR ADC_CLK 
    RL A
    MOV C,ADC_DO
    MOV ACC.0,C        
    SETB ADC_CLK
    DJNZ R0,LOOP_REV
                  
  
LOOP_OVE:
    SETB ADC_CS

MOV ADOUT_M,A    
ACALL DISPLAY
SJMP ADCONV
RETI



DELAY1:  		;延时34us
    MOV R2,#8
D1: DJNZ R2,D1
    RET

DELAY2:		        ;延时2ms	
C1:  MOV R2,#10
C2:  MOV R3,#48
     DJNZ R3,$
     DJNZ R2,C2     
     RET

;.....................转换为待显示的十六进制
;.....................................ADC_EXCHANGE_2...............................
;待显示十六进制数放在ADOUT_M
;转换后放于20H~23H
DISPLAY:
	;MOV P1,A;调试用

;用到R2\R3\R4\R5\R6\R7\A\B
;将R6\R7数据转化为5V的4位十进制数
;结果存放在20H~23H,20H为低位
MOV A,ADOUT_M
MOV B,#0C4H
MUL AB
MOV R7,A
MOV R6,B
HB2: CLR A ;BCD码初始化
CLR C
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 ;

MOV A,R5
SWAP A
ANL A,#0FH
MOV 20H,A
MOV A,R4
ANL A,#0FH
MOV 21H,A
MOV A,R4
SWAP A
ANL A,#0FH
MOV 22H,A
MOV A,R3
ANL A,#0FH
MOV 23H,A  

/*
MOV 20H,#08
MOV 21H,#09
MOV 22H,#09
MOV 23H,#04 */


    /*MOV B,#0AH
    DIV AB
    MOV 20H,B

    MOV B,#0AH
    DIV AB
    MOV 21H,B 

    MOV 22H,A */

;..............................将20H~23H的内容变为数码管显示码
    MOV A,20H
    ACALL COUNT_CHANGE
    MOV 20H,A

    MOV A,21H
    ACALL COUNT_CHANGE
    MOV 21H,A

    MOV A,22H
    ACALL COUNT_CHANGE
    MOV 22H,A

    MOV A,23H
    ACALL COUNT_CHANGE
    MOV 23H,A

    

SJMP LOOP1

COUNT_CHANGE:    ADD A,#1
                 MOVC A,@A+PC
                 RET

TAB:
    DB 0C0H,0F9H,0A4H,0B0H,99H
    DB 92H,82H,0F8H,80H,90H
    DB 88H,83H,0C6H,0A1H,86H,8EH


;......................................ADC_DISPLAY_2.........................
;功能:将存在20H~23H的数字在4个数码管上动态扫描显示
;MOV P1,22H

LOOP1:
        SETB P2.3
        MOV P0,20H
        CLR P2.0
        LCALL DELAY2
        
        SETB P2.0
        MOV P0,21H
        CLR P2.1
        LCALL DELAY2
        
        SETB P2.1
        MOV P0,22H
        CLR P2.2
        LCALL DELAY2
        
        SETB P2.2
        MOV P0,23H
        CLR P2.3
        LCALL DELAY2

;SJMP $
        ;SJMP LOOP1

	RET
     END



⌨️ 快捷键说明

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