实验十一  并行AD实验(数字电压表实验)

三、实验内容

1、ADC0809(C2区)

(1) 模数转换器,8位精度,8路转换通道,1路并行输出

(2) 转换时间100us,转换电压范围0~5V

2、编写程序:制作一个电压表,测量0~5V,结果显示于数码管上。

四、实验原理图

五、实验步骤

1、连线说明:

C2区:CS、ADDA、ADDB、ADDC

——

A3区:CS3、A0、A1、A2(选择通道)

C2区:CLK

——

B2区:500K

C2区:IN0

——

F6区:0~5V

D3区:CS、A0、A1

——

A3区:CS1、A0、A1

D3区:PC0、PC1

——

F5区:KL1、KL2

D3区:JP20、B、C

——

F5区:A、B、C

2、调节0~5V电位器(F6区)输出电压,显示在LED(最右边2位)上的电压数字量会随之改变。用万用表验证AD转换的结果。

1、InitKeyDisplay 初始化键盘、LED控制器8255

2、Display8      显示子程序(8255对数码管扫描)

   输入参数: SI—指向8字节显示缓冲区;

如果需要显示小数点,8位16进制数的最高位为1,例如:80H;

如果某位不需要显示,符值10H;

如果需要显示负号“-”,符值11H

例子:        10H,10H,03H,82H,00H,00H,00H, 00H  显示为:“  32.0000”

这是实现上述实验的源代码:

其中第4、5位为16进制,底4位为10进制

 1         .MODEL    TINY
 2 ADDR_0809    EQU    0250H
 3 EXTRN    InitKeyDisplay:NEAR, Display8:NEAR
 4     .STACK    100
 5     .DATA
 6 BUFFER    DB    8 DUP(?)
 7 LastAD    DB    0        ;上一次AD转换值
 8     .CODE
 9 START:    MOV         AX,@DATA
10     MOV    DS,AX
11     NOP
12     CALL    InitKeyDisplay    ;初始化键盘数码管控制器(825513     XOR    AL,AL
14     JMP        START6
15 START1:    MOV    CX,8    ;采样8次
16     MOV    BX,0    ;累计8次的采样值
17 START2:    CALL    AD0809
18     XOR    AH,AH
19     ADD    BX,AX
20     LOOP    START2
21     MOV    AX,8
22     XCHG    AX,BX
23     DIV    BL            ;8次的平均值
24     CMP    AL,LastAD
25     JZ    START3
26 START6:    MOV    LastAD,AL
27     CALL    Display_Data
28 START3:    CALL    DLTime
29     JMP    START1
30 AD0809    PROC    NEAR
31     PUSH        CX
32     MOV    AL,0
33     MOV    DX,ADDR_0809
34     OUT    DX,AL
35     MOV    CX,100
36     LOOP    $    ;延时,等待AD转换完成
37     MOV    DX,ADDR_0809
38     IN    AL,DX
39     POP    CX
40     RET
41 AD0809     ENDP
42 DISPLAY_DATA    PROC    NEAR
43     MOV    AH,AL
44     AND    AL,0FH
45     MOV    BUFFER + 4,AL
46     MOV    AL,AH
47     AND    AL,0F0H
48     ROR    AL,4
49     MOV        BUFFER + 5,AL
50     MOV    AL,AH
51     XOR    AH,AH
52     MOV    BL,51    ;255/51 (16进制的1 = 1/51V)
53     DIV    BL
54     OR    AL,80H    ;加上小数点
55     MOV    BUFFER + 2,AL
56     MOV    AL,10
57     MUL    AH
58     DIV        BL
59     MOV    BUFFER + 1,AL    ;第一位小数
60     MOV    AL,10
61     MUL    AH
62     DIV    BL
63     MOV    BUFFER,AL    ;第二位小数
64     MOV    buffer+3,10H
65     MOV        buffer+6,10H
66     MOV    buffer+7,10H        ;消隐
67     RET
68 DISPLAY_DATA    ENDP
69 DLTime    PROC    NEAR
70     MOV    CX,10
71     LEA    SI,buffer
72 XX:    CALL    Display8
73     LOOP    XX
74     RET
75 DLTime    ENDP
76
77     END    START    

这是用8个7位数码管显示2进制的电压表数值:

 1         .MODEL    TINY
 2 ADDR_0809    EQU    0250H
 3 EXTRN    InitKeyDisplay:NEAR, Display8:NEAR
 4     .STACK    100
 5     .DATA
 6 BUFFER    DB    8 DUP(?)
 7 LastAD    DB    0        ;上一次AD转换值
 8     .CODE
 9 START:    MOV     AX,@DATA
10     MOV    DS,AX
11     NOP
12     CALL    InitKeyDisplay    ;初始化键盘数码管控制器(825513     XOR    AL,AL
14     JMP    START6
15 START1:    MOV    CX,8    ;采样8次
16     MOV    BX,0    ;累计8次的采样值
17 START2:    CALL    AD0809
18     XOR    AH,AH
19     ADD    BX,AX
20     LOOP    START2
21     MOV    AX,8
22     XCHG    AX,BX    ;交换内容
23     DIV    BL            ;8次的平均值
24     CMP    AL,LastAD
25     JZ    START3
26 START6:    MOV    LastAD,AL
27     CALL    Display_Data
28 START3:    CALL    DLTime
29     JMP    START1
30 AD0809    PROC    NEAR
31     PUSH    CX
32     MOV    AL,0
33     MOV    DX,ADDR_0809
34     OUT    DX,AL
35     MOV    CX,100
36     LOOP    $    ;延时,等待AD转换完成
37     MOV    DX,ADDR_0809
38     IN    AL,DX
39     POP    CX
40     RET
41 AD0809     ENDP
42 DISPLAY_DATA    PROC    NEAR
43     MOV    AH,AL
44     AND    AL,01H
45     MOV    BUFFER + 0,AL
46     MOV    AL,AH
47     AND    AL,02H
48     ROR    AL,1
49     MOV    BUFFER + 1,AL
50     MOV    AL,AH
51     AND    AL,04H
52     ROR    AL,2
53     MOV    BUFFER + 2,AL
54     MOV    AL,AH
55     AND    AL,08H
56     ROR    AL,3
57     MOV    BUFFER + 3,AL
58     MOV    AL,AH
59     AND    AL,10H
60     ROR    AL,4
61     MOV    BUFFER + 4,AL
62     MOV    AL,AH
63     AND    AL,20H
64     ROR    AL,5
65     MOV    BUFFER + 5,AL
66     MOV    AL,AH
67     AND    AL,40H
68     ROR    AL,6
69     MOV    BUFFER + 6,AL
70     MOV    AL,AH
71     AND    AL,80H
72     ROR    AL,7
73     MOV    BUFFER + 7,AL
74     MOV    AL,AH
75     RET
76 DISPLAY_DATA    ENDP
77 DLTime    PROC    NEAR
78     MOV    CX,10
79     LEA    SI,buffer
80 XX:    CALL    Display8
81     LOOP    XX
82     RET
83 DLTime    ENDP
84
85     END    START    

这是用8个7位数码管显示2进制的电压表数值(通过循环简化):

 1     .MODEL    TINY
 2
 3 ADDR_0809       EQU     0250H
 4 EXTRN    InitKeyDisplay:NEAR, Display8:NEAR
 5
 6     .STACK      100
 7     .DATA
 8 buffer          DB      8 DUP(?)
 9 LastAD        DB    0        ;上一次AD转换值
10
11     .CODE
12 START:      MOV     AX,@DATA
13             MOV     DS,AX
14             NOP
15             CALL    InitKeyDisplay
16             XOR    AL,AL
17             JMP    START6
18 START1:        MOV     CX,8        ;采样8次
19             MOV     BX,0        ;累计8次的采样值
20 START2:     CALL    AD0809
21         XOR    AH,AH
22         ADD    BX,AX
23         LOOP    START2
24         MOV    AX,8
25         XCHG    AX,BX
26         DIV    BL        ;8次的平均值
27             CMP     AL,LastAD
28             JZ      START3
29 START6:        MOV     LastAD,AL
30             CALL    Display_Data
31 START3:        CALL    DLTime
32         JMP    START1
33
34 AD0809      PROC    NEAR
35         PUSH    CX
36             MOV     AL,0
37             MOV     DX,ADDR_0809
38             OUT     DX,AL
39             MOV    CX,100
40             LOOP    $        ;延时,等待AD转换完成
41             MOV     DX,ADDR_0809
42             IN      AL,DX
43             POP    CX
44             RET
45 AD0809      ENDP
46
47 DISPLAY_DATA    PROC    NEAR
48
49
50         MOV    AH,AL        ;循环二进制显示
51         MOV DH,0
52         MOV DL,01H
53         PUSH BX
54         PUSH CX
55         MOV CX,8
56         MOV BX,0
57 myloop:        AND AL,DL
58             MOV buffer+BX,AL
59             ROL DL,1
60             MOV AL,AH
61             INC BX
62             LOOP myloop
63         POP CX
64         POP BX
65
66         RET
67 DISPLAY_DATA    ENDP
68
69 DLTime        PROC    NEAR
70         MOV    CX,10
71         LEA    SI,buffer
72 XX:            CALL    Display8
73         LOOP    XX
74         RET
75 DLTime        ENDP
76
77         END     START
12-26 18:06
查看更多