中山大学左明老师单片机实验.docx
《中山大学左明老师单片机实验.docx》由会员分享,可在线阅读,更多相关《中山大学左明老师单片机实验.docx(18页珍藏版)》请在冰点文库上搜索。
中山大学左明老师单片机实验
实验七D/A与A/D转换
一、实验目的
1、学习D/A转换的基本原理和D/A转换芯片DAC0832的性能及篇程方法
2、了解单片机系统中扩展D/A转换芯片的基本方法
3、学习A/D芯片ADC0809的转换性能及编程方法
4、了解A/D芯片与写单片机的接口方法
5、通过实验掌握单片机进行数据采集的方法
二、实验说明
1、D/A转换是把数字量转换成模拟量的变换。
从D/A输出的是模拟信号。
实验程序一是通过在D/A的输入端送入有一定规律的数字量,在输出端产生锯齿波、三角波、正弦波的波形,通过示波器观察来直观地了解D/A的转换功能。
要把一个数据通过0832输出,要经过两次锁存。
典型的程序如下:
MOVDPTR,#PORT
MOVA,#DATA
MOVX@DPTR,A
INCDPTR
MOVX@DPTR,A
2、A/D转换是把模拟量转换成数字量的变换。
启动A/D采样转换只需要两条指令:
MOVDPTR,#PORT
MOVX@DPTR,A
三、实验内容
内容一:
利用DAC0832编程产生锯齿波、三角波、正弦波。
三种波形轮流显示
一、连线方法:
0832的CS0832接CS0。
输出DAOUT接示波器探头,示波器探头地线接实验板地线
二、代码
;D61.ASM
ORG4000H
LJMPMAIN
ORG401BH
LJMPDELAY
PORTEQU0CFA0H
ORG4100H
MAIN:
MOVTMOD,#10H
SETBEA
SETBET1
MOVTL1,#0AFH
MOVTH1,#3CH
SETBTR1
DISP:
MOVR1,#50H
LCALLPRG1
MOVR1,#50H
LCALLPRG2
MOVR1,#50H
LCALLPRG3
LJMPDISP
DELAY:
CLRTR1
MOVTL1,#0AFH
MOVTH1,#3CH
DECR1
SETBTR1
RETI
PRG1:
MOVA,#00H
LOOP:
MOVDPTR,#PORT
MOVX@DPTR,A
INCDPTR
MOVX@DPTR,A
INCA
CJNER1,#00H,LOOP
RET
PRG2:
MOVA,#00H
LP1:
MOVDPTR,#PORT
MOVX@DPTR,A
INCDPTR
MOVX@DPTR,A
INCA
CJNEA,#0FFH,LP1
MOVR2,A
LP2:
MOVDPTR,#PORT
MOVA,R2
MOVX@DPTR,A
INCDPTR
MOVX@DPTR,A
DJNZR2,LP2
CJNER1,#00H,LP1
RET
PRG3:
MOVR2,#02H
MOVR4,#0FFH
SJMPSUBDATA
LP3:
MOVDPTR,#PORT
MOVX@DPTR,A
INCDPTR
MOVX@DPTR,A
INCR2
DJNZR4,SUBDATA
MOVR4,#0FFH
MOVR2,#02H
CJNER1,#00H,SUBDATA
RET
SUBDATA:
MOVA,R2
MOVCA,@A+PC
SJMPLP3
DATA0:
DB80H,83H,86H,89H,8DH,90H,93H,96H
DB99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
DB0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H
DB0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H
DB0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H
DB0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH
DB0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH
DB0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H
DB0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH
DB0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH
DB0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H
DB0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H
DB0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99H
DB96H,93H,90H,8DH,89H,86H,83H,80H
DB80H,7CH,79H,78H,72H,6FH,6CH,69H
DB66H,63H,60H,5DH,5AH,57H,55H,51H
DB4EH,4CH,48H,45H,43H,40H,3DH,3AH
DB38H,35H,33H,30H,2EH,2BH,29H,27H
DB25H,22H,20H,1EH,1CH,1AH,18H,16H
DB15H,13H,11H,10H,0EH,0DH,0BH,0AH
DB09H,08H,07H,06H,05H,04H,03H,02H
DB02H,01H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,01H,02H
DB02H,03H,04H,05H,06H,07H,08H,09H
DB0AH,0BH,0DH,0EH,10H,11H,13H,15H
DB16H,18H,1AH,1CH,1EH,20H,22H,25H
DB27H,29H,2BH,2EH,30H,33H,35H,38H
DB3AH,3DH,40H,43H,45H,48H,4CH,4EH
DB51H,55H,57H,5AH,5DH,60H,63H,66H
DB69H,6CH,6FH,72H,76H,79H,7CH,80H
END
三、现象及分析
接通电路后示波器上依次显示锯齿波、三角波、正弦波
图形如下:
4.998V
4.998V
4.998V
2.508V
内容二:
用中断方法来读取AN0的输入模拟电压,通过P1口输出到LED上显示。
一、接线方法:
1、0809的片选信号CS0809接CS0
2、电位器的输出信号AN0接ADC0809的ADIN0
3、EOC接CPU的INT0
4、P10-P1.7连L1-L8
二、代码分析
;D62.ASM
ORG4000H
LJMPMAIN
ORG4003H;外中断0的中断向量
LJMPINTX0
PORTEQU0CFA0H
ORG4050H
MAIN:
MOVR0,#50H;存数RAM的地址
MOVP3,#0FFH
SETBEA
SETBEX0
SETBIT0
START:
MOVDPTR,#PORT
MOVA,#0
MOVX@DPTR,A;启动ADC0809开始转换
ACALLDEL
SJMPSTART
INTX0:
CLREA;中断服务程序
MOVXA,@DPTR;取出转换的数据
CPLA
MOVP1,A
MOV@R0,A;存储数据
SETBEA
EXIT:
RETI;从中断返回
DEL:
MOVR7,#15
DEL1:
MOVR6,#130;延时一段时间
DEL2:
MOVR5,#200
DEL3:
DJNZR5,DEL3
DJNZR6,DEL2
DJNZR7,DEL1
RET
END
三、现象及分析
通过旋转电位器,可以看到LED灯的亮灭不断改变,若将其转换为十进制,则抽取了部分数据如下表
LED显示
7
30
31
100
200
201
255
7
156
表示电压
0.1372
0.588
0.6076
1.96
3.92
3.9396
4.998
0.1372
3.0576
电位器电压
0.137
0.588
0.608
1.96
3.92
3.94
5.00
0.14
3.058
四、结论
通过比对上核定有格,可以看出A/D测出的电压基本与实际电压相符
内容三:
用EOC电位法作上述测量
一、前期连接:
1、P1口的P1.0~P1.5与数码管的输入:
LED1~LED6相连;
2、74LS273的00~07与LEDA~LEDDP相连,片选信号与CS1相连
3、0809的片选信号CS0809接CS0,EOC接CPU的P3.0
二、代码分析
PORTADEQU0CFA0H
PORTEQU0CFA8H
ORG4000H
MOV30H,#01H;选把30~36H处存好数值,#10H表示数码管
MOV31H,#01H;不显示
MOV32H,#10H
MOV33H,#10H
MOV34H,#10H
MOV35H,#10H
MOV36H,#10H
MOVB,#36H
MOVR0,#30H
MOVP3,#0FFH
MAIN:
;******************************************************************显示模块开始
PUSHACC
PUSHPSW
ANLPSW,#0C7H
ORLPSW,#10H
DISPLAY:
;显示模块
MOVB,#36H
NOP
DS1:
MOVR0,B;R0赋予要显示的最后一个数据地址
MOVR4,#60H;扫描需要显示60次
MOVR2,#20H;位码的初值
DS2:
MOVA,@R0;A里面暂存RAM里的数据
ACALLTABLE;取段码
MOVDPTR,#PORT;送段码的入口地址
MOVX@DPTR,A;送段码
MOVA,R2;读位码
CPLA;取反
MOVP1,A;送位码
MOVR3,#0FFH;适当延时
DEL:
NOP
DJNZR3,DEL;判断地是否结束
CLRC;清C
MOVA,R2
RRCA
MOVR2,A;右移位码
DECR0
MOVA,R0
CJNEA,#30H,DS2;若没有显示到足够的码,则继续扫描
MOVR0,B;重新赋给R0要显示的最后一个数的地址
MOVR2,#20H;重新赋给R2显示的位码
DJNZR4,DS2;扫描60次完毕
MOVR4,#60H
JMPNONUM;显示程序完,准备退出显示程序
TABLE:
INCA;算上RET一个字节
MOVCA,@A+PC
RET
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H
NONUM:
POPPSW
POPACC
;****************************************************************显示模块结束
START:
MOVDPTR,#PORTAD
MOVA,#0
MOVX@DPTR,A;启动AD0809开始转换
LOP:
MOVA,P3;读取P3口的值
CJNEA,#0FFH,LOP;如果没有转换完,则继续等待
MOVXA,@DPTR;取出转换的数据
MOVB,#10H;准备把高四位与低四位分开
DIVAB;A存储低四位,B存储高四位
MOV32H,A;低四位存入32H中
MOV31H,B;高四位存入31H中
JMPMAIN;跳回程序开始,准备显示31H与32H中的值
END
三、现象及分析
当旋转电位器时,数码管上显示ADC所读到的数,其中最大为FE,最小为00,如果将ADC所读取的数放到LED上显示,可以明显感觉到转换的速度要比内容二中用中断法要快很多
四、结论
用中断查询法可以使程序更加简洁,在程序不大时,其响应的速度还比中断法更快。
内容四:
用中断法再作测量
一、前期连接:
1、P1口的P1.0~P1.5与数码管的输入:
LED1~LED6相连;
2、74LS273的00~07与LEDA~LEDDP相连,片选信号与CS1相连
3、0809的片选信号CS0809接CS0,EOC接CPU的INT0
二、代码分析
PORTADEQU0CFA0H
PORTEQU0CFA8H
ORG4000H
ORG4000H
LJMPMAIN
ORG4003H;外中断0的中断向量
LJMPINTX0
ORG4050H
MOV30H,#01H;选把30~36H处存好数值,#10H表示数码管
MOV31H,#01H;不显示
MOV32H,#10H
MOV33H,#10H
MOV34H,#10H
MOV35H,#10H
MOV36H,#10H
MOVB,#36H
MOVR0,#30H
MOVP3,#0FFH
MAIN:
;******************************************************************显示模块开始
PUSHACC
PUSHPSW
ANLPSW,#0C7H
ORLPSW,#10H
DISPLAY:
;显示模块
MOVB,#36H
NOP
DS1:
MOVR0,B;R0赋予要显示的最后一个数据地址
MOVR4,#60H;扫描需要显示60次
MOVR2,#20H;位码的初值
DS2:
MOVA,@R0;A里面暂存RAM里的数据
ACALLTABLE;取段码
MOVDPTR,#PORT;送段码的入口地址
MOVX@DPTR,A;送段码
MOVA,R2;读位码
CPLA;取反
MOVP1,A;送位码
MOVR3,#0FFH;适当延时
DEL:
NOP
DJNZR3,DEL;判断地是否结束
CLRC;清C
MOVA,R2
RRCA
MOVR2,A;右移位码
DECR0
MOVA,R0
CJNEA,#30H,DS2;若没有显示到足够的码,则继续扫描
MOVR0,B;重新赋给R0要显示的最后一个数的地址
MOVR2,#20H;重新赋给R2显示的位码
DJNZR4,DS2;扫描60次完毕
MOVR4,#60H
JMPNONUM;显示程序完,准备退出显示程序
TABLE:
INCA;算上RET一个字节
MOVCA,@A+PC
RET
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H
NONUM:
POPPSW
POPACC
;****************************************************************显示模块结束
START:
MOVP3,#0FFH
SETBEA
SETBEX0
SETBIT0
START:
MOVDPTR,#PORT
MOVA,#0
MOVX@DPTR,A;启动ADC0809开始转换
ACALLDEL
SJMPMAIN
INTX0:
CLREA;中断服务程序
MOVXA,@DPTR;取出转换的数据
MOVXA,@DPTR;取出转换的数据
MOVB,#10H;准备把高四位与低四位分开
DIVAB;A存储低四位,B存储高四位
MOV32H,A;低四位存入32H中
MOV31H,B;高四位存入31H中
SETBEA
EXIT:
RETI;从中断返回
DEL:
MOVR7,#15
DEL1:
MOVR6,#130;延时一段时间
DEL2:
MOVR5,#200
DEL3:
DJNZR5,DEL3
DJNZR6,DEL2
DJNZR7,DEL1
RET
END
三、现象及分析
当旋转电位器时,数码管上显示ADC所读到的数,其中最大为FE,最小为00,但其响应的速度就不及内容三
四、结论
用中断查询法可以使程序更加简洁,在程序不大时,其响应的速度还比中断法更快。
(注:
本资料素材和资料部分来自网络,仅供参考。
请预览后才下载,期待您的好评与关注!
)