微机原理课程设计报告书课题名称姓名学号院、系、部专业通信工程指导教师声光报警器一、设计目的(1)进一步巩固和加深《微机原理与接口技术》这门课程中所学的理论知识。
(2)学会查阅相关手册与资料,培养独立分析与解决问题能力。
(4)通过设计了解8255A芯片和8253芯片的内部结构,工作方式,引脚的功能以及I/O 口的使用。
掌握8255A和8253的控制字的意义,功能和设置方法。
(5)学习并实践模拟声光报警器的实现方法。
二、设计内容与要求具体要求:按动键盘某任一数字键使得内扬声器发出警报声,使得8个LED 指示灯忽明忽暗显示出报警信息。
三、设计思路根据设计任务和要求,在设计前必须对微机原理与接口技术中的8255和8253芯片熟悉了解和掌握。
设计中主要要完成的是发声报警和发光报警这两个部分功能,故在程序设计中只要设计触动键盘重的数字键即8个LED不停光闪,同时内扬声器发出警报声。
在设计发声报警时利用了8253可编程定时记数器,在设计发光报警时利用了8255芯片。
四、设计所用芯片及工作原理报警器PC机的主机箱内装有一只小喇叭,它是由定时器8253/54和并行芯片8255/8255A控制发声的,主板上由喇叭控制驱动电路,同时在ROM,BIOS中的BEEP子程序,它能根据BX中发出的计数值控制定时器8253/54,从而产生频率为896HZ的声音。
8253是可编程的内部定时器,它根据程序提供的计数值和工作模式产生各种形式和各种频率的计数/定时脉冲,提供给系统的各个部件使用。
8253定时器内部有3个独立工作的计数器:COUNTER1,COUNTER2,COUNTER3,每一个计数器都分配有一个端口地址,分别为40H、41H、42H。
内部的公用控制寄存器端口地址为43H。
对8253编程时,首先设定控制字,以选择计数器、确定工作模式和计数的格式。
在PC机中8253的3个时钟端口的输入频率都是1.19318MHZ。
其中计数器2可以控制扬声器的发声。
在BIOS中的BEEP子程序在模式3下能够产生频率为896HZ的声音,装入计数器的初始值是533HZ(1.19318MHz/896HZ=1331=533H),这样得到的控制字为10110110B。
8255是可编程I/O口扩展芯片。
对8255输入不同的指令可改变I/O口的工作方式。
8255与微机实验箱连接方式简单,工作方式由程序设定,图2为8255的引脚图。
8255是一个具有3个8位的8位并行口,并且可编程为多种工作模式的接口芯片。
由于每个端口上具有输入/输出的缓冲和锁存功能,因此可用于扩展I/O 口,作为中间接口电路。
3.1引脚说明8255共40个引脚,采用了双列直插的封装,主要引脚功能如下:◆D7—D0:三态双向数据线,与单片机数据总线连接;◆CS:片选信号,低电平有效;◆RD:读出信号线,低电平有效;◆WR:写入信号线,低电平有效;◆PA7—PA0:A口输入/输出线;◆PB7—PB0:B口输入/输出线;◆PC7—PC0:C口输入/输出线;◆RESET:芯片复位信号线;◆A1—A0:地址线,用来指定8255内部端口。
3.2内部结构和工作方式(1)端口A、B、C端口A为8位数据传送,数据输入或输出时均受到锁存。
端口B为8位数据传送,数据输入时不受锁存,而数据输出时受到锁存。
端口C为8位数据传送,数据输入时不受锁存,而数据输出时受到锁存。
(2)8255接口工作状态选择表9-1表9-1 8255接口工作状态A1 A0 RD WR CS 工作状态0 00 11 0 0 1 00 1 00 1 0A口数据→数据总线B口数据→数据总线C口数据→数据总线0 0 1 0 0 数据总线→A口0 1 1 0 0 数据总线→B口1 0 1 0 0 数据总线→C口1 1 1 0 0 数据总线→控制寄存器0 1 0 1 0 数据总线→三态0 1 0 1 0 非法状态0 1 0 1 0 数据总线→三态(3)8255的基本工作方式8255可编程并行I/O扩展芯片是通过在控制端口中设置控制字来决定它的工作方式的。
8255有以下三种基本工作方式:⏹方式0——基本输入/输出方式。
⏹方式1——选通输入/输出方式。
⏹方式2——双向传送方式。
8255A的端口A可以工作在三种工作方式中的任何一种,端口B只能工作在方式0或方式1,端口C则常常配合端口A和端口B工作,为这两个端口的输入/输出传送提供控制信号和状态信号。
①方式0方式0是一种基本输入/输出方式。
它是把PA0~PA7、PB0~PB7、PC0~PC3、PC4~PC7全部输入/输出线都用作传送数据,各端口是输入还是输出由方式控制字来设置。
这种方式多用于同步传送和查询式传送。
8255的方式控制字如图9-1:如图9-1 8255的方式控制字②方式1方式1是一种选通输入/输出方式。
它把A口和B口用作数据传送,C口的部分引脚作为固定的专用应答信号,A口和B口可以通过方式控制字来设置方式1。
这种方式多用于查询传送和中断传送。
③方式2方式2是一种双向选通输入/输出方式。
它利用A口为双向输入/输出口,C口的PC3~PC7作为专用应答线。
方式2只用于端口A,在方式2下,外设可以通过端口A的8位数据线,向CPU发送数据,也可以从CPU接收数据。
当8255接收到写入控制端口的控制字时,首先测试控制字的最高位,如为1,则是方式选择控制字;如为0,则不是方式选择控制字,而是对端口C置1/置0控制字,这是由于端口C的每一位可作为控制位来使用。
端口C置1/置0控制字也是写到控制端口,而不是写到端口C。
8253具有3个独立的16位计数器,6种不同的工作方式。
1、方式0——计数到终点输出变为高电平当将某计数器设置成方式0后,其输出OUT变低电平,装入初值后,仍保持低电平。
门控为高电平开始计数。
每来一个计数脉冲CLK,计数器的值减1,当计数到达终点即计数器的值变成0时,OUT变为高电平。
在计数期间可用门控信号暂停计数(即门控为低电平时,计数暂停)。
2、方式1——可编程单稳所谓单稳,是指这样的电路,它有两种状态,但只能稳定在一种状态。
在一定的外界作用下,它能从这一种状态进入到另一种状态,但经过一定时间后,又自动恢复到原来的状态。
这个时间参数一般是由外加电阻、电容的值决定的。
8253的方式1就是模拟单稳电路,其处于非稳定状态的时间可通过程序进行设置。
3、方式2——分频脉冲发生器(分频器)方式2用来对输入脉冲(即计数脉冲CLK)N分频(N为预置的初值),在输出信号周期中低电平的时间为一个CLK周期。
设置此方式后,OUT变高电平,装入初值后便自动开始计数,减到1时OUT 变低电平。
经过一个CLK周期,OUT恢复高电平,且计数器又自动装入初值,重新开始计数。
如此循环下去。
在上述过程中GATE应一直保持高电平。
若GATE变低电平将禁止计数,并使输出为高电平。
在GATE再次变高电平时,计数器将重新装入预置的初值,并开始计数。
4、方式3——方波发生器方式3类似于方式2,输出是周期性的。
不同的是方式3输出方波。
如果预置的初值N为偶数,则输出周期中高电平和低电平的宽度相等;如果N为奇数,则输出周期中高电平比低电平多一个CLK周期的时间,当N相当大时,也可认为是方波。
当然,一般采用方式3时,置初值为偶数。
设置成方式3后,OUT变高电平,装入初值后便自动开始计数。
如初值为偶数,每个CLK使计数器减2,计到终点改变电平。
如初值为奇数,则输出为高电平时第一个CLK使计数器减1,随后每个CLK使计数器减2;输出为低电平时第一个CLK使计数器减3,随后每个CLK使计数器减2。
每当计数到终点都会改变电平,初值又被重新装入,并开始计数。
如此循环下去。
5、方式4——软件触发选通设置成方式4后,OUT 变高电平,写入计数值后自动开始计数(所以称之为软件触发),计数到终点输出一个CLK 周期的低电平脉冲。
GATE 变低可暂停计数,用GATE 的上升沿可重新赋初值,并开始计数。
6、方式5——硬件触发选通设置成该方式后,OUT 变高电平,写入计数值后需等待GATE 上升沿的到来才开始计数(所以称之为硬件触发)。
计数到终点也输出一个CLK 周期的低电平脉冲。
计数过程中不受GATE 电平的影响。
此后,用GATE 的上升沿可重新赋初值,并开始计数。
五、电路及连线设计系 GATE2统+5v OPCLK 总 1.1625MHZ线图1 8253 发声实验接线图图2 8255发光实验接线图六、连线图说明1、8253的CLK0端口接分频单元2、8253的OUT0输出端口与内置扬声器SPK 端口相连3、8255的B 端口的8个引脚与8个LED 灯相连。
4、8255端口B 工作在方式0并作为输出口, 端口B 输出线接至一组发光极管上,端口A 工作在方式0并作为输入端口,接一组开关信号。
七、程序流程图GA TE0 CLK08253OUT0SPKSPK UNITPB0PB1 PB28255PB3PB4PB5 PB6 PB7 D0D1 D2 D3 D4 D5 D6D7 SW--LED UNIT图3 实验程序流程图八、程序源代码PORTA=0FF28H ; 8255的A、B、C及控制端口的地址分别为PORTA、PORTB、PORTC和PORTDPORTB=0FF29HPORTC=0FF2BHPORTD=0FF2AH ; 向PORTD送数据,点亮LEDCODE SEGMENTASSUME CS:CODESTART: MOV BL,00MOV AH,0FFHMOV DX,0FF2AHMOV AL,10000001B ;初始化8255,10000001B设置A、B端分别为方式0输出C端为方式0输入OUT DX,ALLP: MOV DX,0FF2BHIN AL,DX ;把DX中的内容读到ALAND AL,0FH ;AL与00001111B相取出低字节CMP AL,00H ; 从C端口即从键盘数字区接收到的数与0比大小JE NEXTCMP AL,01HJB LP ;不高于等于CMP AL,08HJA LPMOV AL,0B6H ;10110110B初始化8253OUT 43H,ALMOV AX,0000 ;写入计数初值OUT 42H,AL ; 在计数器2中写入低字节计数初值MOV AL,AH ;高字节已在AH中即前面的0ffhOUT 42H,AL ;在计数器2中写入高字节计数初值MOV AL,BL ;灯闪烁NOT AL ;将al中的取反OUT 0FF29H,AL ;将AL中的值送到PORTA即8255的A端口CALL DELAYSHL BL,1 ;逻辑左移指令SHL执行一次移位,相当于无符号数的乘2 TEST BL,AHJNZ LPMOV BL, 01HJMP LPBACK: RETFNEXT: MOV AL,AHOUT 0FF29H,ALJMP LPPUSH CXMOV CX,0000DELAY: PUSH CXPUSH CXPOP CXPOP CXPOP CXRETCODE ENDSEND START九、调试结果图4 程序运行后LED灯管闪烁图5 程序运行完成一段时间后停止闪烁十、设计过程中遇到的问题及解决方法接近两周时间的课程设计我收获了很多。