武汉绘芯科技有限公司欢迎您!
10余年经验沉淀展览展示运动控制的专家
全国咨询热线:027-87052087
联系我们
武汉绘芯科技有限公司
电话:027-87052087
手机:13329706647
邮箱:956693667@qq.com
地址:武汉市江夏区藏龙岛谭湖一路8号
联系人:黄先生
您的位置: 滑轨屏|绘芯科技 > 知识库 >
知识库

简单的电子秒表

日期:2016-07-30 15:17:51 来源:未知 点击

 

 

一、                设计内容与要求

设计一个简单的电子秒表(按一下钮启动,再按一个停止,再按一下清零,周而复始。)最小计时单位0.01S,即可显示XX.XX(秒、百分之一秒)。设计要求如下:

1)由键盘和8255作为输入部分

2)用七段数码管或液晶显示屏来显示时间

3)由82538259构成计时信号,通过中断完成启动计时、停止计时和动态刷新显示。

设计思想

电子秒表要实现的功能:用键盘中断来控制整个程序,按一下回车键启动电子秒表,再按一下暂停,按一下ESC键清零,用七段数码管显示时间。整个程序涉及到825582538259三个芯片。8253OUT2CLK2分别连接8259IRQ7PCLK8253GATE2连接正5伏电压,采用计数器2每隔0.01秒产生一次中断并且计数,写入以偏移地址4000H开始的4个内存单元,然后利用8255将内存单元的数据输出到七段数码管。由于键盘中断优先于82597号中断,所以程序只有在按一下回车键才启动电子秒表,再按一下暂停,按一下ESC键清零,如果超出了60秒,整个程序自动重新开始。

                              A

五、   

数码管

 

 
     所用芯片工作原理

8255接口电路在CPUI/O设备之间起着信号的变换和传输的作用。 任何接口电路与CPU之间的信息传输方式都是并行的,即CPU与接口电路之间以数据字节/字为单位传送信息。接口电路与I/O设备之间的信息传送方式,有并行和串行两种,相应的接口电路称为并行接口和串行接口。
   并行接口是在多根数据线上,以数据字节/字与I/O设备交换信息。
  在输入过程中,输入设备把数据送给接口,并且使状态线“输入准备好”有效。接口把数据存放在“输入缓冲寄存器”中,同时使“输入回答”线有效,作为对外设的响应。外设在收到这个回答信号后,就撤消数据和“输入准备好”信号。数据到达接口中后,接口会在“状态寄存器”中设置输入准备好标志,或者向CPU发一个中断请求。CPU可用查询方式或中断方式从接口中读取数据。接口中的数据被读取后,接口会自动清除状态寄存器中的标志,且撤消对CPU的中断请求。
  在输出过程中,每当输出寄存器可以接收数据,接口就会将状态寄存器中“输出准备好”状态置1或向CPU发一个中断请求,CPU可用查询或中断方式向接口输出数据。当CPU输出的数据到达接口后,接口会清除“输出准备好”状态,把数据送往外设,并向外设发一个“数据输出准备好”信号。外设受到驱动后,便接收数据,并向接口电路发一个“输出回答”信号,接口收到该回答信号后,又将状态寄存器中“输出准备好”置位,以便CPU输出下一个数据。

8253CLK信号进行1计数。首先CPU控制字”,写入控制寄存器,把计数初始值写入初值寄存器”,然后, 定时/计数器按控制字要求计数。计数从计数初始值 开始,每当CLK信号出现一次,计数值减1,当计数值减为0时,从OUT端输出规定的信号(具体形式与工作模式有关)。当CLK信号出现时,计数值是否减1(即是否计数),受到门控信号”GATE的影响,一般,仅当GATE有效时,才减1.门控信号GATE如何影响计数操作,以及输出端OUT在各种情况下输出的信号形式与定时/计数器的工作模式有关。

82591. IR线上提出了中断请求的中断源,即出现请求,IRR中断请求寄存器(共有8D7D0)对应于连接在IR0IR7线上的外设的中断请求,哪一根输入线有请求,哪一根输入线就置1
2.
OCW1IMR中断屏蔽寄存器)未使该中断请求屏蔽(对应位为0时不屏蔽),该请求被送入PR(优先权分析器)比较。否则,不送入PR比较。
3. PR
把新进入的请求与ISR(服务中寄存器)中正在被处理的中断进行比较。如果新进入的请求优先级较低,则8259不向CPU提出请求。如果新进入的请求优先级较高,则8259使INT引脚输出高电平,向CPU提出请求。
4.
如果CPU内部的标志寄存器中的IF(中断允许标志)为0CPU不响应该请求。若IF=1CPU在执行完当前指令后,从CPUINTA引脚上向8259发出两个负脉冲。
5.
第一个 INTA负脉冲到达8259时,8259完成以下三项工作:
 a.使IRR(中断请求寄存器)的锁存功能失效。这样一来,在IR7IR0上的请求信号就不会被8259接收。直到第二个INTA负脉冲到达8259时,才又使IRR的锁存功能有效。
 b.使ISR(服务中寄存器)中的相应位置1
 c.使IRR中的相应位清0
6.
第二个INTA负脉冲到达8259时,8259完成以下工作:
 a.将中断类型码(ICW2中的值)送到数据总线上,CPU将其保存在“内部暂存器”中。
 b.如果ICW4(它设定级中断联方式之特定完全嵌套方式,将在8259的工作方式中详述ICW4)中设置了中断自动结束方式,则将ISR的相应位清0

 

 

六、    实验连线图

 

 

8255接线图

 

七、程序流程图

 

 

 

 

 

调用显示程序

 

 

八、程序源代码

主程序:

push ds             ;保存数据段                                        

mov ax,0000                                           

mov ds,ax                       ;数据段清零           

mov ax,offset irq7      ;取中断程序入口地址                      

add ax,2000              ;加装时IP2000地址           

mov si,003c              ;填8259中断7中断矢量                 

mov w[si],ax         ;填偏移量矢量                        

mov ax,0000             ;段地址CS0000H                      

mov si,003e                                            

mov w[si],ax         ;填段地址矢量                             

pop ds                      ;弹栈                            

in al,21                     ;读8259中断屏蔽字                   

and al,7f                   ;开8259中断7              

out 21,al                                    

mov al,b4                       ;8253的计数器2为方式2,采用二制计数,先低后高写入计数值  10110100   

out 43,al                 ;写入方式控制字                      

mov ax,2e9c               0010 1110 1001 1100B  11932D         

out 42,al                 ;写入低字节计数值       1001 1100           

mov al,ah                                

out 42,al                 ;写入高字节计数值 0010 1110

mov al,81               ;8255A口为方式0输出,B口为方式0输出,C口下部输入

                 1000 0001

out 63,al     ;写方式控制字

call first                   ;调用first子程序,赋计数初值

begi:hlt                           延时等待

sti                                ;开中断

mov ah,01

int 16                     ;检测是否按了键盘

jz begi

mov ah,00                ;读键值

int 16

cmp al,0d         ;是否按了回车

jnz A1                     

mov si,4000             

not [si+04]              ;偏移地址为4004的内存单元内容取

jmp begi

A1:cmp al,1b          ;是否按了ESC

jnz A2

call first                   ;重新赋初值,相当于清零

A2:jmp begi

 

中断程序:

irq7:call  disp          ;调用disp子程序,用来在数码管显示数据      

       mov  si,4000              

       cmp [si+04],00  ;判断是否按了第2次回车键

       je  A4

       call  addn              ;调用addn子程序,用来计数

A4:mov  al,20

       out  20,al

       cli                          ;关中断

       iret                         ;返回

 

addn程序:

addn:mov  si,4000

add  [si+03],01   ;百分之一秒加1

cmp  [si+03],0a     ;判断是否大于10

jz  A5

jmp  A9

A5:mov  [si+03],00

Add  [si+02],01  ;十分之一秒加1

cmp  [si+02],0a      ;判断是否大于10

jz  A6

jmp A9

A6:mov  [si+02],00

add  [si+01],01  ;秒位加1

cmp  [si+01],0a           ;判断是否大于10 

jz  A7

jmp  A9

A7:mov  [si+01],00

add  [si],01   ;十秒位加1

cmp  [si],06   ;判断是否大于6

jz   A8

jmp  A9

A8:mov  [si],00            ;大于6000重新开始

A9: ret

 

赋初值程序:

first:mov si,4000

       mov al,00

       mov [si],al

mov [si+01],al

mov [si+02],al

mov [si+03],al

mov [si+04],al

ret

显示程序:

disp:push  ax                 ;保存AX

       mov  si,4000               ;指向数据缓冲区

       mov  dl,f7                   1111 0111   指向数码管

       mov  al,dl           ;al=1111 0111

again:out  60,al                 ;写端口A

mov  al,[si]

mov  bx,4100            ;指向数码缓冲区    bx=0100 0001 0000 0000

and  ax,00ff                           ax=0000 0000 al

add  bx,ax                   ;得到显示代码      bx=0100 0001 al

mov  al,[bx]

out  61,al                    ;写端口B

call  dally                    :调用延时程序dally

inc  si

mov  al,dl

test  al,01

jz  out

ror  al,1                      ;指向下一个数码管

mov  dl,al

jmp  again

out: pop  ax                            ;弹出AX

ret

 

dally:push  cx                     ;延时程序

     push  ax

mov  cx,0010

t1 :mov  ax,0010

t2 dec  ax

jnz  t2

loop  t1

pop  ax

pop  cx

 

ret

 

 

数码缓冲区:

0000:4000      3f,06,5b4f,66,6d,7d,07,7f,6f

 

九、设计心得

  通过本次课程设计,对微机接口的认识有了更一步的提高。对825582538259三个芯片,有了一定了解。忙了几天,终于有了成果,心里特别高兴。不过在设计过程中也暴露出许多的问题,例如对实验设备的不熟悉,汇编语言掌握不够等等。正是由于这些问题,使自己的编程能力提高了。希望自己在期末考试中,微机接口有更大的收获。

 


在线客服
联系方式

热线电话

13329706647

上班时间

周一到周五

公司电话

027-87052087

二维码
线