单片机实验
DA和AD综合实验
实验目的
1、掌握D/A和A/D的接口方法和程序设计。
2、进一步了解键盘管理设计和仪表总体设计。
实验内容:
实验板中采用1路D/A转换电路,由DAC0832和运放,µA741组成。D/A的VREF=+5V,当输入00~FFH时,相应输出0~5V。D/A的输出又送至0809的通道0,作为0809通道0的输入。
设计要求:1、显示格式如图8-1示,最左二位显示D/A的数字输入(00~FFH),最右二位显示A/D的数字输出(00~FFH)。
3、D/A的数字输入可通过键盘输入,为输入16进制,键盘布置如图8-2规定:
单键输入:按键号0~9的数字键时,输出键值为0~9H。
双键输入:先按下键号为B的键,再按0~5号数字键,则输出键值为A~F。
D/A输入 A/D输出
图8-1 显示格式 图8-2 键盘布置
根据实验内容要求,列出主程序流程图,见图8-3,其中,键盘输入部分编为子程序,流程图如图8-4。
|
ORG 0000H |
|||
|
LJMP MAIN |
|||
|
ORG 0700H |
|||
|
MAIN: |
MOV SP, #60H |
;设置堆栈 | |
|
MOV DPTR, #0B000H |
;8155初始化 | ||
|
MOV A, #03H |
;A、B口输出,C口输入 | ||
|
MOV X @DPTR, A |
|||
|
MOV A, #13H |
;初始显示全灭 | ||
|
MOV R0, 2AH |
|||
|
MP0: |
MOV @R0, A |
||
|
INC R0 |
|||
|
CJNE R0, #30H, MP0 |
|||
|
D25: |
LCALL DISP |
;调用显示 | |
|
LCALL KS1 |
;有无键按下? | ||
|
JZ MP1 |
;无键按下,转 | ||
|
LCALL KEYP |
;有键按下,调KEYP | ||
|
MP1: |
MOV A, 2AH |
;(2A)(2B)输入至0832 | |
|
SWAP A |
|||
|
ADD A, 2BH |
|||
|
|
MOV DPTR, #C000H |
指向0832 | |
|
MOVX @ DPTR, A |
|||
|
NOP |
|||
|
MOV DPTR, #5000H |
;启动A/D通道0 | ||
|
MOV X @DPTR, A |
|||
|
MOV R2, #20H |
;延时 | ||
|
DL: |
DJNZ R2, DL |
||
|
WEND: |
JB P3.3, WEND |
;等待A/D完成 | |
|
MOVX A, @DPTR |
;A/D输出 | ||
|
PUSH A |
;送2E、2F | ||
|
ANL A, #0F0H |
|||
|
SWAP A |
|||
|
MOV 2EH, A
ANL A,#0FH MOV 2FH,A |
|||
|
LJMP DIS |
|||
|
ORG 0740H |
|||
|
KEYP: |
LCALL KEYA |
;键号→A | |
|
CJNE A, #0BH, KC1 |
;不是键号B,转 | ||
|
SETB 00H |
;是键号B,设置标志 | ||
|
RET |
|||
|
KC1: |
JB 00H, KC3 |
;已按过B键,转 | |
|
CJNE A, #0A, KC2 |
;属单键输入 | ||
|
KC2: |
JNC KC6 |
;若键号≥0A,转退出 | |
|
SJMP KC5 |
;单键输入0~9 | ||
|
KC3: |
CJNE A, #06, KC4 |
; | |
|
KC4: |
JNC KC6 |
;双键输入时,键号≥6,则退出 | |
|
ADD A, #0AH |
;双键输入时键值修正 | ||
|
KC5: |
CPL 01H |
;按键顺序标志位求反 | |
|
JNB 01H, KC7 |
|||
|
|
MOV 2AH, A |
;键值送显示缓冲2AH | |
|
KC6: |
RET |
||
|
KC7: |
MOV 2BH, A |
;下一次按键的键值送2BH | |
|
|
RET |
实验要求:
读通程序后输入。可以先连续运行程序,检查运行是否正常。如果不正常,则单步或断点调试。
思考题:
1、用键盘给D/A输入16进制数00~FFH,在程序中如何区分按键属于第一位16进制数还是第二位16进制数?
2、D/A的输入显示和A/D的输出显示之间,为什么有误差?试分析原因。
3、A/D采样改用中断法编程,读改写程序。
全部0条评论
快来发表一下你的评论吧 !