微机原理课设.docx
《微机原理课设.docx》由会员分享,可在线阅读,更多相关《微机原理课设.docx(37页珍藏版)》请在冰点文库上搜索。
微机原理课设
1数字频率计设计原理
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法测量频率,即测量计数在一定时间Tc内的信号脉冲数M。
譬如,Tc=1秒,计数值M=1200,则信号频率为1200Hz;Tc=0.1秒,计数值M=1200,则信号频率为12000Hz。
TD-PITE试验箱上芯片8254的CLK0接系统频率1MHz,因此,我使用8254通道0作分频器,对输入的信号进行分频,OUT0接通道1的CLK1,利用通道1进行计数。
利用延时程序每秒产生一次中断,没中断一次读一次通道1的计数值,用初值与当前计数值相减得到1秒钟计数脉冲个数,将这个差值直接送往数码管显示。
即为测量频率。
本设计能测量65535Hz以下的频率,误差小于1Hz,达到设计要求。
注:
本系统只是简单的方波频率测量,没有进一步考虑测量正弦波、三角波、锯齿波等波形的频率,如果要测量这些波形,还须添加放大整形电路。
2程序流程图
3器件的功能简介
3、18086简介
由于此系统最终要在西安唐都科教仪器出品的32位微机机教学实验系统TD-PITE/PITC上进行实验,故设计硬件配置时采用Intel8086,整个实验的硬件配置都以此为原则进行设计选用。
Intel8086是16位的微处理器(理论学习中为8088,其内部总线为16位,外部总线为8位,故称为准16位微处理器),它采用HMOS工艺40条引脚封装。
8086工作时使用5V电源,时钟频率5MHz(8086-1为10MHz,8086-2为8MHz)它有20根地址线,故可寻址的内存空间为1MB。
3.1.18086主要特性
Intel8086/8088CPU是Intel公司推出的高性能的微处理器,具体如下主要特性:
(1)8086CPU数据总线为16位,8088CUP数据总线为8位。
(2)地址总线都是20位,低16位用于数据总线复用,可直接寻址为1MB的存储空间。
(3)有16位的端口地址,可以寻址64KB的I/O端口。
(4)有99条基本指令,指令功能强大
(5)有9种基本寻址方式。
(6)可以处理内部和外部中断,外部中断源多达256个。
(7)兼容性好,与80*86,8085在源程序一级兼容。
(8)8086/8088标准主频为5MHz,8086/8088-2主频为8MH。
(9)支持单处理器或多处理器系统工作。
3.1.28086CPU寄存器结构
8086CPU中有14个16位的寄存器,其中有4个16位的通用寄存器,2个16位指针寄存器,2个16位变址寄存器,1个16位指令指针及1个16位标志寄存器。
通用寄存器包括累加器AX,基址寄存器BX,计数寄存器CX,数据寄存器DX四个寄存器,位于CPU的EU中,每个数据寄存器可存放16位操作数,也可拆成两个8位寄存器,用来存放8位操作数。
指针和变址寄存器包括:
堆栈指针SP、基址指针BP、源变址寄存器SI、和目的变址寄存器DI四个16位寄存器,可以来存放数据和地址。
段寄存器包括:
代码段寄存器CS,用于存放当前代码段的段地址;数据段寄存器DS,用于存放当前数据段的段地址;附加段寄存器ES,用于存放当前附加段的地址;堆栈段寄存器SS,用于存放当前堆栈段的段地址。
这些段寄存器彼此不能互换,每个段寄存器在8086存储寻址空间中规定了64KB的存储快。
该64KB存储快叫做段寄存器的当前段。
专用寄存器包括指令指针寄存器(IP)和标志寄存器(FR)。
3、28255简介
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种工作方式下工作,下面将具体说明这三种工作方式:
方式0—基本输入/输出方式;
方式1—选通输入/输出方式;
方式2—双向选通输入/输出方式。
3.2.18255工作方式
工作方式分别为工作方式0,工作方式1和工作方式2。
1、工作方式0,又称为基本工作方式。
在此方式下,可分别将A口的8条线,B口的8条线,C口高4位对应的4条线和C口的低四位对应的四条线定义为输入或输出。
故它们的输入输出共有16种不同的组合。
A组
B组
A口(PA0---PA7)
C口(PC4---PC7)
B口(PB0---PB7)
C口(PC0---PC3)
入
入
入
入
入
入
入
出
入
入
出
入
入
入
出
出
入
出
入
入
入
出
入
出
入
出
出
入
入
出
出
出
出
入
入
入
出
入
入
出
出
入
出
入
出
入
出
出
出
出
入
入
出
出
入
出
出
出
出
入
出
出
出
出
表3.18255输入输出组合
2:
工作方式1,既选通输入输出方式。
在这种方式下,A口和B口仍作为数据的输出口和输入口,同时还要利用C口的某些位作为控制和状态信号。
3:
工作方式2,又称双向输入输出方式。
这种方式只有8255的口A才有。
在A口工作于双向输入输出方式时,要利用C口的5条线才能实现。
因此,B口只能工作在工作方式0或工作方式1,而C口剩下的3条线可以作为输入输出线使用或B口方式1下的控制线。
3.2.28255的控制字
7
6
5
4
3
2
1
0
控制C口抵4位
1:
输入
0:
输出
控制B口8位
1:
输入
0:
输出
方式选择
0:
方式0
1:
方式1
控制C口高4位
0:
输出
1:
输入
控制A口8位
0:
输出
1:
输入
方式选择
00:
方式0
01:
方式1
1X:
方式2
功能控制
0:
位操作
1:
方式选择
图3.18255的控制字格式
说明:
当控制字BIT7=1时,控制字的BIT6~BIT3这4位用来控制A组,即A口的8位和C口的高4位,而控制字的低3位BIT2~BIT0用来控制B组,包括B口的8位和C口的低4位。
8255的C口具有位控功能,即端口C的8位中的任一位都可通过CPU向8255的控制寄存器写入一个按位置位/复位控制字来置1或清0,而C口中其他位的状态不变。
其格式注意8255的C口按位置位/复位控制字的最高位D7(特征位)应为0。
‘图3.2C口按位置位/复位控制字格式
3、38254简介
8254是Intel公司生产的可编程计时器,具有以下功能:
(1)有3格独立的16位计数器;
(2)每个计数器可按二进制或十进制计数;
(3)每个计数器可编程工作于6种不同工作方式;
(4)8254每个计数器允许的最高计数频率为10MHZ;
(5)8254有读回命令,除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容;
(6)计数脉冲可以是有规律的时钟信号,也可以是随机信号。
3.3.18254的内部结构
图3.38254的内部结构图
A0、A1为8254的内部计数器和一个控制寄存器的编码选择信号,其功能如下:
A1
A0
选择
0
0
计数器0
0
1
计数器1
1
0
计数器2
1
1
控制寄存器
表3.28254内部编码
CLK0是计数器的时钟输入端。
本次设计的时钟为1MHZ,计数器对此时钟信号进行分频。
GATE0门控信号,即计数器的控制输入信号,用来控制计数器的工作,这里使其为高电平,直接接系统5V。
OUT计数器输出信号,用来产生不同方式工作时的输出波形,本次设计的1ms方波由此输出。
3.3.28254的工作方式
(1)方式0:
计数到0结束输出正跃变信号方式。
(2)方式1:
硬件可重触发单稳方式。
(3)方式2:
频率发生器方式。
(4)方式3:
方波发生器。
(5)方式4:
软件触发选通方式。
(6)方式5:
硬件触发选通方式。
3、48259简介
8259是一种可编程的中断控制器。
每块芯片可管理8级向量中断,同时,可通过多片级连实现多达64级的中断管理。
中断控制器8259有四种主要工作方式,即全嵌套、循环优先级、特定屏蔽和程序查询方式。
同时,它还有一4种从属工作方式,即结束中断、读状态、中断请求触发和数据缓冲方式。
3.4.18259的工作方式
(1)特殊屏蔽方式
在正常情况下,当一个中断请求被响应时,8259将被禁止所有同级及更低优先级中断请求这就称为一般屏蔽方式。
但是,在一特殊情况下,希望也允许较低优先级的中断请求产生中断。
(2)中断结束
中断结束分自动结束和利用命令结束
(3)优先级循环
它有两种优先级规定:
循环优先级和固定优先级。
固定优先级规定8个中断源以IR0的优先级最高依次降低。
循环优先级有3个结构:
自动优先级循环用于中断源具有相等优先级的情况。
指定优先级循环可以利用命令一次性改变优先级。
自动结束方式下的优先级循环,其优先权控制方式与自动优先级循环的相同。
(4)查询状态
通过将操作命令字OCW3中的P位置1,可以查询8259的状态。
3.4.28259的内部控制字
8259工作之前必须通过CPU来命令它。
CPU命令分为两大类:
一类是初始化命令字(ICW),主要是为了让8259处于初始化状态;另一类是操作命令字(OCW),使初始化的8259去执行具体的某种操作方式。
⑴初始化命令字
1初始化命令字ICW1(写入偶地址)
1
LTIM
A
S
IC4
1:
需要ICW4
0:
不需要ICW4
1:
单片8259
0:
多片8259级联
1:
间隔为4
0:
间隔为8
1:
电平触发
0:
边沿触发
8080/85模式下,中断
低口低8编程位
图3.48259初始化命令字ICW1
②初始化命令字ICW2(写入奇地址)
8086/88模式下,仅用ICW2提供不同中断源的中断向量码。
当中断响应时,根据中断向量表获得入口地址。
③初始化命令字ICW3(写入奇地址)
该命令字用于多片8259的级联。
1:
相应IR接从属8259
0:
不接8259
主控ICW3
0
0
0
0
0
3位编码对应从属
8259接主控的IR编号
从属ICW3
图3.58259初始化命令字ICW3
④初始化命令字ICW4(写入奇地址)
0
0
0
SFNM
BUF
M/S
AEOI
PM
1:
8086/88模式
0:
8080/85模式
1:
自动EOI
0:
非自动结束
0X:
非缓冲方法
10:
缓冲方式/从属片
11:
缓冲方式/主控片
1:
特殊全嵌套方式
0:
一般嵌套方式
图3.68259初始化命令字ICW4
[2]操作命令字OCW(可单独使用)
对8259初始化之后,该芯片就进入工作状态,准备好接收IR端进入的中断请求。
1操作命令字OCW1(写入奇地址)
它用于设置对8259中断的屏蔽操作。
该八位的操作字的某一位为1时,它就屏蔽相对应的IR输入。
2操作命令字OCW2(写入偶地址)
该命令字用来设置优先级是否循环、循环的方式及中断结束的方式。
R
SL
EOI
0
0
L2
L1
L0
编码对应IR的
最低优先级
001一般EOI
011特殊EOI中断结束命令
101循环优先级的一般EOI命令
100在自动EOI下置循环优先级自动循环
000在自动EOI下清循环优先级
111循环优先级的特殊EOI命令
110设置优先级特殊循环
01无效
图3.78259初始化命令字OCW2
4频率计设计原程序及注解
SSTACKSEGMENTSTACK
DW64DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE,ES:
CODE,SS:
SSTACK
ORG3400H
H8:
JMPP8259
LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH;0~9
BUFDB?
?
?
?
?
?
;六位数码管
P8259:
CLI
CALLWP;初始化显示“000000”
MOVAX,OFFSETMIR7;中断IR7入口地址
MOVBX,003CH;IR7偏移地址
MOV[BX],AX
MOVBX,003EH
MOVAX,SEGMIR7;IR7段地址
MOV[BX],AX
CALLFOR8259;对8259初始化设置
CALLFOR8254;对8254初始化设置
CALLFOR8255;对8255初始化设置
MOVDX,0604H;给中断一个低电平
MOVAL,00H
OUTDX,AL
CALLFOR8254X;对频率范围进行设置
CALLDIS;调用显示子程序
STI
CALLDELAY1;延时1s
MOVDX,0604H;启动中断
MOVAL,01H
OUTDX,AL
PPP:
CALLDIS
JMPPPP
;==============================================
;对8259进行初始化
;--------------------------------
FOR8259:
MOVAL,13H;写入ICW1,边沿触发,间隔8,单片,需要ICW4
OUT20H,AL
MOVAL,0FH;ICW2,中断向量码
OUT21H,AL
MOVAL,09H;ICW4,一般全嵌套,缓冲,非自动结束
OUT21H,AL
MOVAL,07FH;IR7为中断入口,屏蔽其他
OUT21H,AL
RET
;==============================================
;对8254进行初始化
;---------------------------------------------------------
FOR8254:
MOVDX,06C6H
MOVAL,36H;T0,高->低,方式3,二进制
OUTDX,AL
MOVDX,06C0H;T0对输入频率分频
MOVAX,10000
OUTDX,AL
MOVAL,AH
OUTDX,AL
RET
;==============================================
;对8255进行初始化
;-------------------------
FOR8255:
MOVAL,80H;A,B,C口作为输出
MOVDX,0606H
OUTDX,AL
RET
;==============================================
;对频率范围设置
;-------------------------
FOR8254X:
MOVDX,06C6H;设置T1,高->底,方式0,二进制
MOVAL,70H
OUTDX,AL
MOVDX,06C2H;T1计数的最大值
MOVAX,65535
OUTDX,AL
MOVAL,AH
OUTDX,AL
MOVCX,10;延时
WAIT1:
LOOPWAIT1
RET
;==============================================
;二——十进制转化
;---------------------------------------
BTRO:
MOVCL,5
XORCH,CH
XORDX,DX
MOVBX,10
MOVSI,OFFSETBUF
ADDSI,5;由低位到高位存储
NEXT:
DIVBX
MOV[SI],DL;除以10的余数存放低位
DECSI
ANDAX,AX
JZSTOP;判断是否除尽
MOVDL,0
LOOPNEXT
STOP:
RET
;==============================================
;8259中断子程序
;------------------------------------
MIR7:
PUSHAX;断点保护
PUSHDX
PUSHBX
STI;开中断
MOVDX,06C6H;将计数器锁存
MOVAL,40H
OUTDX,AL
MOVDX,06C2H;读T1锁存器值
INAL,DX
MOVBL,AL
INAL,DX
MOVBH,AL
MOVAX,BX;计数值放在AX
MOVDX,65535;将计数值转化为频率值
SUBDX,AX;65535-计数值=通过脉冲个数
MOVAX,DX
PUSHAX;压栈保存等待显示
CALLFOR8254X
CALLBTRO
POPBX;出栈,恢复中断前数据
POPDX
POPAX
LAST:
STI
IRET
;==============================================
;显示子程序DIS
;-------------------------------
DIS:
PUSHAX
PUSHBX
PUSHSI
MOVDX,0600H
MOVAX,SEGLED
MOVDX,AX
MOVBX,OFFSETLED
MOVAX,0
MOVAL,BUF+5
MOVSI,AX
MOVAL,[BX+SI]
OUTDX,AL
MOVDX,0602H
MOVAL,0FEH
OUTDX,AL
MOVDX,0600H
MOVAX,SEGLED
MOVDX,AX
MOVBX,OFFSETLED
MOVAX.0
MOVAL,BUF+4
MOVSI,AX
MOVAL,[BX+SI]
OUTDX,AL
MOVDX,0602H
MOVAL,0FDH
OUTDX,AL
MOVDX,0600H
MOVAX,SEGLED
MOVDX,AX
MOVBX,OFFSETLED
MOVAX,0
MOVAL,BUF+3
MOVSI,AX
MOVAL,[BX+SI]
OUTDX,AL
MOVDX,0602H
MOVAL,OFBH
OUTDX,AL
MOVDX,0600H
MOVAX,SEGLED
MOVDX,AX
MOVBX,OFFSETLED
MOVAX,0
MOVAL,BUF+2
MOVSI,AX
MOVAL,[BX+SI]
OUTDX,AL
MOVDX,0602H
MOVAL,0F7H
OUTDX,AL
MOVDX,0600H
MOVAX,SEGLED
MOVDX,AX
MOVBX,OFFSETLED
MOVAX,0
MOVAL,BUF+1
MOVSI,AX
MOVAL,[BX+SI]
OUTDX,AL
MOVDX,0602H
MOVAL,0EFH
OUTDX,AL
MOVDX,0600H
MOVAX,SEGLED
MOVDX,AX
MOVBX,OFFSETLED
MOVAX,0
MOVAL,BUF
MOVSI,AX
MOVAL,[BX+SI]
OUTDX,AL
MOVDX,0602H
MOVAL,0DFH
OUTDX,AL
POPSI
POPBX
POPAX
RET
;==============================================
;初始化显示“000000”
;--------------------------------
WP:
MOVBUF,0;初始化显示“000000”
MOVBUF+1,0
MOVBUF+2,0
MOVBUF+3,0
MOVBUF+4,0
MOVBUF+5,0
RET
;==============================================
;延时1s子程序
;==============================================
DELAY1:
PUSHCX
PUSHAX
MOVCX,0006H
T1:
MOVAX,009FH
T2:
DECAX
JNZT2
LOOPT1
POPAX
POPCX
RET
CODEENDS
ENDH8
5频率计程序接线图
芯片8254系统总线芯片8255LED数码管
D0PB0
D1PB1
D2PB2
D3PB3
D4PB4
D5PB5
D6PB6
D7
WRPA0
RDPA1
CSPA2
A0PA3
A1