当前位置:文档之家› 8255并行接口键盘实验

8255并行接口键盘实验

方式2是双向数据传送,仅A口有这项功能。当A口工作在方式2时,B口仍可以工作在方式0或方式1,但此时B口方式1只能用查询方式与CPU交换信息。2.、工作方式选择字
8255工作方式选择字共8位,存放在8255控制寄存器中。最高位D7为标志位,D7=1表示控制寄存器中存放的是工作方式选择字,D7=0表示控制寄存器中存放的是C口置位/复位控制字。3、C口置/复位控制字
1、在OAL层加入中断源
矩阵键盘采用4路I/O口中断,每路中断对应1个中断源。矩阵键盘驱动首先要在OAL层加入这些中断源。以其中一路中断为例:
#define SYSINTR_KEYONE(SYSINTR_FIRMWARE+0) 2、中断服务例程(ISR)设计
本键盘驱动将GPIO_6、GPIO_7、GPIO_16、GPIO_17四个I/O口作为中断I/O口。有键被按下时将产生一个I/O中断,内核首先进入异常中断处理程序,由它屏蔽所有中断,再调用中断服务例程ISR得到该中断的逻辑中断标识。鉴于ISR的任务比较单一,ISR通常都要求越短、越快越好。矩阵键盘驱动的ISR设计如下:
③向8255数据寄存器写入“数据”或从8255数据寄存器读出“数据”。
算法
与流
程图
键盘驱动的主要作用就是实时监测外部按键中断,一旦发现外部有键按下就向内核发送键盘消息实现键盘输入功能。键盘驱动创建了中断服务线程和4个键盘中断事件,每行按键对应一个键盘中断事件。有键被按下时,中断服务例程得到对应的中断标识符并报告给系统任务调度进程,同时产生键盘中断事件,键盘中断服务线程响应键盘中断事件,开始扫描矩阵键盘。根据产生的中断事件类型不同,可以首先确定被按下键的行位置。由于键盘被按下后,该键对应的行和列被连通,因此根据判断各列对应的I/O口的电平,可以得到被按下键的列位置;得到按键的准确位置后,通过向操作系统发送键盘消息KEYBD_EVENT,实现一次键盘输入。循环扫描键盘,直到按键被弹起则发送KEYEVENTF_KEYUP事件。响应键盘中断输入的整个流程如图。
if((v_pGPIOReg->GPLR_x & GPIO_13)&&num>0){ num=0;//按键弹起
keybd_event('0',0x71, KEYEVENTF_KEYUP, 0);} } }
运行
结果
按键被弹起发送KEYEVENTF_KEYUP事件
调试
分析
和体

通过8255并行键盘接口实验,对课本上的知识有了更深刻的理解,掌握8255A的功能及方式0、1的实现,熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。通过现实中的操作,让我对现在所学的知识产生了更大的兴趣,为以后的进一步学习定下了良好的基础。
四川大学网络教育学院
计算机综合实践
校外学习中心:成都市
学生姓名:
专业:电气工程及其自动化
层次:专升本
年级:09春
学号:
实践时间:
实验
目的
1、掌握8255A的功能及方式0、1的实现
2、熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。
3、利用09H型中断设计一个自己的键盘中断服务程序,程序设计应考虑在
矩阵键盘驱动的IST设计如下:矩阵键盘驱动设计了4个中断事件HANDLE hKEYEvents,分别对应矩阵键盘4行产生的中断。在矩阵键盘驱动的IST中,调用CreateEvent函数创建4个事件对象,接着调用系统函数InterruptInitialize完成中断和事件的关联并使能中断。完成这些初始化工作后,就可以调用WaitForMultipleObjects (hKEYEvents)函数进入键盘事件的等待队列中。当有事件被捕获后,根据不同的事件类型进入不同的键盘扫描处理程序以其中一路中断为例进行实验
while(!(v_pGPIOReg﹥GPLR_x & GPIO_13)) {//扫描矩阵键盘,判断按键列位置
if(num==1)//第1次连发延时400 ms Sleep(400); else
Sleep(100);//按键延时去抖
if(!(v_pGPIOReg﹥GPLR_x & GPIO_13)){//列位置keybd_event('0' ,0x71, 0, 0);//发键盘消息num++;//连发计数} else{
if(v_pGPIOReg﹥GEDR_x & GPIO_6) {//中断触发v_pGPIOReg﹥GEDR_x = GPIO_6;//清除中断
return SYSINTR_KEYONE;//返回中断标识}其他三路中断的ISR设计与此类似。3、中断服务线程(IST)设计
中断服务例程以键盘中断的逻辑中断标识符形式返回给系统任务调度进程,中断服务线程则在矩阵键盘驱动中负责具体中断处理。因为中断服务例程较小,并且只做很少的处理工作,中断服务线程就必须完成大多数中断处理工作,功能主要包括响应中断、扫描按键位置、发送键盘消息等。
程序
清单
switch (dwEvent WAIT_OBJECT_0){//事件类型case 0://第1行键盘有键按下
v_pGPIOReg﹥GPDR_x &= ~ (GPIO_13);//设为输入v_pGPIOReg﹥GPDR_x |= (GPIO_6);//中断I/O输出v_pGPIOReg﹥GPCR_x |= (GPIO_6);//输出低电平
8255的C口可进行位操作,即:可对8255C口的每一位进行置位或清零操作,该操作是通过设置C口置/复位字实现的(图8-10)。C口置/复位字共8位,各位含义如下:
4、命令字与初始化编程
8255有两个令字,即方式选择控制字和C口置0/置1控制字,初始化编程的步骤是:
①向8255控制寄存器写入“方式选择控制字”,从而预置端口的工作方式。
查阅
资料
串口设计与分析
格式要求
内页正文内容:4号宋体、单倍行距
如需附图可将文档图纸压缩后上传
②当端口预置为方式1或方式2时,再向控制寄存器写入“C口置0/置1控制字”。这一操作的主要目的是使相应端口的中断允许触发器置0,从而禁止中断,或者使相应端口的中断允许触发器置1,从而允许端口提出中断请求。
注意:“C口置0/置1控制字”虽然是对C口进行操作,但是该控制字是命令字,所以要写入控制寄存器,而不是写入C口控制寄存器。
退出时不破坏原有的设置。
实验
内容
1、8255的工作方式
一片8255内部有3个端口,A口可以工作在方式0、方式1或方式2,B口可以工作在方式0、方式1,C口可以工作在方式0。
方式0是基本型输入/输出。这种方式和外设交换数据时,8255端口与外设之间不使用联络线。
方式1为选通型输入/输出。用这种方式和外界交换数据时,端口和外设之间要有联络信号。
相关主题