信号发生器功能程序设计微机原理课程设计报告Word文档格式.docx
- 文档编号:21269979
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:40
- 大小:288.65KB
信号发生器功能程序设计微机原理课程设计报告Word文档格式.docx
《信号发生器功能程序设计微机原理课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《信号发生器功能程序设计微机原理课程设计报告Word文档格式.docx(40页珍藏版)》请在冰豆网上搜索。
写信号1,低电平有效
OUT:
DAC电流输出端
图唐都实验箱D/A0832接线图
1.3.3A/D0809功能简介
ADC0809是采样频率为8位的、以逐次逼近原理进行模—数转换的器件。
其内部有一个8通道多路开关,它能够依照地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
本地址ABC=000时,IN0通道被选通。
图唐都实验箱A/D0809接线图
1.3.4唐都小键盘简介
唐都实验箱中提供了4行×
4列16个按键,列选择信号X1-X4,行扫描信号Y1-Y4。
图唐都实验箱小键盘接线图
第二章
整体设计方案
设计思想论述
(1).波形产生:
通过汇编语言编写各个波形子程序,其中方波和三角波参考了唐都的参考程序。
锯齿波由三角波修改而来,正弦波事前用MATLAB仿真存入各点数据,产生波形时依次输出各个数据即可。
波形子程序中主若是各个波形一个周期的代码,循环执行,由此产生持续波形并通过D/A0832将数字量转换成模拟量输出,即可得各类波形。
具体方案见第三章节。
(2).波形切换:
用小键盘输入进行波形的选择,按键0~3别离对应方波、三角波、锯齿波和正弦波。
每一个波形周期输出后,挪用键盘查询子程序,判定有无按键按下,没有那么继续输出下一周期,不然转到相应的波行子程序上。
可随时进行波形间的切换。
(3).无极调频:
改变波形子程序中的各个数据输出延不时刻,就可改变整个波形的频率,延时越短频率越高。
而延不时刻长短可由外部输入决定,通过A/D0809将电位计(0~5V)的模拟量转化成数字量(00~FF)作为延不时刻长短。
调剂电位器即可调剂延时,进而调剂频率。
ADC0809芯片分辨率为8位,即可将延时分为256个品级,实现无极调频。
具体方案见第三章、节。
(4).无极调幅:
改变波形子程序中DA输出值的大小即可改变幅值,能够在原数据基础上乘以一个增益。
而增益可由外部输入,原理与调频相似,通过A/D0809输入一个数字量(00~FF)。
按键4用于调频/调幅的切换。
当判定当前为调幅状态时就将那个数字量存入幅值增益变量中,若是判定是调频状态那么存入频率延时变量中。
从而实现只用一个电位器别离调剂频率和幅度的功能。
(5).开始终止:
通过扫描小键盘,按下5键那么退出。
程序流程图
电路原理图
图硬件连接电路图
第三章典型模块分析
波形产生模块
四个波形子程序结构类似,当子程序被挪用后,进行以下步骤:
(1)通过8255的C7位输出一个低电平来启动AD0809,并从8255的B口读入AD输入的数字量(00H~FFH)。
(2)判定幅频标志位FLAG_FUPIN,为0那么把AD输入的数字量存入频率值空间FRE,不然存入幅值空间AMP。
(3)输出波形的一个周期。
(4)挪用子程序CCSCAN,判定小键盘有无按键按下,无那么继续步骤
(1),有那么返回主程序。
流程图如下图。
图波形子程序流程图
方波
方波的产生先向DA0832输出一个低电平(00H),并延时一段时刻。
再输出一个高电平(此处直接用AMP的值作为高电平,AMP是外部AD输入的幅值增益),延时一段相同时刻,确实是矩形波的一个周期。
(1)一个周期波形的代码:
NEXT1_1:
MOVDX,DA0832;
写00H,输出低电平
MOVAL,00H
OUTDX,AL
CALLDELAY1;
延时
写AMP,输出高电平
MOVAL,AMP;
AMP=00H~FFH,默许值7FH
(2)延时子程序代码:
DELAY1PROCNEAR;
软件延时子程序
PUSHCX
PUSHAX
MOVCH,FRE;
读取频率值,FRE=00H~FFH
ANDCH,0F0H
ADDCH,0FH;
CH的值受FRE的操纵,改变FRE那么改变延不时刻
MOVCL,0FFH
DD1:
MOVAX,0FF00H
DD2:
DECAX
JNZDD2
LOOPDD1
POPAX
POPCX
RET
DELAY1ENDP
三角波
三角波从最小值开始慢慢上升,抵达最大值以后再慢慢减小到最小。
因此先将最小值(00H)放到BL,输出并延时,对BL加一,再输出并延时,达到最大值后就对BL依次减一,输出并延时,直到BL=00H,那么为一个周期波形。
因此三角波有两个进程。
一个周期波形的代码如下:
NEXT1_2:
MOVBL,00H;
BL赋最小值00H
UP1:
AL←幅值增益AMP,AMP=00H~FFH
ANDAL,0F0H
SHRAL,4;
AL=00H~0FH
MULBL;
AL←BL*AL
启动D/A转换
OUTDX,AL;
输出AL
CALLDELAY2
INCBL;
BL加一
CMPBL,25H;
判定BL是不是加到最大值了
JNEUP1
DOWN:
AL←幅值增益AMP,AMP=00H~FFH
ANDAL,0F0H
SHRAL,4;
MOVDX,DA0832
CALLDELAY2
DECBL;
BL减一
CMPBL,00H;
判定BL是不是减到最小值了
JNEDOWN
延时子程序与方波类似,此处再也不赘述。
局部流程图如下图。
锯齿波
锯齿波与三角波类似,只是锯齿波抵达最大值以后,直接跳到最小值。
因此锯齿波只有对BL依次加一的进程。
NEXT1_3:
UP2:
AL←幅值增益AMP,AMP=00H~FFH
ANDAL,0F0H
MULBL;
INCBL;
JNEUP2
BL加到最大以后直接赋给最小值00H
MOVAL,AMP
SHRAL,4
MOVDX,DA0832
正弦波
正弦波是利用正弦表(见附录代码段)输出的,即将正弦表中的数值一一输出并延时。
一个周期波形的代码:
NEXT1_4:
LEASI,SIN;
指向正弦表中的第一个数据
MOVCX,255
UP:
MOVBL,AMP;
BL←幅值增益AMP,AMP=00H~FFH
ANDBL,0F0H
SHRBL,4;
AMP=00H~FFH,BL=00H~0F
MOVAL,[SI];
读取正弦表中的一个数据
SHRAL,2
AL←AL*BL
CALLDELAY3
INCSI;
指向表中的下一个数据
LOOPUP
小键盘模块
小键盘用到两个子程序(ccscan和scan)。
(1)ccscan子程序只是一个辅助程序,用于判定当前小键盘是不是有键按下,有那么全零标志位ZF=0(运算结果不为0),无键按下那么ZF=1(运算结果为0)。
子程序代码如下:
CCSCANPROCNEAR;
扫描是不是有按键闭合子程序
MOVAL,00H
MOVDX,MY8255_A;
将4列全选通,X1~X4置0
MOVDX,MY8255_C
INAL,DX;
读Y1~Y4
NOTAL
ANDAL,0FH;
掏出Y1~Y4的反值
CCSCANENDP
(2)scan功能为当确信小键盘有键按下那么一列一列扫描键盘,判定是哪一列哪一行的键被按下了,并把键值保留到数据段的key空间去。
SCANPROCNEAR
MOVCH,0FEH
MOVCL,00H;
设置当前检测的是第几列
COLUM:
MOVAL,CH;
选取一列,将X1~X4中一个置0
MOVDX,MY8255_A
MOVDX,MY8255_C;
读Y1~Y4,用于判定是哪一行按键闭合
INAL,DX
L1:
TESTAL,01H;
是不是为第1行
JNZL2;
不是那么继续判定
MOVAL,00H;
设置第1行第1列的对应的键值
JMPKCODE
L2:
TESTAL,02H;
是不是为第2行
JNZL3;
MOVAL,04H;
设置第2行第1列的对应的键值
L3:
TESTAL,04H;
是不是为第3行
JNZL4;
MOVAL,08H;
设置第3行第1列的对应的键值
L4:
TESTAL,08H;
是不是为第4行
JNZNEXT;
MOVAL,0CH;
设置第4行第1列的对应的键值
NEXT:
INCCL;
当前检测的列数递增
MOVAL,CH
检测是不是扫描到第4列
JZKERR;
是那么跳回到开始处
ROLAL,1;
没检测到第4列那么预备检测下一列
MOVCH,AL
JMPCOLUM
KCODE:
ADDAL,CL;
将第1列的值加被骗前列数,确信按键值
MOVKEY,AL;
保留按键值到key空间
KERR:
SCANENDP
调幅调频模块
系统只利用了一个电位计能够别离调剂频率和幅值。
波形子程序中每一个循环周期启动一次A/D转换,启动信号由C7口输出,将读入的数据放到特定的存储单元FRE(或AMP)中,供延时(或幅值输出)时利用。
本次实验ADC0809芯片的输出八位数据线连到了8255端口B,通过端口B读入。
模拟输入量Vin通过电位计从0~5V无极可调,对应的数字输出量N从00H~FFH转变。
调频:
改变波形子程序中的各个数据输出延不时刻,就可改变整个波形的频率。
延不时刻由AD0809读入的数据操纵。
调幅:
在波形子程序中给DA输出值乘以一个增益,改变增益的大小即可改变幅值。
增益由AD0809读入的数据操纵。
调频/调幅切换:
主程序设了一个幅频标志位FLAG_FUPIN,当小键盘的4键按下时,使FLAG_FUPIN取反(默许标志位=0)。
波形子程序中通过判定幅频标志位FLAG_FUPIN的状态,能够选择是调频仍是调幅。
部份代码如下:
(1)主程序中的切换部份
GETKEY3:
CALLSCAN;
有键按下,挪用键盘扫描子程序
MOVAL,KEY
CMPAL,08H;
判定是不是为调幅/调频键
JNELOOP1;
不是那么返回判定波形或退出
NOTBYTEPTR[FLAG_FUPIN];
是,那么将幅频标志位取反
CMPFLAG_FUPIN,0
JNETIAOFU
MOVDX,OFFSETMES5;
屏幕显示切换到调频状态
MOVAH,09H
INT21H
JMPJIXU
TIAOFU:
MOVDX,OFFSETMES6;
屏幕显示切换到调幅状态
INT21H
JIXU:
MOVBL,FLAG_BOXING
MOVKEY,BL;
将波形对应的键值存回KEY中
JMPLOOP1;
返回判定波形
(2)波形子程序部份
MOVDX,MY8255_MODE;
通过8255的C7口发出一个低电平
MOVAL,00001110B
OUTDX,AL;
启动AD0809
MOVDX,MY8255_B;
读8255B口数据
MOVBL,FLAG_FUPIN;
判定幅频标志位,默以为0
CMPBL,0
JEPIN_1;
为0则跳转到PIN_1
MOVAMP,AL;
不为0那么存为振幅值
JMPNEXT1_1
PIN_1:
MOVFRE,AL;
为0那么存为频率值
流程图见图和图
第四章系统调试进程及结果
这次设计波形发生器是咱们在学习汇编以来接触到的比较大的程序。
不管用何种程序书写,理清思路是关键。
因此,从拿到题目开始,咱们花了很多时刻来对设计波形发生器的硬件和软件进行了分析与试探,从当选出最好的解决方式。
在系统调试的进程中,咱们用到的一个很重要的分析进程确实是先易后难,先局部后整体,先将各个波形的子程序写出来,一一进行测试。
无误后再写主程序将各个子程序整合起来。
设计的进程是由易到难的,咱们从实现最简单的波形产生功能开始,慢慢添加波形切换功能、小键盘输入功能、无极调频功能、无极调幅功能,整个系统由简至繁慢慢完善。
最先碰到的比较大的困难是小键盘的输入,前后试过两个方案,最终以唐都提供的参考程序为基础,进过修改取得了此刻利用的键盘扫描子程序,成效专门好。
整个进程中最难的是实现无级调频和无极调幅,开始时一直无法调频,通过对各个部位的认真调试分析,是0809模数转换的问题。
0809需要一个启动信号,且转换需要一按时刻。
于是咱们用C口每周期输出一启动信号进行转换。
最终达到理想成效。
实现了调频以后,对整个程序的结构略加改良,引入了幅频标志位,实现了小键盘操纵调频/调幅的切换,从而只用一个电位计和一个小键盘按键实现了无极调频和无极调幅的功能。
不足和改良:
1.所产生的频率范围较窄。
应尽可能减少延时拓宽频率。
2.幅值调剂范围不够大。
3.产生的波形不是理想状态。
专门是方波,上下跳变时,总会有断点。
波形有噪声,不是理想的波形。
4.由于波形每周期以后要读端口,与下一个周期之间有必然延时误差。
第五章收成与体会
本次课程设计的要求尽管不多,但整个设计进程是问题不断,一波三折。
整个课程设计完成以后,我在整体设计思路、硬件连结和汇编语言编程等方面取得了专门大的收成。
而程序整体流程也是三易其稿,其中有借鉴了他人的一些设计思路。
第一个方案实在缺乏设计的聪慧,在取得正确的指标后就被抛弃了。
第二个方案时,咱们把操纵波形转换的功能寄希望于用中断实现,而调频转变在延时子程序中进行,最后证明如此子的程序流程图将很复杂冗长,层次不清楚,而且用中断实现时缺乏所需的硬件。
最后一个方案即为当前选择的方案,层次清楚,程序简单,代码也短,可是能专门好实现所有功能。
硬件连结的问题要紧在利用第二个方案时显现的。
第二个方案的中断操纵需要手动输入一个中断脉冲,然后结果老是有差,最后讨论得出结论是咱们很难保证那个手动输入脉冲的合格,那个脉冲可能不够标准。
后面做最终方案时,波形发生哆嗦,检查发觉是操纵波形选择的开关处不稳固,也算是硬件连结的问题。
而波形专门是矩形波输出时,在中间老是一个断痕,反复检查软件设计后也归结为硬件内部延时所产生误差。
做软件设计时碰到的关键点也是难点集中到了调频电路的选择。
第二方案时,咱们把调频参数的读取放置在延时程序,主程序不循环,每一个波形都是无穷循环的波形。
后来取得高人指点,咱们忽略了主程序循环所会带来的延时对波形的阻碍,以主程序无穷循环,每输出一个周期波形读一次调频参数的方式进行调频。
结果很完美。
参考文献
[1]周荷琴,吴秀清.微型运算机原理与接口技术.合肥:
中国科学技术大学出版社,
[2]唐都科教仪器开发.32位微机原理与接口技术实验教程.
[3]陈明义.数字电子技术基础.长沙.中南大学出版社,
附录1汇编语言源程序代码
;
****************依照查看端口资源修改以下符号值*******************
IOY0EQU0E400H;
片选IOY0对应的端口始地址
IOY1EQU0E440H;
片选IOY1对应的端口始地址
*****************************************************************
DA0832EQUIOY0+00H*4;
DA0832的端口地址
MY8255_AEQUIOY1+00H*4;
8255的A口地址
MY8255_BEQUIOY1+01H*4;
8255的B口地址
MY8255_CEQUIOY1+02H*4;
8255的C口地址
MY8255_MODEEQUIOY1+03H*4;
8255的操纵寄放器地址
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DATASEGMENT
STR1DB'
DA0832:
PleasechooseWave'
0AH,0DH,'
$'
;
概念显示的字符串
MES1DB'
SHOWASQUARE'
MES2DB'
SHOWASANJIAO'
MES3DB'
SHOWAJUCHI'
MES4DB'
SHOWASINE'
MES5DB'
CHANGETHEFrequence'
MES6DB'
CHANGETHEAmplitude'
KEYDB'
?
'
FLAG_BOXINGDB'
FLAG_FUPINDB0
FREDB7FH
AMPDB7FH
SINDB100,102,105,107,110,112,115,117,120,122
DB124,127,129,132,134,136,139,141,143,145
DB147,150,152,154,156,158,160,162,164,166
DB168,169,171,173,175,176,178,179,181,182
DB184,185,186,187,189,190,191,192,193,194
DB194,195,196,197,197,198,198,199,199,199
DB200,200,200,200,200,200,200,200,199,199
DB199,198,198,197,197,196,195,194,194,193
DB192,191,190,189,187,186,185,184,182,181
DB179,178,176,175,173,171,169,168,166,164
DB162,160,158,156,154,152,150,147,145,143
DB141,139,136,134,132,129,127,124,122,120
DB117,115,112,110,107,105,102,100,98,95
DB93,90,88,85,83,80,78,76,73,71
DB68,66,64,61,59,57,55,53,50,48
DB46,44,42,40,38,36,34,32,31,29
DB27,25,24,22,21,19,18,16,15,14
DB13,11,10,9,8,7,6,6,5,4
DB3,3,2,2,1,1,1,0,0,0
DB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信号发生器 功能 程序设计 微机 原理 课程设计 报告