如何用8255构成两位十进制计数器,而使verilog数码管计数器不闪烁,原理是什么

2904人阅读
Protues-汇编
一般是接在单片机的口,因为口内部没有上拉电阻,不能输出高电平,所以要接
上拉电阻。排阻就是好多电阻连载一起,他们有一个公共端。端为公共端接或地,
看你是上拉还是下拉呢,其他接你要操作的端口。所以,我觉得,对于我们这个设计
应该是上拉电阻,是为了产生高电平,说白了,也就是为了产生
(引脚功能):
复位信号,输入。
高电平持续个时钟周期以上有效:系统复位,,,,和指令队列清零,
()变为低电平,从开始执行程序。即
:(复位)(正常工作)
:时钟信号,输入。任何都必须的信号
&&&&&&&&&&
在中,可以不接:中模型默认有时钟为,也可以外接时钟
:准备好信号,输入。由所访问的存储器或设备发来的响应信号,高电平表示
&&&&&&&&&&
数据已经准备就绪,马上可以进行一次数据传送。
在总线周期对进行采样:
为:则会继续插入等待状态,在状态,继续对信号进行
&&&&&&&&&&
采样,直到信号有效为止(即转为高电平)
:(数据准备号,可以传送)(数据未准备好,插入等待状态)
,:与存储器或接口通信,通常需要这两个信号进行读,写操作
:地址锁存允许信号,输出。是在每个总线周期发出的
&&&&&&&&&&
高电平:表示当前地址数据复用线上输出的是(地址信息)
常常需要利用它的下降沿把地址信号锁存在或其它地址锁存器中。
锁存的目的:
状态:地址数据复用引脚(输出地址信号)
状态:撤销地址信号
:地址数据复用引脚(出现数据信号)
:总线周期接受。
&&&&&&&&&&&&&&&&&&
若不锁存,状态时,原先的地址信号早已不存在,找不到要访问的存
&&&&&&&&&&&&&&&&&&
储单元接口,故(无法读写数据。
本身只是一个,内部并没有存储器。但在中,可以不接存储器:
该模型有内部存储器。见
所以在仿真时不接存储器可以运行程序
为三态输出的八锁存器,共有和两种线路。是一种常见
输入端,输出端的锁存器。GND接地,接直流电源(实际芯片上一定有这两个引脚)
为芯片的数据接口,也是芯片的输出端,一般外接开关按钮或其他芯片的输出端。
为芯片的输出接口,也就是芯片的输出端,简单电路一般外接小灯泡显示结果
&&&&&&&&& ,复杂电路需要将输出端外接下一个芯片。
:三态允许控制端,当为低电平时,将信号从输出端放入,不然将信号置
:为锁存器开关,当为高电平时,芯片具有锁存功能,外来信号不会改变输出结果
共有个引脚,采用双列直插式封装:和外设相连的:
:口数据信号线,双向,三态引脚
口数据信号线,双向,三态引脚
(这三个端口配置成输出方式时可以字节写,配置成输入方式时可以字节读,
端口可以位操作。用来存储配置信息的寄存器的寄存器叫做控制寄存器,加上三个端口)
面向系统总线和
:复位信号线,高电平有效,当信号来到时,所有内部寄存器都被
&&&&&&&&&&&&&& 清除,同时个数据端口被自动置为输入端口。
:它们是的数据线,和系统总线相连,用来传送数据和控制字
(表示的非):片选信号线,低电平(为)有效,表示芯片被选中,只有当
有效时,才能对进行读写操作
:读信号,低电平有效。当有效时,可以从中读取数据
:写信号,低电平有效。当有效时,可以往中写入控制字或数据
:端口选择信号。内部有个数据端口(端口)和个控制端口,共个端口。
通过地址线,寻址。规定当,为时,选中端口为时,选中
端口为时,选中端口为时,选中控制口。
需要说明的是:写入控制寄存器的配置信息最高位必须为。如果最高位为
芯片就理解成对端口的位操作。格式如下:
最高位为配置信息
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
最高位为端口位操作命令:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
如果简单快速地使用
要使用,只要把控制方向的配置字写入控制寄存器,然后操作端口就可以了。
如何操作呢?如果你把口配置成输入方式就读操作,配置成输出方式就写操作。
在这里有一点硬件上的数据要介绍一下。的每个口在作为输出引脚时都有
的带负载能力,推挽形式。作为输入方式时是浮空输入的,内部没有上拉电阻,
接键盘之类的要在另外加上拉电阻
驱动芯片共用到个子程序,分别是初始化控制寄存器及读写,,
端口,读写端口某位。单片机上电后应初始化一次芯片,初始化函数完成
的工作是通过引脚清除控制寄存器的内容,然后把控制字写入控制寄存器。
的工作原理
是可编程的计数器定时器,其内部有三个独立的位计数器定时器通道,每
个计数器通道均可按种不同的方式工作,并且都可以按二进制或十进制计数。其
中是计数器的时钟脉冲输入端,是门控脉冲输入端
,是输出端及内部结构
当用做外部事件计数器时,在端所加的计数脉冲由外部事件产生,这些脉冲的间
隔可以不相等。如果要用则端应输入精确的时钟脉冲。这时,所能实现的定时时
间决定于计数脉冲的频率和计数器的初值,即定时时间时钟脉冲周期预置的计数初值
的控制逻辑由个控制信号,,组成
控制逻辑和执行的操作
编程时,要对其控制字寄存器写入相应的控制字,控制字寄存器格式如下:
其中:,通道选择位。为分别表示选择通道。读写操作位。
表示锁存数据,可随时读取计数器中的计数值表示只读写低位,高位自动置为
表示只读写高位,低位自动置表示读写位数据,先低位,后高位。
,工作方式的选择位8253具有个独立的位减法计数器,中不同
的工作方式。
方式:又称计数结束产生中断工作方式。当程序将工作方式控制字写入控制字寄
&&&&&&&&&& 存器时计数器的输出端立即变为低电平。在计数初值写入该计数器后,输出仍
&&&&&&&&&& 将保持低电平。当门控信号为高电平时,计数器对输入端的输入脉冲开始作减
&&&&&&&&&& 一操作,当计数器从初值减为时,输出端由低电平变为高电平,该输出信号
&&&&&&&&&& 可作为向发出中断请求信号。
方式:又称可编程单稳态工作方式。功能是在信号的上升沿作用下,输出端产
&&&&&&&&&& 生一个负脉冲信号,负脉冲的宽度可由定时器的计数初值和时钟频率编程确定
方式:又称频率发生器工作方式。当程序将工作方式控制字写入控制字寄存器时,
&&&&&&&&&&& 计数器的输出端立即变为高电平。在写入计数初值后,计数器对输入
&&&&&&&&&&& 时钟计数。在计数过程中保持不变,直到计数器从初值减为时,输出
将变低,在经过周期时,恢复高电平,并按已设定的计数初值重
&&&&&&&&&&& 新开始计数。在需要产生某个脉冲信号或将某一个较高频率的脉冲信号分频为
&&&&&&&&&&&& 较低频率时,可使用的方式
方式:又称方波发生器工作方式。类似与方式不同之处是方式的输出是方波
方式:又称软件触发选通工作方式。其功能是在输出端隔一定时间产生一价目负脉冲
&&&&&&&&&&&& 与方式不同的是,输出脉冲的宽度是固定的,但产生负脉冲所相隔时间是可编程的。
方式:又称软件触发选通工作方式。方式的工作类似于方式不同之处是信号的
&&&&&&&&&&&& 作用不同。方式的计数过程由的上升沿触发,当计数结束时,将输出
&&&&&&&&&&&&
&&&&&&&&&&&& 一个周期的低电平信号
方式:当程序送一控制字将所选的计数器置于所设定的方式后,该计数器的输出为低当
&&&&&&&&&&& 计数器初值装入被选中的计数器后,在外部输入的门控高电平的控制下,则可通过
&&&&&&&&&&& 各自的计数脉冲进行递减计数。此时其输出仍为低。当计数器从初识值减到全
时,便产生一高电平输出,利用此输出信号向发计数完中断此中断请求一直保
&&&&&&&&&&& 持到程序再次向计数器装入初值为止
:计数方式选择位。表示按十进制计数,表示按二进制计数。
初始化编程
编程时,可选择计数器工作在方式在的方式工作方式中,从将计数初值写入计数器到
开始减计数之间,有一个时钟脉冲的延迟。若计数初值为那么经过个即个脉
冲时计数值减为并在输出一正跳变,这可以作为中断请求。在中断服务子程序中
可以做其他处理,如送下一个包装箱等。设计数初值为(要求一个包装箱内装工件)
,按十进制计数,先送低位,在送高位,控制字为
初始化程序为:
送方式控制字
,向通道送计数初值低位
,向通道送计数初值高位
锁存的作用是将数据线中的给然后直接给而给了
内部含有个寄存器
&&& (,汇编语言中的伪操作命令,它用来定义操作数占用的字节数,在这里是
的缩写,即字节,该伪操作所定义的每个操作数占有个字节)
&&&&& (,定义一个字(一般为位),定义一个双字(一般为位))
&&&&& 它们在程序中起的作用,一般是在程序中作变量使用
&&&&&& 这句话的意思就是:将这些数据存入开始的地址空间里
取有效地址(位),送到寄存器中去
取有效地址,也就是取偏移地址,在微机原理中有
位物理地址,由位段地址向左偏移位再与偏移地址之和得到。地址传送指令之一
指令在执行时,先将的内容减然后再判断中是不是为如果不为则继续循环
,如果为则退出循环,执行下一条指令。
在指令前,一定要对寄存器设置循环计数初值的指令。
,设置循环次数次
:减如不为则循环
。。。。后续处理
是无条件跳转的意思。
是个跳转指令,就是当时,跳转到
就是!时跳转
,秒表计时器
是一个代码替换指令表示的是:,
((?):定义个字(位),里面的内容用()的数值填充,如果()内是?
,那么表示不进行初始化
(,)定义了个字节)
表示将的数据写入到寄存器中
,(将和分别写入端口和)
,表示从端口读取一字节数据到
,表示从端口地址读取字节数据到,从端口读取字节到
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:71784次
积分:1757
积分:1757
排名:第18243名
原创:98篇
转载:60篇
评论:14条
(1)(10)(15)(29)(20)(5)(9)(10)(26)(12)(14)(5)(4)君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
微机原理课程设计(用8255A实现4位十进制计算器)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口导读:课程设计报告,名称:微型计算机原理及应用,题院系:控制与计算机工程学院,指导教师:王震宇设计周数:一周,一、课程设计的目的与要求,课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到,通过课程设计,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,
课程设计报告
( 2012-- 2013年度第 1 学期)
称:微型计算机原理及应用
系:控制与计算机工程学院
级:自动化1003班
学生姓名:范
指导教师:王震宇
设计周数:一周
日期:2013 年 1 月 5
一、 课程设计的目的与要求
课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。
通过课程设计,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。
我组根据微机原理课程所学相关知识及实验教程相关内容,在基于proteus平台,使用汇编语言,以8086为核心的情况下,配合可编程并行接口器件8255A,LED数码管等器件实现可进行简单四位数加减乘除法功能的十进制计算器。在课程设计实践中,我们不仅锻炼了实际动手能力,培养了团队精神和严肃认真的工作态度,更增强了自己在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。
二、 课程设计进度及任务分工
课设进度:1.选择课程设计题目,查阅相关资料。(全体组员)
2.需求分析及总体设计。(全体组员)
3.软硬件设计。(范昌负责主程序的框架与整体调试、LED数码显示部分及硬件构架,贾旭负
责键盘管理部分,郭欢、刘玉婷负责算法及相关程序)
4.仿真调试。(范昌、贾旭)
5.总结及撰写设计报告。(郭欢、刘玉婷)
6.个人总结(全体组员)
三、设计正文
1. 需求分析
? 操控核心微处理器8086芯片
? 可编程并行接口芯片8255A
? 可编程定时/计数器8253A
? 对输入扫描的矩阵键盘
? 显示模块LED数码管
? 辅助器件如74LS138译码器、74LS373等
2. 总体设计
? 确定键盘是否有输入(使用程序不断进行扫描)
? 若有输入就调用子程序进行判断,是数值则进行存储并同时进行显示,是运算符号等就调用
相应的子程序进行操作
? 继续扫描键盘是否有输入,从而实现4位十进制数以内的加减乘除法或者扩展功能运算
? 运算完成后将运算的结果储存并显示到LED显示器上
3. 硬件设计
4. 软件设计
四、课程设计总结或结论
(1)个人总结
本次课程设计我们做的课题是用8255A实现4位十进制数简易计算器,四人一组,我负责
主程序的框架与整体调试、LED数码显示部分及硬件构架。对于主程序的框架,是整个计算器的核心,通过与其他组员的商量我们最终确定了我们的主要算法:通过一个4*4键盘,输入数据,实现加减乘除操作,将输入的数据和运算符分别存储,接收到“=”时进行运算,并将结果输出。
看起来简单的算法,由于涉及到十进制和十六进制的转换,其中就需要很多中间的转换程序。经
过反复修改与查阅资料,我们的程序最终能够完成部分预期功能。
我还负责LED数码管显示部分的程序,四位七段数码管的显示,原理看起来简单,但是实
际操作时却有各种各样的毛病,按照原理写好程序,往往不能达到预期效果,数码管又是不显示,有时会显示乱码,有时会闪烁,所有这些,都要一步一步调试,加入合适的延时程序是关键,延时过长、过短都不好。显示乱码是程序方面出了问题,经过一次次调试,终于得到了稳定的显示, 我对数码管的应用也更熟练了。
由于我之前有接触过proteus仿真软件,所以我负责硬件的搭建,熟悉使用proteus软件对我
们专业来说是一项基本技能,通过一次次摸索与百度,我对这个软件的使用也越来越熟悉,学会了怎么连总线,怎么仿真,怎么快速连线,以及常用元件的搜索。其中最让我满足的是键盘的设计,如果用16个按钮排列当然可以实现我们的要求,但是每次按按钮有很不方便,所以我在网上查询资料,学会了用proteus自身的模型制作自己的元件,上图左边是普通矩阵键盘,右图是我利用proteus
自身模型制作的的键盘,感觉很满意。整个硬件仿真的搭建,由于对软件的不熟
悉,本身设计的问题,花了我很长时间,而且重复连接了很多次,最后我们成功仿真出了我们的计算器。
通过本次课程设计,就我本身来说我学会了很多东西,无论是软件上汇编语言程序的编写与
调试,还是硬件的搭建技巧与相关软件的应用的能力都得到了很大提高,同时也锻炼了我的自我学习能力与交流合作能力,相关软件的学习使用,相关芯片与元件的使用与选择能力都在一定程度上有了很大进步。同时,软硬件的结合,也体现了我们自动化专业的特点。
最后,有一点遗憾的就是做好了四位的简易计算器,我们想进一步扩展做成八位的计算器,
但是难度有所加大,不是想象中的那么简单,数码管显示部分就花了很大精力去调试。最后由于时间关系没有完成8位计算器的制作。
(2)团队总结
本次课程设计,我们是四人一组,团队合作的要求就比较高。因为选题的关系,需要更多的
人合作,所以决定四人组队,各自发挥特长。
在设计过程中,我们配合得很好,初期的查阅资料共享,极大地体现了我们人数上的优势。
对于整个设计的交流更让我们在大方向上走上了正确的道路,少走了很多弯路。我们的课题看起来简单,其实不然,仔细分析,涉及的知识面很广,很考验我们的基本功和自学能力。软件方面的算法由于是大家一起讨论后决定的,一般都是可行的,也有很多难点,比如说十进制与十六进制的转换,数据的输出与存储等,但是在我们的通力合作下一一解决了我们面临的很多难题。硬件方面用的是proteus软件仿真,硬件电路的设计也是一个难点,但是通过查阅资料与相互交流,我们的电路最终是可行的,虽然之前失败了好几次。软件和硬件的结合再一次考验了我们的合作精神,软件是建立在硬件上的,硬件体现软件的功能,主要负责硬件和组要负责软件的同学建立了很好的默契,相互学习,圆满的完成了任务。
本次课程设计我们对自己的成果相对比较满意,在设计的过程中,大家相互学习,相互帮助,都收获很多。但是我们也有很多不足的地方,比如四位的计算器位数太少,不能进行小数运算等,这些都是对我们能力的极大挑战,为了解决这些问题我们也进行了积极探索,设计了一个八位的简单计算器,但是由于时间有限,没能完成设计。
包含总结汇报、文档下载、外语学习、教学研究、党团工作、人文社科、办公文档、教程攻略以及微机原理课程设计(用8255A实现4位十进制计算器)_图文等内容。本文共6页
相关内容搜索

我要回帖

更多关于 arduino数码管计数器 的文章

 

随机推荐