微机原理课程设计报告一、设计目的培养和锻炼在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力。
通过课程设计,要求熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机开发应用方面的初步训练。
掌握8255、8259、8253等芯片使用方法和编程方法,通过本次课程设计,学以致用,进一步理解所学的相关芯片的原理、内部结构、使用方法等,学会相关芯片实际应用及编程,系统中采用8086微处理器完成了电子秒表系统的独立设计。
同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。
二、设计内容设计一个可任意启动/停止的电子秒表,要求用6位LED数码显示,计时单位为1/100秒。
利用功能键进行启/停控制。
其功能为:上电后计时器清0,当第一次(或奇数次)按下启/停键时开始计数。
第2次(或偶数次)按下该键时停止计时,再一次按启/停键时清零后重新开始计时。
可用开关控制,也可用按键控制三、设计要求1、基本要求:1)设计可以显示1~60秒的无存储功能的秒表,最小单位为毫秒。
2)通过键盘按键控制秒表清零、暂停、继续,退出等。
其中数字0控制清零,数字1控制继续和退出。
2、提高要求:1)秒表可以分组存储、批量显示、倒计时等。
2)采用图像显示,界面精美,设置报警声等四、设计原理与硬件电路1、整体设计思想使用8253工作在方式0计数,对1/100S计数,并讲计数值写入bl中并与100比较若不相等,则将计数值装换为10进制后送8255控制端显示,如相等则1S计数程序加1之后并与59比较若不相等则将计数值装换为10进制后送8255控制端显示,如相等则1min计数程序加1之后并与59比较若不相等则将计数值装换为10进制后送8255控制端显示,如相等则计数程序加1之后产生溢出,跳转清零程序将计数清零,同时数码管清零。
2、使用各芯片的作用及工作原理1)定时器/计数器8253用系统8253定时器提供的55ms定时单位,设计秒表定时程序。
有关系统定时方法:PC机系统中的8253定时器0工作于方式3,外部提供一个时钟作为CLK 信号,频率:f=1.1931816MHz。
定时器0输出方波的频率:fout=1.1931816/65536=18.2Hz。
输出方波的周期Tout=1/18.2=54.945ms。
8253A每隔55ms引起一次中断,作为定时信号。
可用55945ms作基本计时单位。
用BIOS调用INT 1AH可以取得该定时单位。
例:1秒=18.2 (计时单位)8253的引脚图及硬件连接图如下图示:《8253引脚图》硬件连接图当A1A0分别为00 01 10 11时分别选中三个通道和控制字寄存器在8088系统中,8088的A1A0分别与8 253的A1A0相连在8086系统中,通常将8253的8位数据线与8086的低8位相连,即使用偶地址,所以8086的A2A1分别与8253的A1A0相连。
计数器(0 ~ 2)即三个计数器/定时器通道。
每个通道包括:8位控制字寄存器、16位计数初值寄存器、减一计数器和输出锁存器。
作定时器用:其CLK端上的输入脉冲应是标准的、精确的;作计数器用:对其CLK端上的脉冲计数,脉冲宽度可以不等。
采用减一计数器,为0时,从OUT端上输出一个脉冲定时时间 = 时钟脉冲周期X预置的计数初值。
控制功能表WR A1A0功能CSRD0 1 0 0 0 写计数器00 1 0 0 1 写计数器10 1 0 1 0 写计数器20 1 0 1 1 写控制字寄存器0 0 1 0 0 读计数器00 0 1 0 1 读计数器10 0 1 1 0 读计数器20 0 1 1 1 无操作1 X X X X 禁止使用0 1 1 X X 无操作每个通道:CLK 计数脉冲或标准脉冲输入端GATE 允许端,当GATE=1时允许计数UT 计数值为0时输出一个脉冲由于8253的读/写操作对系统时钟没有特殊的要求,因此它几乎可以应用与由任何一种微处理器组成的系统中,可作为可编程的方波频率发生器、分频器、实时时钟、事件计数器和单脉冲发生器等。
8253是一片具有三个独立的16位计数器通道的可编程定时器/计数器芯片。
每个通道都可以编程设定3种工作方式之一种;8253由以下几个部分组成:(1)数据总线缓冲器(8位、三态、双向);(2) 读/写控制逻辑;CS:片选信号,低电平有效;RD:读信号,低电平有效;WR:写信号,低电平有效A1A0:端口选择信号(3) 三个通道( 0 ~ 2),由A0,A1控制选择;(4) 一个控制寄存器;内部结构及引脚图:2)用可编程并行接口芯片8255的PA口以及PB口实现数码管输出,PC口实现按键实现数据显示输出8255 可编程外围接口芯片是 Intel 公司生产的通用并行I/O 接口芯片,它具有A、B、C 三个并行接口,并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。
CPU 和接口之间的数据传送总是并行的,即可以同时传递8 位、16 位、32 位等。
用+5V 单电源供电,能在以下三种方式下工作:方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。
8255 工作方式控制字和C口按位置位/ 复位控制字格式如图所示:3. 锁存器27374LS273是8位数据/地址锁存器,他是一种带清除功能的8D触发器,下面介绍一下他的管脚图功能表等资料。
(1).1脚是复位CLR,低电平有效,当1脚是低电平时,输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部输出0,即全部复位;(2).当1脚为高电平时,11(CLK)脚是锁存控制端,并且是上升沿触发锁存,当11脚有一个上升沿,立即锁存输入脚3、4、7、8、13、14、17、18的电平状态,并且立即呈现在在输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)上.74ls273管脚功能:1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。
4. 数据收发器245当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)*DIR=“1”,信号由 A 向B 传输;(发送)当/CE为高电平时,A、B均为高阻态5、译码器74ls15474ls154为4—16线制译码器其引脚图如下图所示6. 7段数码管数码管要正常显示,就要来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
静态显示驱动静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
动态显示驱动数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。
开 始等于1S不等等于59不等等于59不等等于231S 计数60S 计数60min 计数24h 计数BVD 处 理产 生 溢 出清 空BCD 码调整指令10进制显示a1 equ 0000hb1 equ 0002hc1 equ 0004hctr1 equ 0006h ;8255各端口地址a2 equ 0200h ;8253计数器0端口地址ctr2 equ 0206h ;8253控制端口地址a3 equ 0100hdata segment; keynum db 0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH,0EBH, 0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77Htab db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H ,7CH,39H,5EH,79H,71Hbuf db 0,0,0,0buf1 db 0,0,0,0,0,0,0,0buf2 db 0,0;前为第一开关次数buf3 db 80 dup(?)data endscode segment 'code'assume ds:data,cs:codestart: mov ax,datamov ds,ax;设中断入口地址设置mov ax,0mov es,axmov di,08mov ax,offset intr_keycldstoswmov ax,seg intr_keystoswmov ax,datamov es,ax;8255写入控制字mov al,10001001b ;A口B口输出显示,C口高四位低四位输入mov dx,ctr1out dx,aln3: call jishujmp n3n2: lea si,buf2mov bh,00hmov bl,1h[si]lea di,buf3add di,bxadd bl,8mov 1h[si],bllea si,buf1cldmov cx,8rep movsbn4: call disjmp n4n5: lea si,buf2mov bh,00h微机原理课程设计报告mov bl,1h[si]cmp bl,0jz n1lea di,buf1sub bl,8mov 1h[si],bllea si,buf3add si,bxcldmov cx,8rep movsbn6: call disjmp n6n1: call qinlinjmp n1;jmp startjishu proc near ;计数子程序 lea si,bufmov bl,[si]cmp bl,100jnz s6s1: mov bl,0mov [si],blmov ah,1h[si]cmp ah,59jz s2inc ahmov 1h[si],ahjmp s6s2: mov ah,0mov 1h[si],ahmov ah,2h[si]inc ahmov 2h[si],ahjmp s6s6:call chumov cx,3s5:call disloop s5call delay1sinc byte ptr[si]retjishu endpchu proc ;rukou al ;数处理子程序 push sipush bxmov bl,4lea di,buf1lea si,bufnext:lodsbmov ah,00mov cl,10div clxchg ah,alstosbmov al,ahstosbdec bl微机原理课程设计报告 jnz nextpop bxpop siretchu endpdis proc near ;显示buf1中的值push bxpush cxlea bx,tablea di,buf1mov cx,8mov ah,7Fhloop1: mov al,[di]xlat ;换码mov dx,a1out dx,almov dx,b1mov al,ahout dx,almov bh,1call delaycall qplea bx,tabror ah,1inc diloop loop1pop cxpop bxretdis endp delay1s proc near ;8253延时子程序 push dxpush axmov dx,ctr2 ;8253 控制mov al,00110000bout dx,al ;8253计数器0控制字方式0 out端作为中断请求信号mov dx,a2mov al,01hout dx,almov al,00hout dx,almov dx,a3M1: in al,dxtest al,01hjz M1pop axpop dxretdelay1s endpqp proc near ;清频子程序mov al,0ffhmov dx,b1out dx,alretqp endpdelay PROC NEAR ;内部延时之程序PUSH bx微机原理课程设计报告PUSH CXwait0: MOV CX,06hwait1: LOOP wait1DEC bhJNZ wait0POP CXPOP bxRETdelay ENDPintr_key proc near ;中断服务子程序 call keytest al,2hjz n1test al,4hjz n5lea di,buf2mov bh,[di]inc bhmov [di],bhtest bh,1hjnz n2jmp n3iretintr_key endpqinlin proc ;键盘清零子程序 mov ax,0 lea di,bufmov cx,14cldrep stosbcall disqinlin endpkey proc ;读取键盘程序 mov dx,c1in al,dxretkey endpcode endsend start七、程序及硬件系统调试情况按下暂停键实现暂停功能继续计数后按下清零键实现清零功能八、设计心得经过这次课程设计,我觉得我有了很大的收获,:1.我大大地锻炼了自己搞科研的能力,作为我们大学生,尤其是工科的大学生,对于科研能力,能够自主开发课题,项目有着很高的要求,而我们很多大学生动手研发的能力还不是很强。