實驗十一 并行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 ;這裡是250h最後4位為0000,是以對應的實驗箱上8086CPU對應的A2A1A0為000,接到ADC0809的ADDA、ADDB、ADDC也為000,對應選擇通道0,對應IN0位。IN0位就接收來自F5區的0~5V的電壓
3 EXTRN InitKeyDisplay:NEAR, Display8:NEAR ;這裡InitKeyDisplay和Display都是内置子函數,在上面文檔中已做說明
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 ;初始化鍵盤數位管控制器(8255)
13 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) 兩位16進制的數可以表示0~255一共256個數,0~5V分為一共51個電壓機關
53 DIV BL
54 OR AL,80H ;加上小數點 小數點對應的g位對應D7~D0的代碼為1000 0000
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 ;初始化鍵盤數位管控制器(8255)
13 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