1、微机原理课设数字频率计的设计微机原理课设-数字频率计的设 计实验题目:数字频率计的设计1.设计目的通过数字频率计的设计,使同学们进一步掌握:(1)8086/8088 汇编语言程序的设计和调试;(2)信号频率的数字测量方法;(3)定时计数器8253的基本工作原理和应用;(4)微机基本应用系统的设计方法;2设计内容利用微机原理实验装置,设计并实现一个信号频率测试系统,要求频率测量范 围不小于5HZ50HZ,测量误差不大于1HZ,并将测得的频率显示在 LED数码显3设计要求(1)针对实验装置已有条件,设计频率测量原理线路;(2)编制相应的测试软件,实现频率测量;(3)实际上机调试,完成综合实验;(4
2、)编写设计说明书(含原理图,程序及说明,实验方法,过程及结果)4.方案设计及其说明4.1硬件电路设计在硬件电路部分我们主要采用的芯片有 8088, 8253, 8259, 74LS138等。基本工作原理如下:首先由8253芯片的定时/计数器CT1的OUT1端产生10ms的方波再将OUT1与 定时/计数器CT0的CLK0端级联使OUT(端产生1s (测高频)或10s (测低频)方 波计时,定时/计数器CT2的CLK2端接收待测信号进行计数,OUTO 口将计时信号 输出到8259芯片的IR7 口使8259芯片产生中断。中断产生后,CPU将从CT2中读 出计数值并转化为频率值并在数码管显示该频率值。
3、具体测量方法如下:当CLK2接收到的待测信号为高频率的脉冲信号时,令计时为 1s,即每秒产生一次中断,即OUT生成10ms的方波,OUTC出来的便是1s的方波。利用M法可以 知道,在下一个1s到来的时候可以测出1s经过的CLK2的基本脉冲数为M则被测 频率f=M,此时将M转换为十进制显示在数码管上即可。当CLK2接收到的待测信号为低频率的脉冲信号时,此时设定中断定时时间为 10s,即OUT1生成的依旧是10ms的方波,OUT0生成10s方波脉冲。在下一个中断 来临时,记下CLK2经过的脉冲数M个,利用T法可以知道所测的频率f=M/10,转 换为十进制显示在数码管上。4.1.1计时部分8253
4、的CTO和CT1级联产生出1秒的方波。基准时钟信号是 CT1的CLK1自带 的内部晶振1.8432MHZ当CT1写入初值18432时,OUT1即可输出10ms的方波信 号再输入给CLKO CT0写初值100( 1000)从OUT0俞出1s (10s)的脉冲时钟信号。 控制字如下:(CTO:00110110(定时/计数器0 先低8位再高8位读写 工作方式3 二进制CT1:01110110定时/计数器1 先低8位再高8位读写 工作方式3 二进制4.1.2计数部分用8253的CT2产生计数。CLK2是待测信号脉冲的输入端。OUT2悬空不接线 初值定为65535,即从65535开始,每一个脉冲周期自减
5、一。控制字如下:CT2:10110000定时/计数器2 先低8位再高8位读写 工作方式0 二进制4.1.3片选寻址部分实验中用了 8253和8259两片芯片。故需要进行地址的片选。8259的地址是FFE0H FFE3H对应的各地址线如下:A19A9A8A7A6A5A4A3A2A1A0地址11111100000FFE0H1111100001FFE1H11111100010FFE2H1-1111100011FFE3 H对应的片选接74LS138的丫0 口8253的地址是FFF8H FFFBH对应的各地址线如下:A19A9A8A7A6A5A4A3A2A1A0地址11111111000FFF8H111
6、1111001FFF9H1111111010FFFAH11111111011FFFBH对应的片选接74LS138的丫6 口4.1.4中断部分将8253的OUT0的计时信号给8259的IR7 口产生中断。写入控制字令接收到 上升沿产生中断。通过实验箱的内部已接好的输出电路给数码管显示。4.1.5硬件线路图(1)电路原理图825(2)完整电路图(见附页)4.1.6操作时序图CL 0K1: TOUT1:T1 = 18T2=1OUT0:OUT0INTR1:INTR2:CLK2:2软件电路设计软件部分共划分为如下几个模块:1.8253芯片定时模块2.8253芯片计数模块3.8259芯片中断模块4.显示模
7、块4.2.1软件流程图主程序:8259初始化子程序开始关中断循环显示断点恢复开中断二进制-十进制转化子程序(高频)(开始r初始化清零3 FSI 7+5JAX/10余数存入SISI * SI-1RET进制一十进制转化子程序(低频)NY422源程序代码(见附页)5.试验中出现问题及解决方法在实验硬件接线成功将完整程序装载后进行测试时候发现测试不出来数据 ,经过小组成员讨论认为可能是咼低频计算转换算法有冋题, 于是我们决定不论咼低频都用M法测量定时一秒发现测量结果是正确的,但误差过大,于是将定时时间设 为十秒,采用有小数点显示算法测量结果发现测量结果都是乱码,经过小组成员讨论认为是实验箱有问题于是换
8、了一台试验箱测试,结果发现当送给 CT2的待测信号是由74LS393的T6、T7给出的时,测量结果是正确的,但当由函数发生器给出 待测信号时测量结果是乱码,经过老师知道我们知道了函数发生器产生的方波信号 是由负值的需要调整才可产生正确的信号, 经调整函数发生器产生正确方波信号后 测得正确的结果。6.实验结果及分析用函数发生器给频率计输入方波信号,可较精确的测得信号频率。测量范围为0.1Hz 65534Hz,经与函数发生器比较,测量误差为高频 1Hz,低频0.1Hz部分测量结果如下表:咼频待测(Hz)4450531165259222036实测(Hz)4450631166259232035低频待测
9、(Hz)7.832.8121.91034.9实测(Hz)7.732.7121.81035.07.课程设计心得体会为期两周的微机原理课程设计结束了,在这两周的时间里使我学到了许多东西, 首先通过此次课设,加强了我们的动手、思索和解决问题的能力,也加深了对 在课本上所学理论知识的理解,特别是更加熟悉了对常用芯片比如 8253,8259,74LS138等的应用,同时在这次课设中也加深了我对汇编语言的理解更掌握了 8086的调试环境,使我能更好地将在课本上学到的的理论知识与实践相结合,同时在课设 过程中查阅了许多资料从而更加拓宽了我的知识面, 在这次课设中也使我更加熟练地掌握了示波器的运用,同时也学会
10、了函数发生器的使用。在这次课设中也使我更加明白了团队合作的重要性, 在课设过程中我们遇到了 许多问题但经过与组员们探讨都一一解决了, 课设的成功离不开组员们的配合与指 导老师的悉心指导,在此感谢各位组员的配合与老师的悉心指导。附页:源程序代码CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 3400HH8: JMP P8259ZXK EQU 0FFDCHZWK EQU 0FFDDHLED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;09DB 040H,079H,24H,30H,19H,12H,02H
11、,78H,00H,10H,0FFH ;0.9.BUF1 DB ? ; 定义缓冲区用于存放高低频的选择值;8259初始化JFOR8259:MOV AL,13H ;上升沿产生中断(ICW1)MOV DX,Port0OUT DX,ALMOV AL,08H ;ICW2的设置MOV DX,Port1OUT DX,ALMOV AL,09H ;ICW4的设置OUT DX,ALMOV AL,07FH ;设置IR7为中断源,并且屏蔽其它的中断源OUT DX,ALRETJ;8253初始化(一秒信号)FOR8253: MOV DX,0FFFBHMOV AL,36H ;0011 0110 CT0 ,方式 3OUT D
12、X,ALMOV AL,76H ;0111 0110 CT1 ,方式 3 ,OUT DX,ALMOV DX,0FFF9HMOV AX,18432 ;CT1 置初值 产生10ms方波OUT DX,ALMOV AL,AHOUT DX,ALMOV DX,0FFF8HMOV AX,100 ;CT0 置初值100产生1s定时信号OUT DX,AlMOV AL,AHOUT DX,ALRET;8253初始化(十秒信号);控制CT2计数,设置频率范围FOR8253X: MOV DX,0FFFBH 控制口地址MOV AL,0B0H ;CT2 ,方式 0OUT DX,ALMOV DX,0FFFAH ;CT2 地址M
13、OV AX,65535 ;T2 计数的最大值OUT DX,ALMOV AL,AHOUT DX,ALMOV CX,10 ;延时GOOD: LOOP GOODRET卜进制转化(高频无小数点,利用了 M法测量)BTRO: MOV CL,6XOR CH,CHXOR DX,DXMOV BX,10MOV SI,OFFSET BUFADD SI,5 ; 从低位到高位存储NEXT: DIV BXMOV SI,DL ; 除以10的余数存放低位DEC SIAND AX,AXJZ STOP ; 判断是否除尽MOV DL,0 ; 将存放余数的清零LOOP NEXTSTOP: RET卜进制转化(低频有小数点,利用了 T
14、法测量)BTROb:MOV CL,3XOR CH,CHXOR DX,DXMOV BX,10MOV SI,OFFSET BUFADD SI,5 ; 使其从数码管的低位开始显示DIV BXMOV SI,DLDEC SIMOV DL,0 ; 将存放余数的清0DIV BXADD DL,10 ; 查表将该位的小数点显示出来MOV SI,DLDEC SIAND AX,AX ; 检测商是否为0,若为0程序跳出,否则继续JZ STOP1MOV DL,0NEXT1: DIV BXMOV SI,DLDEC SIAND AX,AXJZ STOP1MOV DL,0LOOP NEXT1 ; 由于数码管只能显示5位,贝U
15、 CL=3STOP1: RET ;8259的中断子程序INT8259: PUSH AXPUSH DXPUSH BX ; 断点保护CLIMOV DX,0FFFBHMOV AL,80HOUT DX,AL ; 锁存CT2的值,方便下面读取CT2接口的值MOV DX,0FFFAHIN AL,DXMOV BI,ALIN AL,DXMOV BH,AL ; 读取CT2的值,此时值为剩余的计数值MOV AX,BXMOV DX,65535SUB DX,AX ; 将读取CT2的值转化为频率值MOV AX,DXPUSH AX ; 保护频率值MOV SI,OFFSET BUF1MOV BL,SICMP BL,1 ;
16、判断新频率进来之前的显示模式JNZ DIPIN ; 低频跳转,高频继续向下执行CMP AX,2000JB OTHER ; 若小于2000,测的频率为低频,跳转,否则继续向下GOM: CALL FOR8253XCALL WPPOP AXCALL BTRO ; 将频率值转化为十进制,无小数JMP X59DIPIN: CMP AX,20000 ;低频时,判断是否为高频JNB OTHER2 ; 大于20000贝U为高频,跳转GOM2: CALL FOR8253XCALL WPPOP AX ;CALL BTRObJMP X59OTHER: CALL ANTHER ;调用高频转低频程序,设定标志位和中断时
17、间(10s)JMP GOMOTHER2: CALL ANTHER2调用低频转高频程序,设定标志位和中断时间(1s) JMP GOM2X59: MOV AL,20HMOV DX,Port0OUT DX,AL ;MOV CX,0050H ;XX59: PUSH CXCALL DIS ;POP CXLOOP XX59 ;POP BXPOP DXPOP AX ;LAST: STIIRET出栈将频率值转化为十进制,此时带有小数中断响应后,将ISR相应位清0 置循环显示的次数调用显示程序,将频率值显示在数码管上循环显示,直至下一次中断断点回复;DIS是显示子程序DIS: MOV CL,20H ;MOV B
18、X,OFFSET BUF DIS1: MOV AL,BXPUSH BXMOV BX,OFFSET LED XLAT ;POP BXMOV DX,ZXK ;OUT DX,ALMOV AL,CL ;MOV DX,ZWKOUT DX,ALPUSH CXMOV CX,0100HDELAY: LOOP $准备好数码管位换码,在LED表里面换取数据输出字型位输出字位位POP exCMP CL,01HJZ EXITINC BXSHR CL,1 ; 右移,显示下一个数码管JMP DIS1EXIT: MOV AL,00HMOV DX,ZWKOUT DX,ALRET ;初始化显示 000000WP: MOV BUF,0MOV BUF+1,0MOV BUF+2,0MOV BUF+3,0MOV BUF+4,0MOV BUF+5,0RET;频率转化程序ANTHER: MOV SI,OFFSET BUF1MOV AL,00HMOV SI,AL ; 让高频转为低频call FOR8253b ; 将中断时间设定位10秒RETANTHER2: MOV SI,OFFSET BUF1MOV AL,01HMOV SI,AL ; 让低频转为高频call FOR8253 ; 将中断时间设定位1秒RETCODE ENDSEND H8
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1