微机与接口实验5模数数模实验.docx
《微机与接口实验5模数数模实验.docx》由会员分享,可在线阅读,更多相关《微机与接口实验5模数数模实验.docx(14页珍藏版)》请在冰豆网上搜索。
微机与接口实验5模数数模实验
微机与接口技术实验5
实验设备:
LAB6000通用微控制器实验系统
实验用时4小时
实验内容:
模数、数模实验
1.采用查表法,用DAC0809产生100Hz正弦输出模拟信号,用示波器检查波形。
(8253T0产生定时脉冲,8259INT0向CPU中断)。
2.设计ADC0832模数采样程序,对电位器输出电压采样,并用发光二极管显示采样值。
要求每秒采样并输出显示一次。
(8253T0产生定时脉冲,8259INT0向CPU中断)。
3.在原理图上增加0809,0832芯片,地址分别为10050H和100601H起(占16地址)
实验报告:
程序清单,说明;电路原理图。
程序代码
1.
CONTROLequ0c003h
COUNT0equ0c000h
COUNT1equ0c001h
COUNT2equ0c002h
CS0832equ0a000h
ICW1equ00010011b;单片8259,上升沿中断,要写ICW4
ICW2equ00100000b;中断号为20H
ICW4equ00000001b;工作在8086/88方式
OCW1equ11111110b;只响应INT0中断,也响应INT1中断
CS8259Aequ09000h;8259地址
CS8259Bequ09001h
datasegment
xdb128,203,249,249,203,128,53,7,7,53
CNTdw0
CNNTdw0
dataends
codesegment
assumecs:
code,ds:
data
IEnterprocnear;中断程序
pushax
pushdx
moval,[x+bx]
movdx,CS0832
outdx,al
incbx
cmpbx,10
jboutput
movbx,0
output:
movdx,CS8259A
moval,20h;中断服务程序结束指令
outdx,al
popdx
popax
iret
IEnterendp
IInitproc;初始化中断程序
movdx,CS8259A
moval,ICW1
outdx,al
movdx,CS8259B
moval,ICW2
outdx,al
moval,ICW4
outdx,al
moval,OCW1
outdx,al
ret
IInitendp
startprocnear
moval,0
movdx,CS0832
outdx,al
moval,80h
outdx,al
moval,0ffh
outdx,al
;新加的
;初始化计时器
movax,data
movds,ax
moval,00110100B;计数器0,16位,方式2,二进制
movdx,CONTROL
outdx,al
movax,4000;产生100Hz时钟信号
movdx,COUNT0
outdx,al;计数器低字节
moval,ah
outdx,al;计数器高字节
;中断程序存储
movax,0
movds,ax
movbx,4*ICW2;中断号
movax,code
shlax,4;x16
addax,offsetIEnter;中断入口地址(段地址为0)
mov[bx],ax
movax,0
incbx
incbx
mov[bx],ax;代码段地址为0
callIInit
;中断程序初始化结束
movax,data
movds,ax
sti
movbx,0
LP:
;等待中断,并计数。
nop
jmpLP
jmp$
startendp
codeends
endstart
产生的波形图:
2.
modeequ082h
PAequ09000h
CTLequ09003h
CS0809equ08000h
CONTROLequ0c003h
COUNT0equ0c000h
COUNT1equ0c001h
COUNT2equ0c002h
CS0832equ0a000h
ICW1equ00010011b;单片8259,上升沿中断,要写ICW4
ICW2equ00100000b;中断号为20H
ICW4equ00000001b;工作在8086/88方式
OCW1equ11111110b;只响应INT0中断,也响应INT1中断
CS8259Aequ0b000h;8259地址
CS8259Bequ0b001h
datasegment
dataends
codesegment
assumecs:
code,ds:
data
IEnterprocnear;中断程序
pushax
pushdx
moval,0
movdx,CS0809
outdx,al;起动A/D
movcx,40h
loop$;延时>100us
inal,dx;读入结果
movdx,PA
outdx,al
output:
movdx,CS8259A
moval,20h;中断服务程序结束指令
outdx,al
popdx
popax
iret
IEnterendp
IInitproc;初始化中断程序
movdx,CS8259A
moval,ICW1
outdx,al
movdx,CS8259B
moval,ICW2
outdx,al
moval,ICW4
outdx,al
moval,OCW1
outdx,al
ret
IInitendp
startprocnear
;初始化计时器
movax,data
movds,ax
moval,00110100B;计数器0,16位,方式2,二进制
movdx,CONTROL
outdx,al
moval,01110100B;计数器1,16位,方式2,二进制
outdx,al
movax,4000;产生100Hz时钟信号
movdx,COUNT0
outdx,al;计数器低字节
moval,ah
outdx,al;计数器高字节
movax,1000;产生100Hz时钟信号
movdx,COUNT1
outdx,al;计数器低字节
moval,ah
outdx,al;计数器高字节
;中断程序存储
movax,0
movds,ax
movbx,4*ICW2;中断号
movax,code
shlax,4;x16
addax,offsetIEnter;中断入口地址(段地址为0)
mov[bx],ax
movax,0
incbx
incbx
mov[bx],ax;代码段地址为0
callIInit
;中断程序初始化结束
movax,data
movds,ax
sti
;原来有的
movbx,0f123h
movax,5678h
mov[bx],ax
movax,[bx]
movax,1234h
movbx,5678h
addax,bx
movbx,400h
mov[bx],ax
moval,mode
movdx,CTL
outdx,al
again:
jmpagain
codeends
endstart
程序运行结果:
图中可见,当指示灯显示为11111111b时,电压表读得的数据是4.29V,那么按照理论结果,指示灯显示的数值与电压应该是线性关系。
显示数值
0
162
194
210
理论电压(V)
0
2.73
3.26
3.53
实测电压(V)
0
2.77
3.31
3.53