十进制可逆加减计数器
Proteus十进制加减可逆计数器的设计

课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 十进制加/减可逆计数器设计初始条件:电脑一台、Proteus软件、数模电相关基础要求完成的要紧任务:(包括课程设计工作量及其技术要求,和说明书撰写等具体要求)1、技术要求:设计M=125或给定值的十进制加/减可逆计数器,要求如下:A、给定元件为74LS00,74LS76,74LS192,74LS48及数码管等;B、进行电路仿真,并说明其工作原理;2、要紧任务:(1)温习有关课程,如数字电路、模拟电路等;(2)自学Proteus软件,能够熟练地进行仿真;(3)依照设计指标设计电路的框图;(4)依照要求设计出电路图;(5)查阅资料,确信所需各元器件型号和参数;(6)自拟调整测试方式,并调试电路使其达到仿真要求;(7)撰写设计说明书,进行答辩。
3、撰写课程设计说明书:装订顺序要求:封面→任务书→目录→正文→参考文献。
正文:一、技术指标;二、设计方案及其比较;3、实现方案;4、调试进程及结论;五、心得体会;六、参考文献时刻安排:课程设计时刻:19周-20周19周:明确任务,查阅资料,初步设计电路原理图;20周:依照电路原理图布线,并调试通过。
依照要求撰写课程设计说明书。
指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)1技术指标 (1)2设计方案及其比较 (2)设计方案 (2)设计思路 (2)手控方式计数器设计思路 (2)自控方式计数器设计思路 (4)集成电路及元件选择 (5)3实现方案 (6)手动操纵计数器实现方案 (6)计数单元的设计 (6)译码显示单元电路设计 (7).1译码器74LS48 (7)显示器LG5011AH (9).3译码显示电路 (10)加/减计数操纵电路的设计 (10)总原理图的设计 (12)自动操纵计数器实现方案 (13)4 Proteus仿真 (14)Proteus简介 (14)电路仿真 (15)放置元件 (15)参数设置 (18)布线与调整 (20)仿真 (21)5课程设计心得体会 (22)参考文献 (23)摘要计数器是数字电路中最为大体的一个单元电路。
欧姆龙plc计数器指令的功能详述

欧姆龙plc计数器指令的功能详述欧姆龙plc计数器指令CNT是单向计数器,CNTR是可逆计数器。
这两种计数器在编程时都需要设定计数值。
设定值用4位十进制数表示,范围0~9999。
设定值既可表示成立即数形式(设定值前加“#”),也可以放在通道中(设定值前无“#”即表示通道号)。
(1)单向计数器CNT。
单向计数器的计数输入端CP每接通1次(从OFF到ON),计数值减1。
当计数值减到0时,计数器的触点动作。
当计数器的复位端R接通时,计数器被复位,其常开触点断开,常闭触点闭合,且计数值恢复到设定值。
单向计数器的使用如图3-30。
计数器CNT0001的计数设定值是3,输入继电器触点000005每接通1次,计数值减1。
当触点000005接通3次时,CNT0001计数到,其常开触点C0001闭合,使输出继电器000101接通。
当输入继电器触点000000接通时,计数器CNT0001被复位,其常开触点断开,输出继电器000101断开。
图3-30梯形图对应的指令助记符程序如下所示。
图3-30 CNT指令梯形图图3-30梯形图的波形图如图3-31所示,由图可见,在输入继电器触点000000接通期间,触点000005有两次接通,但此时计数器不计数,因为当计数逻辑CP与复位逻辑R同时接通时,复位优先。
只有触点000000断开后,计数器才开始计数,输入继电器触点000005每接通1次,计数器计数值减1,当接通3次时,计数器计数值减到0,其常开触点动作,使输出继电器000101产生输出。
此后,000005再接通,计数器仍然是计数到,其常开触点C0001一直保持闭合,直到被复位。
波形图中000005脉冲上方数字表示该脉冲到来时,计数器的当前值。
图3-31 图3-30梯形图的波形图(2)可逆计数器CNTR。
可逆计数器既可递增计数,又可递减计数。
它有3个输入端:加计数端II、减计数端DI和复位端R。
加计数端每接通1次,可逆计数器的值加1;减计数端每接通1次,可逆计数器的值就减1;无论何时复位端接通,可逆计数器均被复位成0。
两位同步十进制可逆计数器的设计综述

湖北师范学院文理学院信息工程系2010级电子信息工程专业综合课程设计(一)文理学院综合课程设计(一)Integrated Curriculum Design(1)两位同步十进制可逆计数器的设计1 设计目的(1)熟悉各种触发器的使用及时序逻辑电路的设计方法;(2)掌握中规模集成十进制可逆计数器74LS192的逻辑功能和使用方法;(3)了解计数器的功能扩展及显示器的应用和它们的运行过程中是如何实现相关功能的。
2 设计思路第一步:将两片74LS192进行级联,用“反馈清零法”设计一个两位十进制加法计数器,反馈清零信号取自输出端Q0 ~Q3 ;第二步:将两片74LS192进行级联,用“反馈置数法”设计一个两位十进制减法计数器,反馈置数信号取自计数器最高位的借位端TCD;第三步:将上述加、减计数器电路结合起来,即初步构成一个加/减两位十进制可逆计数器。
余下的问题就是在加/减可逆计数条件下,如何切换计数器最低位的计数脉冲输入端CPD、CPU的信号。
经过分析,这一功能通过单刀双掷开关即可实现。
整个可逆计数器电路(不包括数字显示部分)的设计框图如下图图1(可逆计数器设计框图)3 设计过程整个设计可分为三个部分,具体如下:第一部分:提供持续的脉冲信号;第二部分:计数单元的设计;第三部分:用两个74LS192组成两位十进制可逆计数器。
其中第二部分由74LS192双十钟方式的可逆计数器组成,其引脚图如下图2所示,功能表如下表1所示:图2(74LS192的引脚图)表1(74LS192的功能表)第三部分的设计框图如下图3所示:图3(两个74LS192组成十进制可逆计数器)低位计数器的CPU 端与计数脉冲输入端相连,进位输出端与高一位计数器的CPU 端相连3.1方案论证通过仿真软件进行实际验证,改变脉冲信号进行计数,通过开关控制,看是否能实现相关功能,论证方案:将线路处于工作状态,调节开关置零,然后进行置数,将输入端置为0111,拨动开关使电路进行加计数,当加到99时自动置零,然后将开关调置另一边进行减计数。
一位十进制数加减法器

一位十进制数加减法器引言在计算机领域中,数字加减法是最基础且常见的算术运算。
为了实现有效的数字加减法运算,我们需要使用加减法器。
本文将介绍一位十进制数加减法器的设计和功能。
一位十进制数加减法器的原理一位十进制数加减法器是用来对两个十进制数进行加法或减法运算的电路。
它包含三个输入端和两个输出端:•输入端:两个十进制数(A和B)和一个控制输入(Cin)。
•输出端:一个和输出(Sum)和一个进位输出(Cout)。
一位十进制数加减法器根据控制输入的不同来执行不同的操作,具体原理如下:1. 加法操作•输入:A、B和Cin。
•输出:Sum和Cout。
加法操作的实现可以采用如下步骤:1.将A、B和Cin输入到加法器电路中。
2.对A和B进行加法运算,得到结果与进位。
3.Sum输出运算结果,Cout输出进位。
2. 减法操作•输入:A、B和Cin。
•输出:Sum和Cout。
减法操作的实现可以采用如下步骤:1.将A、B和Cin输入到减法器电路中。
2.对A和B进行减法运算,得到结果与借位。
3.Sum输出运算结果,Cout输出借位。
一位十进制数加减法器的设计一位十进制数加减法器的设计需要考虑以下几个方面:1.加法器和减法器电路的设计。
2.输入和输出信号的处理和传输。
3.控制输入的处理和判断。
1. 加法器和减法器电路的设计加法器和减法器电路的设计可以采用逻辑门电路来实现。
对于加法操作,可以通过使用XOR门和AND门来实现加法运算和进位计算。
对于减法操作,可以通过使用补码变换和与非门来实现减法运算和借位计算。
2. 输入和输出信号的处理和传输输入和输出信号的处理和传输可以通过触发器来实现。
触发器是一种存储器件,可以存储和传输信号。
输入信号可以存储在输入触发器中,通过触发器传输到加减法器电路中进行运算。
运算结果可以存储在输出触发器中,通过触发器输出到外部。
3. 控制输入的处理和判断控制输入的处理和判断可以通过逻辑电路来实现。
根据控制输入的不同值,可以判断是执行加法操作还是减法操作,并将相应的输入信号传递给加减法器电路。
CD40110简洁中文资料

40110------十进制加减计数器/锁存/七段简要说明:40110为十进制可逆计数器/锁存器/译码器/驱动器,具有加减计数,计数器状态锁存,七段显示译码输出等功能。
40110有2个计数时钟输入端CPU和CPD分别用作加计数时钟输入和减计数时钟输入。
由于电路内部有一个时钟信号预处理逻辑,因此当一个时钟输入端计数工作时,另一个时钟输入端可以是任意状态。
40110的进位输出CO和借位输出BO一般为高电平,当计数器从0~9时,BO输出负脉冲;从9~0时CO输出负脉冲。
在多片级联时,只需要将CO和BO 分别接至下级40110的CPU和CPD端,就可组成多位计数器。
引出端符号:BO 借位输出端CO 进位输出端CPD 减计数器时钟输入端CPU 加计数器时钟输入端CR 清除端/CT 计数允许端/LE 锁存器预置端VDD 正电源Vss 地Y a~6g 锁存译码输出端推荐工作条件:电源电压范围…………3V~18V输入电压范围…………0V~VDD工作温度范围M类…………-55℃~125℃E类………….-40℃~85℃极限值:电源电压…...-0.5V~18V输入电压……-0.5V~VDD+0.5V输入电流…………….±10mA储存稳定…………-65℃~150℃引出端排列:12本设计主要基于CD40110,设计的秒、分时钟电路CD40110 内部集成了计数、译码、锁存器的功能,因此可以省去一些译码芯片,内部有加法器与减法器两种功能,都是十进制的图中的1Hz的信号,可经过555多谐振荡产生,也可以通过晶振32768经过分频得到,也可以通过把市电经过50分频得到还可以加入时间调整,报时模块。
十进制加法计数器

在数字系统中,常需要对时钟脉冲的个数进行计数,以实现测量、运算和控制等功能。
具有计数功能的电路,称为计数器。
计数器是一种非常典型、应用很广的时序电路,计数器不仅能统计输入时钟脉冲的个数,还能用于分频、定时、产生节拍脉冲等。
计数器的类型很多,按计数器时钟脉冲引入方式和触发器翻转时序的异同,可分为同步计数器和异步计数器;按计数体制的异同,可分为二进制计数器、二—十进制计数器和任意进制计数器;按计数器中的变化规律的异同,可分为加法计数器、减法计数器和可逆计数器。
二进制加法计数器运用起来比较简洁方便,结构图和原理图也比其它进制的简单明了,但二进制表示一个数时,位数一般比较长。
十进制是我们日常生活中经常用到的,不用转换,所以设计十进制加法计数器比设计二进制加法计数器应用广泛,加法器是以数据的累加过程,日常生活中,数据的累加普遍存在,有时候需要一种计数器对累加过程进行运算处理,所以设计十进制加法计数器应广大人们生活的需要,对我们的生活有一个积极地促进作用,解决了生活中许多问题,所以会设计十进制加法计数器使我们对数字电路的理论和实践知识的充分结合,也使我们对电子技术基础有了深刻的了解,而且增强了我们对电子技术基础产生了浓厚的兴趣,这次课程设计使我受益匪浅!一、设计题目 (3)二、设计目的 (3)三、设计依据 (3)四、设计内容 (3)五、设计思路 (4)六、设计方案 (7)七、改进意见 (10)八、设计总结 (11)九、参考文献 (12)一、设计题目十进制加法计数器二、设计目的1.学习电子电路设计任务。
2.通过课程设计培养学生自学能力和分析问题、解决问题的能力。
3.通过设计使学生具有一定的计算能力、制图能力以及查阅手册、使用国家技术标准的能力和一定的文字表达能力。
三、设计依据1.用JK触发器组成。
2.实现同步或异步加法计数。
四、设计内容1.复习课本,收集查阅资料,选定设计方案;2.绘制电气框图、电气原理图;3.对主要元器件进行计算选择,列写元器件的规格及明细表;4.设计总结及改进意见;5.参考资料;6.编写说明书。
课程设计—分频器的制作

电子技术课程设计报告学院:专业班级:学生姓名:学号:指导教师:完成时间:成绩:分频器的制作设计报告一. 设计要求把1000HZ的信号分成500Hz,100Hz的信号,用拨动开关控制。
发挥部分:1、200Hz信号的产生 2、倍频信号的产生。
二. 设计的作用、目的1、掌握运用中规模集成芯片设计分频器的方法。
2、掌握使用与非门、555单稳态产生倍频信号的方法。
三.设计的具体实现1、单元电路设计(或仿真)与分析1、分频信号的产生:电路图如下74ls192是同步十进制可逆计数器,具有双时钟输入,并具有异步清零等功能。
在此电路中,计数器处于加计数状态,输入脉冲1000Hz由5脚输入,用清零法组成进制可变的计数器,并通过单刀双掷开关控制。
仿真结果图如下:①当开关拨到1档时,上面频率计数器计输入信号频率为1000Hz,下面频率计数器计数频率为500Hz信号。
②当开关拨到2档时,上面频率计数器计输入信号频率为1000Hz,下面输出频率计数器显示100Hz信号。
2、200Hz信号的产生:电路图如下74ls192是同步十进制可逆计数器,具有双时钟输入,并具有异步清零等功能。
仿真结果图如下:在此电路中,计数器处于加计数状态,输入脉冲1000Hz由5脚输入,用清零法组成进制可变的计数器,2脚即输出200Hz信号。
2、倍频信号的产生:倍频信号原理图如下,输入信号由最左端输入方波(频率大于1000Hz并且峰峰值大于3v小于5v效果好)其中第一个与非门连接成非门使用,起着对输入信号倒相的作用。
这样,当有一个方波脉冲信号输入时,由C1、R1组成的微分电路将在脉冲信号的前沿产生一个正向微分脉冲信号,同时在方波下降沿处产生负向脉冲,另一路经过反相后,C2、R2微分电路产生负向脉冲(另一路产生正向脉冲同时)和负向脉冲,经过二极管滤除正向脉冲作为555单稳态的2脚触发端输入信号,而555单稳态3脚输出倍频后的方波。
仿真结果图如下:左端频率计数器显示的是输入的1000Hz的信号,右端频率计数器显示的是倍频后输出的2000Hz的信号示波器显示:号2000Hz。
汇编语言实现十进制加减计算器资料

课程设计题目十进制数加减计算器学院计算机科学与技术专业计算机科学与技术班级计算机0808班姓名何爽指导教师袁小玲2010 年12 月31 日课程设计任务书学生姓名:何爽专业班级:计算机0808班指导教师:袁小玲工作单位:计算机科学与技术学院题目: 十进制数加减计算器的设计初始条件:理论:学完“汇编语言程序设计”、“课程计算机概论”、“高级语言程序设计”和“数字逻辑”。
实践:计算机学院科学系实验中心提供计算机和软件平台。
如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)十进制数加减计算器的设计。
(2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。
(3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。
(4)设计报告格式按附件要求书写。
课程设计报告书正文的内容应包括:在正文第一行写课程设计题目;1.需求说明(要求、功能简述)或问题描述;2.设计说明(简要的分析与概要设计);3.详细的算法描述;4.源程序与执行结果(含测试方法和测试结果);5.使用说明;6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该程序进一步改进扩展的设想)。
时间安排:设计时间一周:周1:查阅相关资料。
周2:系统分析,设计。
周3~4:编程并上机调试。
周5:撰写课程设计报告。
设计验收安排:20周星期五8:00起到计算机学院科学系实验中心进行上机验收。
设计报告书收取时间:20周的星期五下午5:00之前。
指导教师签名: 2010年12月31日系主任(或责任教师)签名: 2010年12月31日目录1.需求说明 (4)2.设计说明 (4)2.1 简要分析 (4)2.2 概要设计 (4)2.2.1 主要模块 (4)2.2.2 主函数结构 (5)3.详细的算法描述 (6)3.1 详细的算法描述 (6)3.2 算法流程图 (11)3.2.1 程序流程图 (11)3.2.2 输入函数(inputdec)流程图 (12)3.2.3 输出函数(outputdec)流程图 (12)3.2.4 输出算术表达式函数(show)流程图 (13)4.源程序与执行结果 (13)4.1 源程序 (13)4.2 执行结果 (19)4.2.1 测试方法 (19)4.2.2 测试结果 (19)5.使用说明 (20)6.总结 (21)十进制数加减计算器的设计1.需求说明十进制数加减计算器的设计,要求完成:(1)用汇编语言正确编写程序,完成简单的十进制数的加减运算,(2)求能正确进行输入和输出操作,界面追求友好,尽量实现菜单操作(3)用若干测试用例来测试程序的正确性2.设计说明2.1 简要分析要正确、友好地完成用汇编语言设计十进制数的加减计算器,我们应该完成以下几个功能:(1)相关菜单及字符输出的设计(2)十进制数的输入(3)十进制数的输出(4)加法运算(5)减法运算(6)输出运算表达式(7)回车换行功能(因为为了控制格式,经常要用到)2.2 概要设计2.2.1 主要模块(1)菜单及字符menu db ‘|--------------------------------------|’0dh,0ahdb ‘| 1.Add |’0dh,0ahdb ‘| 2.Sub |’0dh,0ahdb ‘| 0.Exit |’0dh,0ahdb ‘|--------------------------------------|’0dh,0ahdb ‘Please input your choice:$’mess1 db 'Please input the first number: $'mess2 db 'Please input the second number: $'mess3 db 'The result is : $'mess4 db '-$'mess5 db '+$'mess6 db '=$'(2)十进制数的输入inputdec proc实现代码retinputdec endp(3)十进制数的输出outputdec proc实现代码retoutputdec endp(4)加法运算addfun proc显示mess1 ;提示输入第一个数call inputdec ;输入第一个数显示 mess2 ;提示输入第二个数call inputdec ;输入第二个数做加法运算显示mess3 ;提示输入第一个数call show ;输出运算表达式retaddfun endp(5)减法运算subtract proc显示mess1 ;提示输入第一个数call inputdec ;输入第一个数显示 mess2 ;提示输入第二个数call inputdec ;输入第二个数做减法运算显示mess3 ;提示输入第一个数call show ;输出运算表达式retsubtract endp(6)输出运表达算式函数show proccall outputdec ;输出第一个数输出运算符号call outputdec ;输出第二个数输出等号call outputdec ;输出运算结果retshow endp(7)回车换行crlf proc实现代码retcrlf endp2.2.2 主函数结构main proc显示menu ;供选择输入选项判断选项Case 1: call addfunCase 2: call subtractCase 3: 退出程序main endp3.详细的算法描述3.1详细的算法描述(1)main函数main procpush dsxor ax,axpush axmov ax,datamov ds,axks:lea dx,menu ;输出菜单项mov ah,09hint 21hmov al,0mov ah,01h ;输入选择项int 21hsub al,30hcmp al,2 ;判断选择项jz l2 ;如果输入为2 ,则跳转到l2cmp al,1jz l1 ;如果输入为1,则跳转到l1mov ah,4ch ;这两句为正常返回dos界面int 21hl1:call addfun ;调用加法函数jmp ks ;返回到菜单l2: call subtract;调用减法操作jmp ks ;返回到菜单main endp(2)addfun函数(加法运算函数)addfun proccall crlfmov bp,1 ;给下面的show输出中间的运算符做标记,1为加号 lea dx,mess1 ;给出输入第一个数的提示信息mov ah,09hint 21hcall inputdec;调用输入函数,输入第一个数mov si,bx ;第一个数保存在si中lea dx,mess2 ;给出输入第二个数的提示信息mov ah,09hint 21hcall inputdec;调用输入函数,输入第二个数mov di,bx ;第二个数保存在di中mov bx,si ;将第一个数保存到bx中,再进行操作,以免影响到的输出 add bx,di ;第一个数和第二个数相加,结果保存在bx中lea dx,mess3 ;给出输出结果的提示信息mov ah,09hint 21hcall show ;调用show函数,输出算术表达式ret ;返回函数调用处addfun endp(3)subtract函数(减法运算函数)subtract proccall crlfmov bp,2 ;给下面的show输出中间的运算符做标记,2为减号lea dx,mess1;给出输入第一个数的提示信息mov ah,09hint 21hcall inputdec;调用输入函数,输入第一个数mov si,bx ;第一个数保存在si中lea dx,mess2 ;给出输入第一个数的提示信息mov ah,09hint 21hcall inputdec;调用输入函数,输入第一个数mov di,bx ;第二个数保存在di中mov bx,sicmp bx,di ;比较第一个数和第二人数的大小js subl1 ;如果为负(第一个数小一些)则跳转sub bx,di ;否则直接进行计算,结果保存在bx中jmp subl2subl1:mov bp,3 ;为show里面是否输出负号作准备,3的时候要输出负号push di ;先将第二个操作数进栈,否则下面的减法操作会将其值改变 sub di,bxmov bx,dipop di ;第二个操作数出栈,再赋给di寄存器subl2:lea dx,mess3 ;输出运算表达式的提示mov ah,09hint 21hcall show ;调用show函数,输出运算表达式retsubtract endp(4)inputdec函数(十进制输入函数)inputdec procmov bx,0il0:mov ah,01h ;输入数字int 21hcmp al,0dh ;判断是否为回车jz iexit ;如果是回车,则返回到函数调用处sub al,30h ;得到输入数字的真实大小mov ah,0xchg bx,ax ;将bx值与ax值交换,因为下面乘以10是将ax中的值乘10 mov cx,10 ;注意,这里不能用CL,否则数较大时就会出现问题mul cx ;将ax中的值乘以10,也就是将bx中原来的值乘以10add bx,axjmp il0 ;进行输入下一数值位iexit:call crlfretinputdec endp(5)outputdec函数(十进制输出函数)outputdec procpush bpmov bp,0 ;前导0输出与否的标志,0时不输出,1时输出mov ax,bxmov dx,0 ;在进行除法之前,要对dx赋0,否则结果出错mov cx,10000div cx ;除法,字操作,商在ax中,余数在dx中mov bx,dx ;保存余数,作为下一次裤除数mov dl,alcmp dl,0 ;将万位同0比较jz ol0 ;如果万位为0则不输出万位mov bp,1 ;如果万位不为0,则应将bp设为1,以后的0都要输出or dl,30hmov ah,02hint 21h ;输出万位ol0:mov ax,bx ;输出千位的方法与万位相同mov dx,0mov cx,1000div cx ;字操作,商在ax中,余数在dx中mov bx,dx ;保存余数,作为下一次裤除数mov dl,alcmp bp,0jz ol1or dl,30hmov ah,02hint 21h ;输出千位jmp ol2ol1:cmp dl,0jz ol2mov bp,1or dl,30hmov ah,02hint 21h ;输出千位ol2:mov ax,bx ;输出百位与千位、万位方法相同mov dx,0mov cx,100div cx ;字操作,商在ax中,余数在dx中mov bx,dx ;保存余数,作为下一次裤除数mov dl,alcmp bp,0jz ol3mov bp,1or dl,30hmov ah,02hint 21h ;输出百位jmp ol4ol3:cmp dl,0jz ol4or dl,30hmov ah,02hint 21h ;输出百位ol4:mov ax,bx ;输出十位的方法与前面几位方法相同mov cl,10div cl ;字节操作,商在al中,余数在ah中mov bl,ah ;保存余数,作为下一次裤除数,也就是个位数mov dl,alcmp bp,0jz ol5mov bp,1or dl,30hmov ah,02hint 21h ;输出十位jmp ol6ol5:cmp dl,0jz ol6or dl,30hmov ah,02hint 21h ;输出十位ol6:mov dl,bl ;在上面,bl中的数直接就应该为个位,所以直接输出or dl,30hmov ah,02hint 21hpop bp ;恢复bpretoutputdec endp(6)show函数(输出运算表达式函数)show procpush bx ;把运算结果保存起来mov bx,si ;第一个数放在si中call outputdec;输出第一个数cmp bp,3 ;是否为减号jz sl0cmp bp,2 ;判断是否为减号jz sl0lea dx,mess5 ;输出加号mov ah,09hint 21hjmp sl1sl0:lea dx,mess4 ;输出减号mov ah,09hint 21hsl1:mov bx,di ;第二个数放在di中call outputdec ;输出第二个数lea dx,mess6 ;输出等号mov ah,09hint 21hcmp bp,3 ;判断是否需要输出负号 jnz sl2lea dx,mess4 ;输出负号mov ah,09hint 21hsl2:pop bx ;得到运算结果call outputdec;输出运算结果call crlfretshow endp(7)crlf函数(输出回车换行函数)crlf procpush axpush dxmov ah,02hmov dl,0dh ;输出回车int 21hmov dl,0ah ;输出换行int 21h ;ah值被改变 pop dxpop axretcrlf endp3.2 算法流程图3.2.2 十进制输入(inputdec)流程图3.2.3 十进制输出3.2.4 输出算术表达式(show)流程图4.4.1 源程序assume cs:code,ds:datadata segment ;定义数据段menu db ‘|--------------------------------------|’0dh,0ah db ‘| 1.Add |’0dh,0ah db ‘| 2.Sub |’0dh,0ah db ‘| 0.Exit |’0dh,0ahdb ‘|--------------------------------------|’0dh,0ahdb ‘Please input your choice:$’mess1 db 'Please input the first number: $'mess2 db 'Please input the second number: $'mess3 db 'The result is : $'mess4 db '-$'mess5 db '+$'mess6 db '=$'data ends ;数据段结束code segment ;定义代码段main proc ;主函数push dsxor ax,axpush axmov ax,datamov ds,axks:lea dx,menumov ah,09hint 21hmov al,0mov ah,01hint 21hsub al,30hcmp al,2jz l2cmp al,1jz l1mov ah,4chint 21hl1:call addfunjmp ksl2: call subtractjmp ksmain endp ;主函数结束addfun proc ;加法运算函数call crlfmov bp,1 ;给下面的show输出中间的运算符做标记 lea dx,mess1mov ah,09hint 21hcall inputdecmov si,bx ;第一个数保存在si中lea dx,mess2int 21hcall inputdecmov di,bx ;第二个数保存在di中mov bx,siadd bx,dilea dx,mess3mov ah,09hint 21hcall show ;输出结果retaddfun endp ;加法运算函数结束subtract proc ;减法运算函数call crlfmov bp,2 ;给下面的show输出中间的运算符做标记 lea dx,mess1mov ah,09hint 21hcall inputdecmov si,bx ;第一个数保存在si中lea dx,mess2mov ah,09hint 21hcall inputdecmov di,bx ;第二个数保存在di中mov bx,sicmp bx,dijs subl1 ;如果为负则跳转sub bx,dijmp subl2subl1:mov bp,3 ;为show里面是否输出负号作准备push disub di,bxmov bx,dipop disubl2:lea dx,mess3mov ah,09hint 21hcall showretsubtract endp ;减法运算函数结束inputdec proc ;十进制输入函数il0:mov ah,01hint 21hcmp al,0dh ;判断是否为回车jz iexitsub al,30hmov ah,0xchg bx,axmov cl,10mul cladd bx,axjmp il0iexit:call crlfretinputdec endp ;十进制输入函数结束outputdec proc ;十进制输出函数push bp ;用来做前导0的标记mov bp,0mov ax,bxmov dx,0 ;在进行除法之前,要对dx赋0,否则结果over devide mov cx,10000div cx ;字操作,商在ax中,余数在dx中mov bx,dx ;保存余数,作为下一次裤除数mov dl,alcmp dl,0jz ol0mov bp,1or dl,30hmov ah,02hint 21h ;输出万位ol0:mov ax,bxmov dx,0mov cx,1000div cx ;字操作,商在ax中,余数在dx中mov bx,dx ;保存余数,作为下一次裤除数mov dl,alcmp bp,0jz ol1or dl,30hmov ah,02hint 21h ;输出千位jmp ol2ol1:cmp dl,0jz ol2mov bp,1or dl,30hmov ah,02hint 21h ;输出千位ol2:mov ax,bxmov dx,0mov cx,100div cx ;字操作,商在ax中,余数在dx中 mov bx,dx ;保存余数,作为下一次裤除数mov dl,alcmp bp,0jz ol3or dl,30hmov ah,02hint 21h ;输出百位jmp ol4ol3:cmp dl,0jz ol4mov bp,1or dl,30hmov ah,02hint 21h ;输出百位ol4:mov ax,bxmov cl,10div cl ;字节操作,商在al中,余数在ah中 mov bl,ah ;保存余数,作为下一次裤除数mov dl,alcmp bp,0jz ol5or dl,30hmov ah,02hint 21h ;输出十位jmp ol6ol5:cmp dl,0jz ol6mov bp,1or dl,30hmov ah,02hint 21h ;输出十位ol6:mov dl,blor dl,30hmov ah,02hint 21hpop bp ;恢复bpretoutputdec endp ;十进制输出函数结show proc ;输出运算式函数push bx ;把运算结果保存起来 mov bx,si ;第一个数放在si中 call outputdeccmp bp,3 ;是否为减号jz sl0cmp bp,2jz sl0lea dx,mess5mov ah,09hint 21hjmp sl1sl0:lea dx,mess4mov ah,09hint 21hsl1:mov bx,di ;第二个数放在di中 call outputdeclea dx,mess6mov ah,09hint 21hcmp bp,3jnz sl2lea dx,mess4mov ah,09hint 21hsl2:pop bx ;得到运算结果call outputdeccall crlfretshow endp ;输出运算式函数结束crlf proc ;回车换行函数push axpush dxmov ah,02hmov dl,0dhint 21hmov dl,0ahint 21h ;ah值被改变pop dxpop axretcrlf endp ;回车换行函数结束code ends ;代码段结束end main ;程序结束4.2 执行结果4.2.1 测试方法本次测试我们采用的是通过菜单形式,输出选择项,然后根据提示信息,输入相关数字,进行举例测试。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
时序电路逻辑设计
实验人:周铮班级:中法1202班学号:U201215676
一实验目的
1.掌握用SSI实现简单组合逻辑电路的方法。
2.掌握简单数字电路的安装与测试技术。
3.熟悉使用Verilog HDL描述组合逻辑电路的方法,以及EDA仿真技术。
二实验器件
计算机,可编程实验板
三实验内容
十进制加减可逆计数器设计
功能要求:
拨码开关键SW1为自动可逆加减功能键,当SW1为HIGH时,计数器实现自动可逆模十加减计数功能,即4个七段数码管上几乎同步显示0—1—2—3—4—...9—8—7—...0—1...的模十自动可逆加减计数结果;当SW1为LOW时,计数器按拨码开关键SW0的选择分别执行加减计数功能。
即当SW0为HIGH时,计数器实现模十加计数功能,即4个七段数码管上几乎同步显示0—1—2—3—4—...9——0—1...的模十加计数结果;当SW0为LOW时,计数器实现模十减计数功能,即4个七段数码管上几乎同步显示9—8—7—...—1—0— (9)
—8—7…的模十减计数结果。
四实验设计
1.原理设计
脉冲发生电路采用555定时器组成的多谐振荡器振荡产生周期为1s的矩形脉冲,从而为计数器提供触发信号。
其中,可以通过R1,R2,C来控制充放电的时间。
加/减计数控制电路主要由74LS138构成。
74LS138芯片是常用的3-8线译码器,常用在单片机和数字电路的译码电路中,74LS138的引脚排列及
真值表如图
计数单元电路主要由十进制计数器74LS192构成。
74LS192是同步十进制可逆计数器,它具有双时钟输入,并具有清除和置数等功能,其引脚排列图如图
功能表如图
2.模拟仿真
用Verilog HDL语言设计二通道数据选择器实验程序如下:
①实验代码
module a(
input clk,
input SW1,
input SW0,
input clear,
input reset,
output reg[3:0] s1_reg,
output reg[6:0] segdat_reg
);
reg[26:0] counter;
reg[3:0]q;
reg x;
always@(posedge clk)
begin
if(clear) begin
s1_reg<=0;
counter<=0;
end
else
counter<=counter+1;
end
always@(posedge counter[26])
begin
if (reset) begin
q<=0;
x<=0;
end
else
begin
case(SW1)
1'd1:begin
case(x)
1'd0: begin
if(q==4'd8)
x<=1;
q<=q+1;
end
1'd1: begin
if(q==4'd1)
x<=0;
q<=q-1;
end
endcase
end
1'd0:begin
case(SW0)
1'd0:begin
if(q==4'd0)
q<=4'd9;
else
q<=q-1;
end
1'd1:begin
if(q==4'd9)
q<=4'd0;
else
q<=q+1;
end
endcase
end
endcase
end
end
always@(q) // 数码管显示处理
begin
case(q)
4'h0:segdat_reg = 7'b0000001; //0
4'h1:segdat_reg = 7'b1001111; //1
4'h2:segdat_reg = 7'b0010010; //2
4'h3:segdat_reg = 7'b0000110; //3
4'h4:segdat_reg = 7'b1001100; //4
4'h5:segdat_reg = 7'b0100100; //5
4'h6:segdat_reg = 7'b0100000; //6
4'h7:segdat_reg = 7'b0001111; //7
4'h8:segdat_reg = 7'b0000000; //8
4'h9:segdat_reg = 7'b0000100; //9
default:segdat_reg=7'b0111000; //F
endcase
end
endmodule
②测试文件test代码
module test;
// Inputs
reg clk;
reg SW1;
reg SW0;
reg clear;
reg reset;
// Outputs
wire [3:0] s1_reg;
wire [6:0] segdat_reg;
// Instantiate the Unit Under Test (UUT)
a uut (
.clk(clk),
.SW1(SW1),
.SW0(SW0),
.clear(clear),
.reset(reset),
.s1_reg(s1_reg),
.segdat_reg(segdat_reg)
);
initial begin
// Initialize Inputs
clk = 0;
SW1 = 0;
SW0 = 1;
clear = 1;
reset = 1;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
end
endmodule
③管脚设置ucf文件代码
# PlanAhead Generated physical constraints
NET "SW0" LOC = P11;
NET "SW1" LOC = L3;
NET "clear" LOC = K3;
NET "clk" LOC = B8;
NET "reset" LOC = B4;
NET "segdat_reg[0]" LOC = M12;
NET "segdat_reg[1]" LOC = L13;
NET "segdat_reg[2]" LOC = P12;
NET "segdat_reg[3]" LOC = N11;
NET "segdat_reg[4]" LOC = N14;
NET "segdat_reg[5]" LOC = H12;
NET "segdat_reg[6]" LOC = L14;
NET "s1_reg[0]" LOC = F12;
NET "s1_reg[1]" LOC = J12;
NET "s1_reg[2]" LOC = M13;
NET "s1_reg[3]" LOC = K14;
# PlanAhead Generated IO constraints
NET "clk" SLEW = FAST;
④模拟仿真顶层原理图
⑤模拟仿真波形图
五实验心得
本次实验要求用Verilog HDL语言做出十进制可逆加减计数器并进行模拟仿真,其中在代码部分出现多次bug,后经过仔细检查发现是测试文件未加限制的原因,最终做出了模拟仿真。