矩形波正弦波三角波汇编语言设计Word格式文档下载.docx
《矩形波正弦波三角波汇编语言设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《矩形波正弦波三角波汇编语言设计Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
掌握这方面的知识更要强调解决实际问题的能力。
同学们要着重学会面对一个实际问题,如何去自己收集资料,如何自己去学习新的知识,如何自己去制定解决问题的方案并通过实践不断地提高分析和解决问题的能力。
第二章设计任务
2.1设计内容及要求
本设计综合应用D/A转换器、定时器/计数器电路,中断技术:
通过PC机定时,产生:
锯齿波、三角波、正弦波等模拟信号输出,信号频率可通过PC机键盘调节。
2.2课程设计要求
设计要求画出电路原理图,说明工作原理,编写程序及程序流程图。
第三章总体设计方案
3.1设计思想及方案论证
由于要求达到模拟信号波形发生,因此要由D/A转换芯片0832来来完成此项任务,由8253形成波形的主要做法是:
先输出一个下限电平,将其保持t然后输出一个稍高的电平,在保持t,然后重复此过程,因此需要延长0832输入数据的时间间隔来改变频率。
如图3-1信号发生波形图所示。
0832输入的数据的延时可以通过软件完成,也可以通过硬件完成。
由于实验要求输出的波的频率可以改变,且精确,所以选用硬件延时。
+5v
0v
图3-1信号发生波形图
硬件延时主要由计时器8253和中断控制器8259来实现。
由8253输出的方波的高低电平,来触发8259的IR0端,8259给CPU中断信号,CPU中断来执行相应的中断子程序,中断子程序为向0832输出数据的程序,通过选择此程序可以产生锯齿波,方波,正弦波。
由于0832产生的方波的频率可以控制,所以每次中断执行波形发生程序的时间间隔可以精确控制。
以此来控制输出的波形频率。
3.2总体设计方案
总体的设计就是以8253定时中断,中断的子程序来执行输出,输出的信号经过信号发生器形成波形。
初步设想图3-2如图所示。
图3-2硬件简图
第四章硬件设计
4.1芯片简介
4.1.1可编程中断控制器8259a
8259a是8086/8088系列的可编程中断控制器,8259a为28个引脚的双列直插芯片。
它的主要功能是:
(1)据8级优先级控制,通过联级可以扩展到64级优先控制。
(2)每一级中断可由程序单独屏蔽或允许。
(3)可提供中断类型号传送给CPU。
(4)可以通过编程选择多种不同工作方式。
引脚功能:
D7-D0:
双向数据线,三态,及数据总线相连。
IR7-IR0:
外设的中断请求信号输入端,输入,中断请求:
可以是电平触发,或者边缘触发。
RD:
读命令信号,输入,低电平有效,用来控制数据由8259A读
WR:
写命令信号,输入,地点平有效,用来控制写到8259
CS:
片选信号,输入,通过译码器及地址总线相连
INT:
向CPU发出中断请求信号,输出,及CPU的INTR相连
INTA:
CPU给8259的中断响应信号,输入。
4.1.2DAC0832:
NSC公司生产的DAC0832,是一种内部带有数据输入寄存器的8位D/A转化器,采用CMOS工艺制成,芯片内部R-2R梯形电阻网络,用于对参考电压产生的电压进行分流,完成模数转换,转换结果以一组差动电流IOUT1IOUT2输出
各引脚的功能分述如下:
VREF:
参考电压输入端。
根据需要一定大小的电压,由于它是转换的基准,要求数值正确,稳定性好。
VCC:
工作电压输入端。
AGAN为模拟地,DGAN为数字地。
在模拟电路中,所有的模拟地要连在一起然后将模拟地,数字地连接到一个公共接地点。
DI7-DI0:
数据输入。
可直接连接到数据总线。
IOUT1IOUT2:
互补的电流输出端。
为了输出模拟电压,需加转换电路。
4.1.38253
inter8253是一种能够完成定时和计数的芯片,8253内部有3个16位计数器通道,通过对他们编程,每个计数器可以按照6种工作方式工作,并且都可以按2或10进制格式进行计数。
,最高频率为2HZ.。
8253还可以用于许多其他场合,比如可作编程方波发生器,分频器等。
引脚:
1数据缓冲总线
数据总线缓冲器是8253及系统总线相连时使用的接口电路,它由8位双相三态缓冲器构成,CPU用输入输出指令对8253进行读写操作的信息都由8位数据总线传输:
(1)CPU在对8253进行初始化编程时,向他写入控制字。
(2)CPU向某一计时器写入计数初值。
(3)从计数器读出计数值。
2读写控制逻辑
读写控制逻辑接受系统控制总线送来的输入信号,经由组合后形成控制信号,对各部分操作进行控制。
可接受的信号有:
(1)CS片选,低电平有效,由数据总线经由IO端口译码电路产生。
只有CS低电平时,CPU才能对8253进行读写操作。
(2)RD读信号,低电平有效,当RD位地电平时,表示CPU正在读取所选定的计数器的通道的内容。
(3)WR写信号,低电平有效。
当WR为低电平时,表示CPU正在将计数器初值写入所选中的通道口中,或者将控制字写入内部寄存器中。
(4)A1A2端口选择信号,改变它的值,来选择8253内三个计数器通道。
如果8253和及8位数据总线的微机相连,只要将A1A0分别及地址总
相联。
如果系统采用的是8086CPU,则数据总线为16位,传输数据时,总是将低8位数据送往偶地址,将高8位送往奇地址。
3计数器
8253内部包含三个完全相同俄计数器定时器通道,对3个通道的操作,
完全独立的。
每个通道都包含1个8位的控制字寄存器,1个16位的减寄存器,和一个锁存器,执行部件是一个16位的减法计数器。
每个通道工作时,对输入到CLK引脚上的脉冲按2进制或10进制格式进行计数。
每当输入一个时钟脉冲,计数器减1,当计数器的值减为0时从,从OUT引脚输出一个脉冲信号。
GATE引脚上的门控制信号,决定他是否允许计数。
4.3硬件电路设计系统原理图
图4-1硬件原理图
第五章软件设计
5.1流程图主要进行系统初始化和外围接口芯片初始化,及开中断,等待中断产生,其流程图如图5.1所示。
图5-1程序流程图
5.2源程序及其说明
datasegment
sinbufdb80h,8ch,98h,0a5h,0b0h,0bch,0c7h,0d1h
db0dah,0e2h,0eah,0f0h,0f6h,0fah,0fdh,0ffh
db0ffh,0fdh,0fah,0f6h,0f0h,0eah,0e2h,0dah
db0d1h,0c7h,0bch,0b0h,0a5h,98h,8ch,80h
db7fh,73h,67h,5ah,4fh,43h,38h,2eh
db25h,1dh,15h,0fh,09h,05h,02h,00h
db00h,02h,05h,09h,0fh,15h,1dh,25h
db2eh,38h,43h,4fh,5ah,67h,73h,7fh
mess1db'
方波--1'
0dh,0ah
db'
三角波--2'
方波--3'
正弦波--3'
mess2db'
输入发生频率'
,0dh,0ah,'
$'
cunchudb?
jishudb?
dataends
stacksegmentstack
stdw20dup(?
)
TOPlabelword
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack,es:
data
mainprocfar
movax,data
movds,ax
movax,stack
movss,ax
movdx,8259AD0;
初始化8259,设置为单片,上升沿触发,完全
moval,00010011b;
非自动EOI方式
outdx,al
movdx,8259AD1
moval,10000000b
moval,00000001b
leadx,mess2;
输入频率
movah,09h
callinput
movax,4096;
将输入的频率计算,得出写入8253的时间数
movbx,cx
divbx
movcx,ax
pushcx
movdx,316h
moval,0010011b;
通道1方式字,方式0,BCD记数
movdx,312h
popcx
moval,cl
moval,ch
movdx,316h;
通道0方式字,方式0,bcd计数
moval,00110111b
movdx,310h
moval,16h;
16分频,以0通道作为1通道的时钟频率,其频率为0.125MHz
movcuncu,0h;
将存储单元清零
movjishu,0h
bg:
leadx,mess1;
选择波形
int21h
movah,08h
popax
movah,al
cmpal,'
1'
;
若为方波,将方波对应的子程序写入中断地址表
movax,0
moves,ax
movbx,08h*4
movax,offsetfangbo
moves:
wordptr[bx],ax
movax,segfangbo
wordptr[bx+2],ax
2'
若为锯齿波,将锯齿对应的子程序写入中断地址表
movax,offsetjuchi
movax,segjuchi
3'
若为三角波,将三角对应的子程序写入中断地址表
movax,offsetsanjiao
movax,segsanjiao
4'
若为正弦波,将正弦波对应的子程序写入中断地址表
movax,offsetzhengxian
movax,segzhengxian
sti
CIR:
JMPCIR
ret
mainendp
;
输入数字的子程序
inputprocnear
xordx,dx
xorcx,cx
movbx,10
leasi,flag
movbyteptr[si],0
movah,1
cmpal,0dh
jeenter
subah,ah
xchgax,cx
mulbx
subcx,30h
addcx,ax
movah,1
jmpkey
enter:
cmpflag[0],0
jenext
negdx
nextmovwordptr[di],cx
inputend
三角波发生程序
sanjiaoboprocnear
pushax
pushbx
pushdx
movdx,228h
moval,cunchu
outdx,al
inc
cmpal,0ffh
jnzcun
movcun,0h
cun:
movcun,al
intreturn:
popdx
popbx
eoi
iret
sanjiaowoendp
锯齿波发生程序
jvchibo:
procnear
pushbx
moval,cunchu
movcx,jishu
cmpcx,0ffh
jgad
dec:
dec
addcx,01h
cmpcx,1feh
movcx,0h
jmpcun
ad:
inc
movjishu,cx
popax
jvchiboendp
正弦波发生程序
zhengxuanbo:
moval,cunchu
OUTDX,sinbuf[AL]
;
方波子程序
fangbo:
jmplo
moval,0h
lo:
moval,0ff
outdx,0h
jmplo2
lo2:
第六章软件系统的使用说明
先输入要输出的频率,然后选择输出的波形,然后就可以在转换的out端得到波形。
第七章收获、体会
在这两周的实习中,我再次的巩固了微机课中所学的知识,了解了各种芯片的的用法,各个接口的名称,走用,学会了用protel来画硬件流程图。
明白了微机系统在生产生活中最基本的用处.
在两周的实习中,我也感到所学的知识不是很深,动手的能力不是很强,面对问题解决问题的能力还有待加强。
总的来说,《微型计算机原理及接口计数》对于我以后学习,工作的影响是很大的。
参考书目:
[1]周荷琴.微型计算机原理及接口技术.合肥:
中国科学技术大学出版社,2004.12
[2]刘全忠.汇编语言实用程序.天津:
天津大学出版社,1991.6