占空比可调的脉冲发生器.docx
《占空比可调的脉冲发生器.docx》由会员分享,可在线阅读,更多相关《占空比可调的脉冲发生器.docx(17页珍藏版)》请在冰豆网上搜索。
![占空比可调的脉冲发生器.docx](https://file1.bdocx.com/fileroot1/2023-5/18/ef6d2da1-fd6a-49c5-a11b-fa7f2e1b0340/ef6d2da1-fd6a-49c5-a11b-fa7f2e1b03401.gif)
占空比可调的脉冲发生器
沈阳航空航天大学
课程设计报告
课程设计名称:
微机系统综合课程设计
课程设计题目:
占空比可调的脉冲发生器
院(系):
计算机学院
专业:
计算机科学与技术
班级:
学号:
姓名:
指导教师:
张维君
完成日期:
2012年7月15日
第1章总体设计方案
1.1课程设计的内容和要求
一、课程设计内容:
具体内容如下:
1.用8255和8253产生脉宽可调的脉冲信号;
2.用实验箱上键盘中的两个按键调节脉冲;
3.按脉宽增加键脉宽逐渐增大,按脉宽减小键脉宽逐渐减小;
二、课程设计要求:
1.认真查阅相关资料;
2.独立设计、调试并通过指导教师现场验收;
3.撰写课程设计报告。
1.2课程设计原理
根据课设要求,要实现通过键盘按键调节脉宽的脉冲信号发生器。
本次设计中主要使用了8259可编程中断控制器,8255可编程并行接口芯片,8279键盘/显示芯片,8253定时/计数器以及部分连线来实现以上功能。
利用8253芯片产生一定频率的脉冲信号,并用8255芯片以程序查询方式,检测该信号上高、低电平的持续时间,还要利用8259芯片的中断信号扫描信号,通过改变高电平的持续时间来调节占空比。
最后,应用8279芯片将结果显示到数码管上。
1.3方案设计
根据本次课程设计要求,用8253芯片计数器0产生低频率的方波信号,然后叠加一个矩形波,使之成为一个改变分频就可以改变占空比的矩形波。
再将该矩形波作为计数器1产生的输入信号,使计数器1产生脉宽可调的脉冲信号,并把该脉冲信号接到8255的一个引脚(PB0),运用程序查询方式循环检测这个引脚高、低电平持续时间。
利用芯片8259的中断功能循环扫描芯片8253计数器1的分频数,通过分频数计算占空比的值。
在BX中存放分频数NUM,在CX中存放(NUM-1)。
然后,将BX中的数扩大100倍,再除以CX中的值,以此来计算出被扩大100倍后的占空比;接下来就是显示正确的占空比,将前面得到的准占空比除以10,再将AH中的结果存到CH中,将AL中的结果存到CL中,最后,由8279芯片将最终结果显示到数码管上。
1.4方案论证
通过仔细阅读课程设计任务书,对本次课程设计所要完成的题目和要求要充分理解,从以下两方面进行方案论证。
◆对预设使用的芯片进行论证
8253可编程定时/计数器的功能:
一是作为计数器,即在设置好计数初值后,便开始对外部脉冲作减1操作,当减为0时,输出一个信号;二是作为定时器,在设置好定时参数后,便开始对外部信号作减1操作,并按定时常数不断地输出为时钟周期整数倍的定时间隔。
8255A是可编程并行输入输出接口芯片,具有三个8位并行端口,40个引脚,双列直插式封装。
有三种输入输出方式,用于输出给定信号。
8259A是可编程中断控制器芯片,用于管理和控制80x86的外部中断请求,坑人可实现中断优先级判定,提供中断信号,屏蔽中断输入等功能。
8279是可编程键盘/显示接口芯片。
它的功能主要包括键盘输入和显示控制
部分,其中键盘部分提供扫描功能。
显示部分则是提供扫描方式的显示接口,可与8位或16位LED数码管连接构成。
◆对预设计的程序进行论证
用小灯测试8253芯片产生的脉冲信号的频率,已达到设计中所要求的低频率信号。
逐步测试数据采集模块,计算占空比模块,显示模块。
经过认真仔细论证,证明所提出的方案切实可行。
1.5设计环境
软件环境:
LCT88EA应有软件、Win2000、PC机
硬件环境:
AEDK实验箱
第2章详细设计方案
2.1模块设计
1.主模块:
在主程序中,主要实现各个芯片的初始化,将8253芯片的计数器0设置为工作方式3,低8位读写,二进制计数方式,使其输出方波在与一个矩形波叠加产生新的矩形波。
,再将该矩形波作为计时器1的输入信号,并将计数器1设置为工作方式2,低8位读写,十进制计数方式,使计数器1产生低频率符合要求的脉冲信号;
2.数据结构部分:
用BX寄存器存储当前的分频数,用CX寄存器存储当前分频数减一数。
在内存中开辟了一个字节空间DISBUF,用来存放每种模式所要显示的结果在TAB表中的编码,在中断服务程序中通过按照这个空间中的8个编码查表显示数码管上所要显示的结果。
3.数据采集模块:
采用程序查询方式,循环检测8253芯片计数器1的分频状态。
记录当前分频数NUM,并保存到BX寄存器。
4.计算占空比模块:
将BX中的数减一得到的数存入CX中,然后,将BX中的数乘以100,再除以CX中的值,以此来计算出被扩大100倍后的占空比;接下来就是显示正确的占空比,将前面的到的准占空比除以10,再将AH中的结果存到CH中,将AL中的结果存到CL中。
5.显示模块:
根据CH、CL中的值,由8279芯片查表后将对应的数据显示到数码管上,以得到最后的正确结果。
2.2程序流程图
本次设计的主流程图如图2.2.1所示;采集数据模块流程图如图2.2.2所示;
计算占空比模块流程图如图2.2.3所示;显示占空比模块流程图如图2.2.4所示。
图2.2.1占空比测量的主流程图
图2.2.2数据采集模块流程图图2.2.3计算占空比模块流程图
图2.2.4显示模块流程图
2.3硬件连线图
本次设计用到四个芯片,分别是8259可编程中断控制器,8255可编程并行接口芯片,8279键盘/显示芯片,8253定时/计数器。
其中8255芯片的A、B、C端口及控制端口的地址为分别为200H,201H,202H,203H;键盘/显示芯片8279的数据端口地址为210H,控制端口地址为212H;定时/计数器芯片8253的端口地址为228-22BH。
芯片8259的端口地址为220H具体连接情况如图2.2所示。
图2.2硬件连线图
第3章调试及结果分析
3.1调试步骤及方法
在开始的时候,每次都没有结果显示。
于是通过单步调试,通过查看各个寄存器中的值,来验证各模块是否正常跳转以及模块的正确性。
结果,在数据中断中没有中断产生。
经过调试,可以正常显示预定的占空比的值,但是无法对占空比进行调节。
经过思考发现,问题出在数据显示模块,每次显示完第一次预定的值以后没有对数码管进行清空,所以显示出现问题。
之后,修改程序,在每次显示之前对数码管进行清空操作。
问题得到解决。
进一步修改,在计算模块中,将BX寄存器中的值乘以100后得到的结果存到AX寄存器中,用DX:
AX做被除数,防止因BX中数值过大而使AL寄存器产生溢出而得到的不正确的结果。
修改后,再次测试,则可以得到稳定而且正确的结果,误差很小。
3.2实验结果
本设计已经基本满足任务书的要求。
现将结果简单介绍如下:
1.当将计数器1的初值赋为5,即产生五分频的脉冲信号时,数码管显示结果为0.80;
2.当按下实验箱上的”+”时,显示的占空比值增加,向1逼近。
3.当按下实验箱上的”-”时,显示的占空比值减小。
向0.5逼近。
3.3结果分析
由实验结果可知,由8253产生的方波最小的占空比的值为0.5。
方波和矩形波叠加之后应该可以产生占空比小于0.5的值,但是此程序没有实现这个功能,有待提高。
参考文献
[1]龚尚福.微机原理与接口技术[M].西安:
西安电子科技大学出版社,2003
[2]王忠民.微型计算机原理[M].西安:
西安电子科技大学出版社,2003
[3]沈美明,温冬婵.IBM-PC汇编语言程序设计[M].北京:
清华大学出版,2001
附录(源程序)
TIM_CTLEQU22bH
TIMER0EQU228H
TIMER1EQU229H
TIMER2EQU22AH
PC8255EQU203H
PC8255CEQU202H
PC8255BEQU201H
Z8279EQU212H
D8279EQU210H
LEDMODEQU00H;左边输入,八位显示外部译码八位显示
CODESEGMENT
ASSUMECS:
CODE
START:
JMPS
NUMDB5
S:
cli
MOVDX,Z8279;置空FIFO寄存器
MOVAL,0c2H
OUTDX,AL
CALLINIT8253
CALLINIT8259
MOVDX,TIM_CTL
MOVAL,00010110B;计数器0,低8位读写,工作方式3,二进制
OUTDX,AL
MOVAL,00000101B
MOVDX,TIMER0
OUTDX,AL
MOVDX,TIM_CTL
MOVAL,01010101B;计数器1,低8位读写,工作方式2,十进制
OUTDX,AL
MOVAL,NUM
MOVDX,TIMER1
OUTDX,AL
MOVDX,PC8255
MOVAL,10000010B;A方式0,输出B方式0,输入C输出
OUTDX,AL
MOVDX,PC8255B
MOVBX,0
MOVCX,0
CALLDISPLAY
movdx,223h
outdx,al
moval,30h
outdx,al
STI
JMP$
A1:
NOP
JMPA1
INIT8259:
MOVAL,13H
MOVDX,220H
OUTDX,AL
MOVDX,221H
MOVAL,30H
OUTDX,AL
MOVAL,03
OUTDX,AL
MOVAL,0FEH;ocw1
OUTDX,AL
INAL,DX
MOVAX,0
MOVDS,AX
MOVSI,30H*4
MOVAX,OFFSETINTR1
MOV[SI],AX
MOVAX,CS
MOV[SI+2],AX
ret
INIT8253:
pushAX
MOVDX,TIM_CTL
MOVAL,00010110B;计数器0,低8位读写,工作方式2,二进制
OUTDX,AL
MOVAL,00000101B
MOVDX,TIMER0
OUTDX,AL
MOVAL,10110101B
MOVDX,TIM_CTL
OUTDX,AL
MOVAX,6144
MOVDX,TIMER2
OUTDX,AL
MOVAL,AH
OUTDX,AL
POPAX
RET
intr1:
callreadkey
CMPAL,12H;是减小
JEdown
CMPAL,13H
JEup
iret
DOWN:
JMPA
UP:
INCNUM
INCNUM
JMPA
RET
A:
MOVDX,Z8279;置空FIFO寄存器
MOVAL,0c2H
OUTDX,AL
CALLDISPLAY
IRET
readkey:
MOVDX,Z8279;置空FIFO寄存器
MOVAL,0C2H
OUTDX,AL
WAIIT:
NOP
MOVAX,0
INAL,DX
MOVBL,AL
ANDAL,80H
CMPAL,80H
JEWAIIT;FIFO正在清除期间则跳转等待
MOVAL,BL
ANDAL,0FH
CMPAL,00H
JEWAIIT;无键按下则等待
MOVDX,Z8279
MOVAL,82H;置读FIFORAM命令字
OUTDX,AL
MOVDX,D8279;读入FIFORAM内容
INAL,DX
ret
DISPLAY:
MOVCX,00H
MOVBX,00H
MOVDX,0
MOVCL,NUM
DECNUM
MOVBL,NUM
MOVAX,100
MULBX
DIVCX
MOVCL,10
DIVCL
MOVCH,AH;个位
MOVCL,AL;十位
PUSHCS
POPDS
MOVDX,Z8279;置空FIFO寄存器
MOVAL,0C2H
OUTDX,AL
MOVDX,Z8279
MOVAL,LEDMOD
OUTDX,AL
MOVAL,90H
OUTDX,AL
MOVAL,CH
LEABX,LED
XLAT
MOVDX,D8279
OUTDX,AL;显示个位
MOVAL,CL
LEABX,LED
XLAT
MOVDX,D8279
OUTDX,AL;显示十位
MOVAL,10111111b
MOVDX,D8279
OUTDX,AL;显示小数点
RET
LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H
DB5EH,79H,71H
CODEENDS
ENDSTART
课程设计总结:
上个学期的微机原理课程结束以后,对所学的知识朦朦胧胧,缺乏实践的考验。
通过本次课程设计,我对微机原理的理论知识有了更加深刻的理解,增强了动手能力。
对所学的各芯片,尤其是8259,8253,8255,8279这四个芯片的结构、功能和使用方法有了更加清晰的认识。
通过编写和调试程序,我也进一步熟悉了所用的编程环境LCT88EA应用软件和AEDK实验箱的功能和使用方法。
为以后进一步学习微机原理、汇编语言和硬件相关知识打下了很好的基础。
通过这次课程设计,我发现了我在以前学习中的缺点和不足,比如对芯片的相关命令和使用方法还不够熟练;在课设中我还学会了8279的显示,不同方法计算占空比的值。
学会了对汇编语言的单步调试,找到问题的所在。
课设中,我老师和同学都给予我很大的帮助,同学们总是在我要放弃时给我指点,给我鼓励。
老师在我迷茫的时候给我指出问的所在。
这些都使我的课设顺利完成,非常高兴有这样的老师和同学。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩
(学习的目的是增长知识,提高能力,相信一分耕耘一分收获,努力就一定可以获得应有的回报)