1、1.2 设计期望实现的目标 在计算机应用系统中,常常需要实时时钟,有时也需要对外部事件进行计数,而可编程计数器的计数范围可由软件来设定改变,不占用CPU大量时间,所以使用方便,且功能较强。本次课程设计所选题目为基于8253的脉冲计数器/分频器设计,设计的基本目的是:(1)设计一个能对2MHZ 以下的脉冲信号进行分频的器件。 (2)分频系数由试验箱中的K1K8逻辑开关控制输入 (3)由LED数码管显示分频系数,为简便设计本次设计只使用四个数码管,即分频系数最大值为9999(十进制) 1.3 目标的可行性分析 通过微机原理与接口课程的学习,在理论上设计目标是可以实现的,结合学校用的AEDK8688
2、ET实验教学系统在设计合适的软硬件模块能够实现此课程设计的目标。1.4 使用的技术和方法 通过在AEDK8688ET实验教学系统上搭建硬件环境,通过外设计算机提供软件编译环境两者结合起来,由汇编实现编程控制。第二章 硬件设计2.1 设计原理与分析一、分频(8253芯片) 可编程定时器/计数器8253可以作为分频器使用。让其工作在方式3,在这种方式下,8253可以根据输入的分频系数N,把从CLK口输入的高频率脉冲进行分频。分频的具体方法是,先输入分频系数,保存起来,开始时,OUT输出的是高电平,向WR输入一个负脉冲后,从该负脉冲上升后CLK第一个下降沿开始,每过一个CLK输入波形的周期将输入的分
3、频系数N减一,当减到分频系数的一半N/2时,OUT输出低电平,分频系数减到1时,再输入高电平,并重复,这样,频系数为N,OUT就输出周期为CLK周期的N倍,换句话说,就是把CLK方波的频 率分成了原来的1/N。 由于8253输入的最高频率是2MHZ,分频系数最大输入的数值是65536(采用十进制),而此次实验N9999,分频后频率将近200HZ,这样的频率肉眼是无法分开的,输入小一点的值就更看不出来了,所以,要把2MHZ的脉冲经过两次分频,才能达到肉眼可以分辨的程度。所以,这里要用到8253的两个计数器,第一个计时器的CLK输入接2MHZ的固定频率脉冲,OUT口接第二个计数器的CLK输入接口,
4、OUT口输出。二、输入输出(8255A芯片) 分频器的输入输出要用到8255A芯片。 在本设计中,8255A设置为方式0,方式0的工作特点是,不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作输入或输出。在方式0下,CPU采用无条件读写方式与8255A交换数据,8255的每个口都作为基本的输入/输出口,用来在设计中输入和输出显示分频系数,其中PC口接8位开关,用来输入分频系数。PB和PA用来输出显示,一个位选,一个段选,在LED数码管上显示分频系数。因本设计中的分频系数在29999,所以要用到4位LED显示位。PC接8位开关,头4位用来输入二进制数值,第五六位输入用来表示这次输入
5、的数值是十进制分频系数的哪一位。第七八位用来控制输入输出。PB口用来输出位选信号,PB口输出的信号决定把当前要显示的数值显示在LED显示屏四位数值的哪一位上。PA口用来输出要输出的数值。四位数值经过程序组成四位的十进制数值,作为分频系数。2.2 硬件功能模块实验系统: 本实验系统由AEDK8688ET实验机外配计算机和其他一些附件及选配件组成:AEDK688ET教学实验系统集微处理器8088和外配PC/80286/386/486/586及其兼容机于一体的高科技实验系统,具有实验、开发、自诊断等功能。该实验系统自带键盘、八位七段数码管、微处理器8088和RS-232通讯接口,可以接PC机做实验,
6、也可以无须任何辅助设备而独立做实验。综合下来,它具有如下性能特点:独立运行的单板机配置方式。ISA总线配置方式。串行监控配置方式。本次设计将用到的主要模块:(1)可编程定时/计数器模块8253 (8253内部结构)8253芯片由以下几个部分组成:(1 )数据总线缓冲器(8位、三态、双向; (2 )读/写控制逻辑: CS:片选信号,低电平有效; RD:读信号,低电平有效; WR:写信号,低电平有效 A1,A0:端口选择信号 (3) 三个通道( 0 2); (4)一个控制字寄存器;8253芯片一些主要功能设置如下:(1)读/写控制逻辑及控制引脚CS* A1 A0I/O地址读操作RD*写操作WR*0
7、 0 00 0 10 1 00 1 140H41H42H43H读计数器0读计数器1读计数器2无操作写计数器0写计数器1写计数器2写控制字(2)控制字寄存器,控制字格式如下:(3)计数器 8253内部共有三个一样的计数器,其每个计数器的引脚作用:a.CLK时钟输入信号在计数过程中,此引脚上每输入一个时钟信号,计数器的计数值减1b. GATE门控输入信号控制计数器工作,GATE为高电平时计数器工作。c. OUT计数器输出信号当一次计数过程结束(计数值减为0或1),OUT引脚上将产生一个输出信号(4)六种工作方式1方式0计数结束中断方式2方式1可编程但稳态方式3方式2频率发生器4方式3方波发生器OU
8、T输出方波,若N为偶数,则输出对称波,前N/2计数器期间OUT输出高电平,后N/2计数周期OUT输出低电平 :若n为奇数,则前(N+1)/2计数器期间OUT输出高电平,后(N-1)/2计数周期OUT输出低电平。5. 方式4软件触发选通6方式5-硬件触发选通 (5)编程设置方式1.写控制字:MOV DX,控制寄存器地址2.写计数值:MOV AL,DATA3.写入 :MOV DX,AL(2) 频率源电路该电路对从8284的第5脚来的4.77MHZ的频率进行分频以产生适合串行通讯波特率的频率以及供其它分频器和A/D转换器等电路使用的频率。(3)可编程并行口8255模块一、8255A的基本性能8255
9、A具有三个相互独立的输入/输出通道:通道A、通道B、通道C。A,B,C三通道可以联合使用,构成单线、双线或三线联络信号的并行接口。此时C口完全服务于A、B口。A口有三种工作方式:方式0、方式1、方式2。B口有两种工作方式:方式0、方式1。二、8255A内部结构8255A内部结构由以下四部分组成:数据端口A、B、C;A组控制和B组控制;读/写控制逻辑电路;数据总线缓冲器。三 方式选择控制字格式:(C端口置1置0控制字)四,各方式功能方式0是一种基本输入或输出方式,它适用于无需握手信号的简单输入输出应用场合, 端口A、B、C都可作为输入或输出数据使用,输出有锁存而输入无锁存。方式1也称选通的输入/
10、输出方式。在这种方式下,无论是输入还是输出都通过应答关系实现, 这时端口A或B用作数据口,端口C的一部分引脚用作握手信号线与中断请求线3.3 设计原理图与PCB (原理图) (译码电路)YO地址-204H207HY3地址-214H217H (PCB版)第三章 软件设计3.1 程序分析 输入数值,要初始化8255芯片。使其以PC口为输入,PB口输出段选,PA口输出位选,控制字为10001001b。然后输入PC口的值,判断PC口的第八位是否等于1,如果等于1,则设置初值,否则循环,继续判断PC口的第八位。这样,把PC7扳为1,就表示开关的数值写到内存里了。前面已经说道了,PC口的前四位,即PC0,
11、PC1,PC2,PC3是用二进制表示要输入的数,第五六位,即PC4,PC5用来表示这个数是整个四位十进制数的哪一位,所以,要把这两个数分开,分别放到两个寄存器中。这里用到的方法是,先把PC口的数字送到AL中,然后把AL复制到AH,它们组成了AX。然后把AX和二进制数0000111100110000进行与运算,这样,AH中保留了原先PC口的前四位数据,AL中保留了PC口的第五六位数,这样,就可以把AH中的数按照AL的数值把它放到四位十进制计数值的相应的位。这里说下PC6即PC口第七位的作用,这一位是用来显示数据的。把PC6扳为1,则调用显示函数。 输入完数据以后,计数值的四位数字还是分散的四个数
12、,要把它们结合成一个四位数。之前输入的四个数分别在以BEGINT为首地址的四个单元内,这里调用together函数,先去第四位数(左边第一位数),把它乘以10,再加上第三位数,然后把它们的和乘以10,再加上第二位数,再乘以10,再加上第一位数,这样就成了一个整的十进制数N。在程序设计中,这个过程用三个循环来实现,具体见后面的程序。 上面的步骤完成后,8253计时器开始分频,要分两次,先使用计数器#0,把它进行初始化,让它工作再模式3,控制字为00110101B,然后输入计数初值N,这是第一次分频。然后初始化计数器#1,也让其工作再模式3,BCD码计数,然后输入计数初值,完成第二次分频。分频之后
13、,判断PC6是否等于1,如果等于0,从新读取计数初值。 前面提到了数码管显示子程序,这里介绍它执行的过程。前面再PC口输入的数据,一一存到以BEGINT为首地址的四个单元内。再这里,按位一次再LED数码管上显示这四个数。先显示第一位(右边第一位),此时位选码位11111110,(要显示右边第二位就是11111101,依次类推)由PA口送出。程序将BEGINT的第一位数据和数码管显示数组相结合,生产相应的段选码,送到PB口进行段选,即再数码管显示屏上的第一位显示BEGINT的第一位数字。然后,将位选吗循环左移一位,来显示第二位数。这样,循环执行,知道显示四个数。3.2 程序代码(由于对汇编语言的
14、生疏,在编写中遇到极大的麻烦,因此查阅借鉴引用了部分已有程序代码)源程序:.MODEL TINY .STACK 100 .DATA COM_ADD DW 217H ;控制口偏移量 PA_ADD DW 214H ;PA口偏移量 PB_ADD DW215H ;PB口偏移量 PC_ADD DW 216H ;PC口偏移量 COM_ADDR DW 207H T0_ADDR DW 204H T1_ADDR DW205H T2_ADDR DW206H TIME db 3fh,06h,5bh,4fh,66h,6dh,7dh,27h,7fh,6fh,76h,76h,76h,76h,76h,76h ;段选码表 B
15、EGINT db 00h,00h,00h,00h NUMBER dw 0000h mov al,10001001b ;8255芯片初始化 以PC口为输入,PB口输出段选,PA口输出位选 mov dx,COM_ADD out dx,al ;将初始化信息写入8255芯片控制口 loop3: mov dx,PC_ADD ;取8255C口地址 in al,dx ;将从C口打入的开关量输入至AL and al,80h ;取PC口第七位的状态 cmp al,80h ;判断PC7=1? je settime ;等于1则设置初值 loop4: call TDISP ;否则显示编码 jmp loop3 ;继续查
16、看C口状态 ;设置初值子程序 settime: mov bx,offset begint ;BX存放的要显示的数据值的偏移地址 送pc口地址 in al,dx mov ah,al ;低位不变,ah、al中内容用于判断和存据 and ax,0f70h ;0000111100110000b,屏蔽保4,5位后,用于位选LED八位的高低位 mov cl,4 ;设置左移位数 shr al,cl ;循环左移4位00110000, mov cx,0 ;CX清零,利用低8位传送 mov cl,al ;循环后对应00,01,10,11 add bx,cx ;BX里存放是从逻辑开关打入的数据的偏移地址 bx是be
17、gint的首地址,加上cx表示第几个数 mov byte ptr bx,ah ;将AH中的内容以字节的形式存放到指定元 and al,40h ;取PC口第六位的状态 cmp al,40h ;判断PC6=1? je goon 转换为16位数据并显示 jmp loop3 goon: CALL TOGETHER mov dx,com_addr mov al,35h 计数器#0设置在模式2 mov dx,T0_addr mov ax,number out dx,al mov al,ah mov al,77h 计数器#1设置在模式3状态 mov dx,T1_addr START1: mov dx, PC
18、_ADD ; in al ,dx je START1 数码管显示子程序,完成显示功能。 TDISP proc ;显示4位10进制,因此设四次循环 loop1: mov si, offset begint mov cx,4 mov ah,11111110b ;设置位选码,即LED0显示,如FEFFH loop2: mov al, byte ptr si mov bx, offset time ;取 time偏移地址 如 0151H xlat ;查数据段表,al+bx-al al决定是time 中的第几个数 mov dx,PB_ADD ;送PB口地址段选 mov al,ah ;送位选码 mov d
19、x,PA_ADD ;送PA口地址进行位选 call delay ;执行子程序,显示灯 mov al,0ffh ;禁止显示 add si,1 rol ah,1 ;设置下次显示的位选码 loop loop2 ;循环 从开关读取另一组16位二进制数据 ret TDISP endp 延迟子程序 delay proc ;延迟子程序,实现延时的功能。 push cx mov cx,100h loop5: nop loop loop5 pop cx delay endp together proc ;计算分频值子程序 lea si,begint add si,3 mov bx,0 loop8: mov ax
20、,si cbw mov dx,10 xchg ax,bx mul dx add bx,ax dec si loop loop8 mov number,bx together endp Exit: MOV AH, 4CH INT 21H END START 编程感触:汇编语言作为最基本的程序语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。学习汇编语言,向上可以理解软件,向下能够感知硬件,是我们理解整个计算机微机系统的最佳起点和最有效途径。第四章 总结本次课程设计的结果基本达到了要求,实现了由二进制开关输入数据,并转换为十进制数的字型码输出
21、,循环显示编码结果。利用指示灯来显示分频的效果,可以输入数值来改变指示灯闪烁的频率。这次微机原理与接口技术的课程设计既有硬件设计,又有软件设计,而且两者有机的结合在一起,是一次意义深刻的经历。在两个星期的设计时间里,我们从刚开始的不知如何下手到慢慢的找到门道并对课题原理也渐渐理解,在设计的过程中我们明白到遇到问题不是不加思考的就问老师问学长,而是通过自己的思考探索查阅资料并得以解决,这对我们的独立解决问题的能力有很大的帮助,折射到我们面对生活也是一样的道理。在课程设计的过程中也遇到很多的困难,如对汇编语言的不熟悉,实验系统的不稳定性等这些问题,在老师与研究生学长的指导下加上自己查阅资料大部分都
22、得到解决。在设计初期并没有加入8255A以及LED显示的,后经学长的提示才加入进来,从而加大了设计的含金量,这也加大了设计实现难度,在时间上感到有些紧迫,但最后还是完成了设计目标,同时,通过这次课程设计对微机原理这门课程的认识也得到了加深,初学课程是感觉摸不着头脑,面对陌生的名词,陌生的汇编语言感觉这就是最难的课程,但随着学习的深入感觉到原来这是一门都么有趣的课程,通过学习能对生活中的一些设备的认识不再是停留在它的外观,而是有了科学的理解等等。 在今后的学习中我们更应该注重理论与实践的结合,努力加强自己的综合素质培养。参考文献1 朱晓华.微机原理与接口技术(第二版)2 欧青立,沈洪远.微机原理与接口技术实验指导书3 XX致谢 最后在此感谢各位指导老师以及研究生学长的帮助与指导。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1