资源描述
电子秒表概述此电子秒表,是在TNDMD教学系统上实现的,其计时精确度为0.01s。所使用的芯片主要有8253定时计数器、8255A并行接口电路芯片、8259A中断控制器等。通过系统中的开关键KK1和KK2可实现开始计时,暂停计时,继续计时,清零功能,用系统中的四片七段数码管将计得的时间以XXXX(秒百分秒,其中秒占两位,百分秒两位)的形式显示给用户。计时准确度与现实时间相符。一、设计要求按一下kk1开关启动,再按暂停,按kk2清零,周而复始。最小计时单位0.01S,即可显示XXXX(秒百分之一秒)。设计要求如下:(1)由键盘和8255作为输入部分(2)用七段数码管或液晶显示屏来显示时间(3)由8253和8259构成计时信号,通过中断完成启动计时、停止计时和动态刷新显示。二、设计思想1、为了试验秒表的准确计时功能,此秒表精确到了0.01s,为了得到0.01s的时间脉冲,使用8253芯片来产生,又由于可以系统自动产生1.1932MHZ的时钟频率,因此可以通过设定计数初值为2E9c,并设定8253工作在方式3来获得所需的周期为10ms的时间脉冲软件操作:首先向8253的控制端口43H输入控制字B6H来设置计数器2计时,工作在方式3,循环计数,产生10ms的时间脉冲,然后再像计数器2端口42H输入计数初值2e9cH,先写入低八位数据,再写入高八位数据硬件操作:唐都仪器8253芯片的CLK接bus总线上的OPCLK系统时钟信号,频率为1.1932MHZ,GATE门信号接+5v电源,out引脚接8259芯片的IRQ72、为了驱动数码管,需使用8255芯片,通过设定控制字,用其PB端口来驱动段,PA端口来驱动位,软件操作:向8255的控制端口63H输入控制字81H,使其三个端口都工作在方式0,PA(60H)端口的低四位用来驱动数码的位,PB端口(61H)用来驱动数码管的段,然后用E命令重新开辟一块内存区域,用来存放数码管0-9的字模3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH硬件操作:唐都仪器上的8255芯片的PA0PA3引脚接数码管的X4X1引脚,PB0PB7引脚接数码管的0DP引脚3、为了能够实现系统的中断调用,需使用8259芯片的IRQ2,IRQ6,IRQ7引脚,其中断向量分别为:0AH,0EH,0FH把三个中断服务程序的的入口地址分别填入这三个中断向量所指向的内存地址,IRQ2接KK1控制秒表的启动和暂停,IRQ6接KK2控制秒表的复位软件操作:IRQ2的中断向量乘以四得:0028H,然后向这个地址填入IRQ2服务程序的入口地址(mov 0028,IRQ2),然后向002a地址填入中断向量表的段地址:0000H,IRQ6的中断的首地址为:0038H,填入中断服务程序入口地址mov 0038,IRQ6,填入段地址mov 003a,0000H,IRQ7中断的首地址:003cH,填入中断服务程序入口地址:mov 003c,IRQ7,t填入段地址:mov 003e,0000H.三、设计所用芯片及工作原理1、8255芯片工作原理接口电路在CPU和I/O设备之间起着信号的变换和传输的作用。 任何接口电路与CPU之间的信息传输方式都是并行的,即CPU与接口电路之间以数据字节/字为单位传送信息。接口电路与I/O设备之间的信息传送方式,有并行和串行两种,相应的接口电路称为并行接口和串行接口。8255将一个8位的输入输出双向数据端口扩展为端口A,端口B,端口C 3个八位I/O双向传输端口,另加一个控制端口,因而其内部含有4个端口寄存器,3个I/O端口都有不同的工作方式,端口A可以工作在方式0,1,2;端口B只能工作在方式0,1;端口C工作在方式0,他们与I/O端口间的数据传输都是并行方式。2、8259芯片工作原理 1) 外部事件触发中断控制器8259A的某个中断请求引脚IRQX,其状态锁存在中断请求寄存器IRR中。2) 8259A判定中断屏蔽寄存器IMR是否允许此中断请求,若允许则做优先权判定。3) 若同时有几个中断源发出请求,8259A优先权判定电路会检测出当前优先级最高的中断请求位,获取相应的中断向量值N,并置位芯片内部中断服务寄存器ISR4) 8259A向CPU发中断请求信号INTR5) 如果CPU标志寄存器FLAGS中的中断允许标志位I置位,则CPU执行完当前一条指令后响应该中断并送出应答信号INTA。6) 中断控制器8259A收到该应答信号后立即将对应该中断源的中断向量号N送到系统数据总线上。7) CPU读入中断向量号N后查找中断向量表既可以转向相应的中断服务程序入口地址开始执行中断事务处理。8) CPU 完成中断服务后,向8259A送中断结束命令EOI,使中断服务寄存器ISR复位,从而结束本次中断,为下次中断做好准备3、8253芯片工作原理CLK信号进行“减1计数”。首先CPU把“控制字”,写入“控制寄存器”,把“计数初始值”写入“初值寄存器”,然后, 定时/计数器按控制字要求计数。计数从“计数初始值 开始,每当CLK信号出现一次,计数值减1,当计数值减为0时,从OUT端输出规定的信号(具体形式与工作模式有关)。当CLK信号出现时,计数值是否减1(即是否计数),受到“门控信号”GATE的影响,一般,仅当GATE有效时,才减1.门控信号GATE如何影响计数操作,以及输出端OUT在各种情况下输出的信号形式与定时/计数器的工作模式有关。四、系统接线图 GATE2 OUT28253 CLK2 5V8259IRQ7OPCLK1.193MHZ8253接线图8255PB7PB6PB5.PA3PA2PA1PA0数码管DPG.AX1X2X3X4 8255接线图IRQ6 IRQ28259KK1+KK2+8259接线图五、程序流程图开始8253初始化8259初始化8255初始化时间清零,状态标志位清零开中断主程序流程图调用屏显程序调用数码管显示程序发送EOI调用时间计算程序FLAG=0是否IRQ7中断服务程序标志位FLAG取反发送EOIIRQ2中断服务程序时间清零,FLAG清零发送EOIIRQ6中断服务程序六、程序源代码push ds ;数据段压栈mov ax,0000mov ds,ax;数据段清零mov ax,3000 ;IRQ7的绝对偏移地 (入口地址)mov si,003c ;IRQ7的中断向量首地址mov wsi,ax ;装载偏移地址mov ax,0000;中断向量表的段地址为0000Hmov si,003e ;源地址指针指向段地址装载点mov wsi,ax ;装载段地址mov ax,2700 ;IRQ6的绝对偏移地 (入口地址)mov si,0038 ;IRQ6的中断向量首地址mov wsi,ax ;装载偏移地址mov ax,0000;中断向量表的段地址为0000Hmov si,003a ;源地址指针指向段地址装载点mov wsi,ax ;装载段地址mov ax,2900 ;IRQ2的绝对偏移地 (入口地址)mov si,0028 ;IRQ2的中断向量首地址mov wsi,ax ;装载偏移地址mov ax,0000 ;中断向量表的段地址为0000Hmov si,002a ;源地址指针指向段地址装载点mov wsi,ax ;装载段地址pop ds ;弹栈mov al,13out 20,almov al,08out 21,al;对8259进行编程开放IRQ2,IRQ6,IRQ7mov al,09out 21,almov al,39out 21,almov al,b6 ;8253控制字,以方式3产生0.01s方波out 43,al ;写入控制字mov ax,2e9c ;计数初值,用来产生0.01s方波out 42,al ;写入低8位计数初值mov al,ahout 42,al ;写入高8两为计数初值mov al,81 ;8255控制字,是三个端口都工作在方式0,PA0-PA3端口驱动位,PB0-PB7驱动位out 63,al ; 写入控制字call 2500 ;初始化时间和标志位2064:HLT ;停机等待STI ;开中断jmp 20642500: mov si 4000 mov al,00mov si,al ;时间显示初值置零mov si+01,almov si+02,almov si+03,almov si+04,al ;状态标志位置零RET ;返回主程序2700: mov si,4000 ;IRQ6中断服务程序not si+04 ;状态位取反,用来控制启动和暂停计时mov al,20out 20,al ;发送中断结束控制字IRET ;中断返回2900: call 2500 ;IRQ2中断服务程序,初始化状态标志位和时间初始值mov al,20out 20,alIRET3000: call 3100 ;调用屏幕显示程序 IRQ7中断服务程序call 3500 ;调用数码管显示程序mov si,4000cmp si+04,00 ;判断状态标志位是否为零jz 3012 ;为零跳转,结束中断服务程序call 3300 ;不为零调用秒表显示程序,计算时间显示方式3012: mov al,20out 20,alIRET3100: mov si,4000 ;屏幕显示程序mov ah,03 ;读光标位置mov bh,01int 10 ;bios功能调用mov ah,0E mov al,siadd al,30 ;转化成ascll码int 10 ;显示数字mov al,si+1add al,30int 10mov al,2eint 10mov al,si+02add al,30int 10mov al,si+03add al,30int 10RET ;返回主程序3300: mov si,4000addsi+03,01 ;10ms处数字,加一用来设置进位(显示只是0-9的数字)cmpsi+03,0ajz 330f ;等于10进位,跳转到100ms位jmp 3340 ;不等返回主程序330f:mov si+03,00 ;10ms位置零add si+02,01cmp si+02,0ajz 331fjmp 3340331f: mov si+02,00add si+01,01cmp si+01,0ajz 332fjmp 3340332f:mov si+01,00add si,01cmp si,06 ;判断10s位是否大于6jz 333djmp 3340333d:mov si,003340:RET3350:push axmov si,4000mov dl,f7;设定显示数码管第一位mov al,dl3508out 60,al ;PA端口驱动位mov al,simov bx,4100 ;指向字模数据区and ax,00ff ;屏蔽高八位add bx,ax ;指向此时数据的字模mov al,bx ;将字模取出,赋给alout 61,al ;pb端口驱动段,显示字模对应的数字call 352a ;调用延时程序inc si ;si加1,指向下一个要显示的数据mov al,dl test al,01 ;测试是否要显示第二位数据,即al的低两位是否为01jz 3528 ;返回主程序,显示第二位数字ROR al,1 ;不等则循环右移,使11110111()变为mov dl,al jmp 3508 ;跳转,显示剩余的数据3528:pop axRET352A:push cx;延时程序mov cx,0010352E:mov ax,00103531:dec ax;双重循环延时jnz 3531loop 352Epop cxRET七、设计心得通过此秒表的设计,是我对8253,8255,8259这三个芯片有了一个更深刻的了解,也极大的激发了我对汇编这门语言的热情,此秒表拥有了一些基本功能:启动,暂停计时,复位,基本上达到了老师的要求,但是美中不足的是没有实现存储功能和键盘控制秒表的启动,暂停,复位和暂停存储,留下了一些遗憾,不过我会利用课余时间,去充实自己汇编方面的各种知识,一定要达到精通汇编的目的。
展开阅读全文