微机原理课程设计频率计报告最完整版Word下载.docx
《微机原理课程设计频率计报告最完整版Word下载.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计频率计报告最完整版Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
①标题:
“参考文献”,小四,黑体,居中。
②示例:
(五号宋体)
图书类:
[序号]作者1,作者2,……作者n.书名.版本.出版地:
出版社,出版年:
页次.
5、附录(打印)
实验题目:
频率计
1.设计目的
通过数字频率计的设计,使同学们进一步掌握:
(1)8086/8088汇编语言程序的设计和调试;
(2)信号频率的数字测量方法;
(3)定时计数器8253的基本工作原理和应用;
(4)微机基本应用系统的设计方法;
2、实验设备
1.计算机一台;
2.Dais—958H+(80X88、8253、8259、数码管);
3.基本TTL电路芯片若干(74LS138);
4.导线若干;
辅助设备:
示波器、函数发生器(最低要求为方波发生器);
3.设计功能要求
用微机原理实验装置,设计并实现一个信号频率测试系统,要求频率测量范围不小于5Hz~50kHz,并将测得的频率显示在LED数码显示器上。
分析:
1.利用8088,8253,8259等芯片实现测量程序的功能;
2.测量的二进制数值转化成十进制,并且显示在数码管上;
3.误差不可以大于1Hz;
4.用函数发生器测试实验的结果;
提升要求:
达到课设要求后,试着扩大测量范围,使其精确到0.1Hz~65kHz;
4.设计提示
1.频率测量方法
频率测量方法有M法,T法,M/T法,测量的基本要求是快速准确。
(1)M法:
测量计数在一定时间Tc内的信号脉冲数M。
譬如,Tc=1秒,计数值M=1200,则信号频率为1200Hz;
Tc=0.1秒,计数值M=1200,则信号频率为12000Hz。
显然,M法适用于高频信号的测量。
(2)T法:
测量一个完整脉冲的周期T,则此周期T的倒数就是待测频率。
譬如,测得T=0.1ms,则信号频率为10000Hz。
显然,T适用于低频信号测量。
(3)M/T法:
测量在一定时间Tc左右M个整数脉冲的完整周期T,则待测信号频率为M/T。
首先给定一个基本时间Tc,利用计数器测得Tc内的脉冲个数,设为M。
但是,一般情况下,在Tc结束时刻并不严格的与第M个脉冲结束时刻(即第M+1个脉冲上升沿时刻)相对应,因此,利用定时器测量出Tc结束时刻到第M个脉冲结束时刻的时间ΔT,则T=Tc+ΔT,于是可求频率。
2.频率测量参考方案
设采用M法,定时时间T=1秒,则计数值即为待测频率。
设频率计的测量频率范围为1Hz~65535Hz,则设计方案如下:
利用8253CT0和CT1级联作一秒定时器,利用8253CT2作待测信号脉冲计数器,在定时开始之时也开启计数器,在一秒定时到之时关闭计数器并读取计数值,此计数值即为频率。
参考程序流程如下:
置CT1定时初值
测量结束?
读CT2计数值并显示
一秒定时到?
置CT2定时初值
置CT2计数初值
8253初始化
END
5.方案设计及其说明
5.1硬件电路设计
硬件线路部分主要采用了几个学过的芯片,即8088,8253,8259,74LS138。
其工作过程如下:
利用8253芯片的CT1定时/计数器的OUT1端和CT0定时/计数器的CLK0端级联计时,CT2定时/计数器的CLK2端接收待测信号进行计数,OUTO端口将计时信号输出到8259芯片的IR7口产生中断。
中断产生后,从CT2中读出计数值转化成频率值由数码管显示。
若CLK2接收到的为高频率的脉冲,令计时为1s,即每秒产生一次中断,即OUT1生成10ms的方波,OUT0出来的是1s的方波。
利用M法可以知道,在下一个1s到来的时候可以测出1s经过的CLK2的基本脉冲数为M,则被测频率f=M,此时将M转换为十进制显示在数码管上即可。
若CLK2接收到的是低频率的脉冲,此时若计时仍为1s,则用M法无法测量,所以改设定中断时间为10s,即OUT1生成的依旧是10ms的方波,OUT0生成10s方波脉冲。
在下一个中断来临时,记下CLK2经过的脉冲数M个,所测的频率为:
f=M/10,转换为十进制显示在数码管上。
5.1.1计时部分
8253的CT0和CT1级联产生出1秒的方波。
基准时钟信号是CT1的CLK1自带的内部晶振1.8432MHZ。
CT1写入初值18432,令OUT1输出10ms的方波信号再输入给CLKO。
当待测信号为高频时,CT0写初值100从OUT0输出1s的脉冲时钟信号;
当待测信号为低频时,修改CT0的初值为1000令其输出10s的脉冲信号。
控制字如下:
CTO:
1
计数器0从低到高读写工作方式3二进制
CT1:
计数器1从低到高读写工作方式3二进制
5.1.2计数部分
用8253的CT2产生计数。
CLK2是待测信号脉冲的输入端。
OUT2悬空不接线。
初值定为65535,即从65535开始,每一个脉冲周期自减一。
CT2:
计数器2从低到高读写工作方式0二进制
5.1.3片选寻址部分
实验中用了8253和8259两片芯片。
故需要进行地址的片选。
8259的地址是FFE0H~FFE3H。
对应的各地址线如下:
A19~A9
A8
A7
A6
A5
A4
A3
A2
A1
A0
地址
1…1
FFE0H
FFE1H
FFE2H
FFE3H
对应的片选接74LS138的Y0口
8253的地址是FFF8H~FFFBH。
FFF8H
FFF9H
FFFAH
FFFBH
对应的片选接74LS138的Y6口
5.1.4中断部分
将8253的OUT0的计时信号给8259的IR7口产生中断。
写入控制字令接收到上升沿产生中断。
通过实验箱的内部已接好的输出电路给数码管显示。
5.1.5硬件线路图
74LS138
5.1.6操作时序图
每次中断之内经过的脉冲个数M,则被测频率F=M
CLK1:
(时基信号)
OUT1:
(10ms方波)
OUT0:
(1S方波)
(10S方波)
INTR1:
(1S中断)
INTR2:
(10S中断)
CLK2:
(被测信号)
5.2软件电路设计
项目作品的软件部分共划分为如下几个模块:
1.8253芯片定时模块
2.8253芯片计数模块
3.8259芯片中断模块
4.显示模块
5.2.1软件流程图
原程序:
结束
8259初始化子程序
RET
8253初始化子程序
开始
写CT0控制字
置CT0初值
写CT1控制字
置CT1初值
8259中断子程序
二进制-十进制转化子程序(高频)
初始化清零
SI←SI-1
是否除尽?
N
二进制-十进制转化子程序(低频)与高频流程类似,先显示最低位,再调用有小数点的数字显示带小数点位,最后显示高三位。
5.2.2源程序代码(见附页)
6.试验中出现问题及解决方法
刚开始课设时候小组出现两种方案,最后经过对比与讨论准备用第二种也就是做成功的这个方案,在实验硬件接线成功后进行测试时候发现测试不出来数据,最后经过反复研究,用示波器测波形,发现8253的CT0口出现问题,而CT1口可以正常产生1s方波,经过和孙老师研究后发现是8253芯片的问题,最后换箱子,结果换的新箱子数码管没有显示,最后经过一番折腾,再次换新箱子之后所有硬件才正常了,数码管正常显示。
在此期间,我们还对程序做了一点改进,因为刚开始受书本知识的影响,8253,8259地址都做成一个了,经过修改使其能用74LS138进行片选。
还有锁存程序也进行了改进。
7.实验结果及分析
用函数发生器给频率计输入方波信号,可较精确的测得信号频率。
测量范围为0.1Hz~65534Hz,经与函数发生器比较,测量误差为高频1Hz,低频0.1Hz。
部分测量结果如下表:
高频
待测(Hz)
65530
35562
6233
4211
3030
实测(Hz)
35561
4210
3031
低频
562.53
36.11
1.52
0.790
0.352
562.5
36.2
1.5
0.8
0.3
8.课程设计心得体会
微型计算机已经广泛应用于各行各业,促进了社会的进步。
作为今天的设计人员,必须很好的掌握微型计算机的概念与技术。
书本上学习的知识通常只是理论上的东西,而微机原理则是与实际结合很紧密的事情。
所以实践是必不可少的掌握所学内容的阶段。
微机原理课设是学校提供给我们的很好的理论与实际相结合从而把学习课程融会贯通的机会。
通过此次课设,加强了我们的动手,思索和解决问题能力。
熟悉了所常用的芯片比如8253,8259,74ls138等的应用,其中8259大纲的要求很少,通过课设,使我们掌握了中断的具体应用。
通过对程序的编译,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在课设完成过程中通过和同学的交流,也增加了合作的技巧。
通过查阅以下资料也学到了一些课本上没有的东西,拓宽了自己的知识面,更掌握了8086的调试环境
此次课设使我们又一次明白了团队合作的的重要性,遇到很多问题时,当我看书查资料不能解决时,这时去找同学讨论一下,收获很大,可以使很多问题迎刃而解,直到问题最终解决。
课设的成功离不开孙老师的悉心指导和组员们的共同努力。
再次感谢孙老师的指导!
附页:
源代码
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE,ES:
CODE
ORG3400H
H8:
JMPP8259
ZXKEQU0FFDCH
ZWKEQU0FFDDH
LEDDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;
0~9
DB040H,079H,24H,30H,19H,12H,02H,78H,00H,10H,0FFH;
0.~9.
BUF1DB?
BUFDB?
?
Port0EQU0FFE0H
Port1EQU0FFE1H
P8259:
CLI
CALLWP;
数码管初始状态为0
MOVAX,OFFSETINT8259
MOVBX,003CH
MOV[BX],AX
MOVBX,003EH
MOVAX,0000H
MOV[BX],AX;
以上是写中断向量表
CALLFOR8259;
对8259初始化设置
CALLFOR8253;
对8253初始化设置
CALLFOR8253X;
对频率范围进行设置
MOVSI,OFFSETBUF1
MOVAL,01H
MOV[SI],AL;
默认为高频
STI
PPP:
CALLDIS
JMPPPP;
循环显示等待中断
;
8259初始化
--------------------------------
FOR8259:
MOVAL,13H;
上升沿产生中断(ICW1)
MOVDX,Port0
OUTDX,AL
MOVAL,08H;
ICW2的设置
MOVDX,Port1
MOVAL,09H;
icw4的设置
MOVAL,07FH;
设置IR7为中断源,并且屏蔽其它的中断源
8253初始化(一秒信号)
------------------------------------
FOR8253:
MOVDX,0FFFBH
MOVAL,36H;
01110110CT1,方式3
MOVAL,76H;
00110000CT0,方式0,
MOVDX,0FFF9H
MOVAX,18432;
(6144)CT1产生10ms方波
MOVAL,AH
MOVDX,0FFF8H
MOVAX,100;
1000;
1s脉冲
OUTDX,Al
8253初始化(十秒信号)
FOR8253b:
MOVDX,0FFFBH
CT0,方式0
MOVAL,076H;
CT1,方式3
MOVDX,0FFF9H;
CT1
(18432)产生10ms方波
MOVDX,0FFF8H;
CT0
MOVAX,1000;
10s脉冲
RET
控制CT2计数,设置频率范围
-------------------------------------
FOR8253X:
MOVDX,0FFFBH;
控制口地址
MOVAL,0B0H;
CT2,方式0
MOVDX,0FFFAH;
CT2地址
MOVAX,65535;
T2计数的最大值
movcx,10;
延时
good:
loopgood
二——十进制转化(高频无小数点,利用了M法测量)
-----------------------------------
BTRO:
MOVCL,6
XORCH,CH
XORDX,DX
MOVBX,10
MOVSI,OFFSETBUF
ADDSI,5;
从低位到高位存储
NEXT:
DIVBX
MOV[SI],DL;
除以10的余数存放低位
DECSI
ANDAX,AX
JZSTOP;
判断是否除尽
MOVDL,0
LOOPNEXT
STOP:
-----------------------------------
二——十进制转化(低频有小数点,利用了T法测量)
BTROb:
MOVCL,3
使其从数码管的低位开始显示
MOV[SI],DL
MOVDL,0;
将存放余数的清0
ADDDL,10;
查表将该位的小数点显示出来
ANDAX,AX;
检测商是否为0,若为0程序跳出,否则继续
JZSTOP1
NEXT1:
LOOPNEXT1;
由于数码管只能显示5为,则CL=3
STOP1:
8259的中断子程序
INT8259:
PUSHAX
PUSHDX
PUSHBX;
断点保护
MOVAL,80H
OUTDX,AL;
给CT2置控制字,方便下面读取CT2接口的值
MOVDX,0FFFAH
INAL,DX
MOVBl,AL
INAL,DX
MOVBh,AL;
读取CT2的值,此时值为剩余的计数值
MOVAX,BX
MOVDX,65535
SUBDX,AX;
将读取CT2的值转化为频率值
MOVAX,DX
PUSHAX;
保护频率值
MOVBL,[SI]
CMPBL,1;
判断新频率进来之前的显示模式
JNZDIPIN;
低频跳转,高频继续向下执行
CMPAX,2000
JBOTHER;
若小于2000,测的频率为低频,跳转,否则继续向下
GOM:
CALLFOR8253X
CALLWP
POPAX
CALLBTRO;
将频率值转化为十进制,无小数
jmpx59
DIPIN:
cmpAX,20000;
低频时,判断是否为高频
JNBOTHER2;
大于2000则为高频,跳转
GOM2:
CALLFOR8253X
CALLWP
POPAX;
出栈
CALLBTROb;
将频率值转化为十进制,此时带有小数
JMPX59
OTHER:
CALLANTHER;
调用高频转低频程序,设定标志位和中断时间(10s)
jmpGOM
OTHER2:
CALLANTHER2;
调用低频转高频程序,设定标志位和中断时间(1s)
jmpGOM2
X59:
MOVAL,20H
中断响应后,将ISR相应位清0
MOVCX,0050H;
置循环显示的次数
XX59:
PUSHCX
CALLDIS;
调用显示程序,将频率值显示在数码管上
POPCX
LOOPXX59;
循环显示,直至下一次中断
POPBX
POPDX
断点回复
LAST:
IRET
DIS是显示子程序
-------------------------------
DIS:
MOVCL,20H;
准备好数码管位
MOVBX,OFFSETBUF
DIS1:
MOVAL,[BX]
PUSHBX
MOVBX,OFFSETLED
XLAT;
换码,在LED表里面换取数据
POPBX
MOVDX,ZXK;
输出字型位
MOVAL,CL;
输出字位位
MOVDX,ZWK
MOVCX,0100H
DELAY:
LOOP$
CMPCL,01H
JZEXIT
INCBX
SHRCL,1;
右移,显示下一个数码管
JMPDIS1
EXIT:
MOVAL,00H
初始化显示‘000000’
WP:
MOVBUF,0
MOVBUF+1,0
MOVBUF+2,0
MOVBUF+3,0
MOVBUF+4,0
MOVBUF+5,0
频率转化程序
ANTHER:
让高频转为低频(0)
callFOR8253b;
将中断时间设定位10秒