首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助:怎样进入键盘中断???

求助:怎样进入键盘中断???

做了个简单的测试是否能进入键盘中断服务程序,采用JL3,在板上放一个按键,一端接PTA5/KBI5,一端接地。TB4接一个测试的LED。codewairiror3.1程序如下: #include /* for EnableInterrupts macro */ #include /* include peripheral declarations */ #define deng PTB_PTB4 void main(void) { DisableInterrupts; /* include your code here */ CONFIG1=0x01; CONFIG2=0x00; DDRA=0x00; PTAPUE=0x3f; PTA=0x00; DDRB=0xff; PTB=0x00; KBSCR_IMASKK=1; KBIER=0xff; KBSCR_ACKK=1; KBSCR_IMASKK=0; EnableInterrupts; while(1){ }; } interrupt 15 void keyboard(void){ KBSCR_ACKK=1; deng=~deng; } 无论是用仿真器在键盘中断出设置断点,还是直接烧写芯片,都进入不了中断。 这是为什么啊?这程序什么地方出了问题?? 求助!!!!!
在键盘中断出设置断点,全速运行,应该可以进去
作个朋友
真是失败,还是进去不了
看看按键按下去时的波形。设成低电平触发试试。
海纳百川  有容乃大
总算找到原因了,呵呵,原来自己接 的线路有问题。把按钮一端的地和led的地连在了一起,看波形也没有看出什么问题,去掉led后就可以进入中断了。
自己太疏忽了。
但还是有个问题,进入中断服务程序好,执行KBSCR_ACKK=1;后,仿真器仍显示键盘中断请求标志kyef=1,中断服务程序运行后单步运行,结果再次进入中断服务程序程序,运行完后才返回主程序,正常运行。
对于一次按键,有2次进入中断,清键中断标志不是这样的么??
建议:
1. 仔细看一下JL8数据手册中关于清键盘中断请求标志的操作步骤;
2. 一般软件对于键盘操作必须要有去抖动的操作。硬件上也可加滤波器件。
海纳百川  有容乃大
硬件加滤波需要加什么硬件呢?有这样硬件么。不会只是加个电容把
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
看了手册上所说的清键盘中断请求标志,应该是这样2种方式:
1,取中断向量;
2,KBSCR_ACKK置1。
这两种方法都加上去了,还是不行,不能清掉标志,中断部分程序如下:
interrupt 15 void keyboard(void){          
  asm{
   ldhx #$ffe0
   lda ,x
    }
   KBSCR_ACKK=1;
}
其中MODE=0,中断标志清不掉,要再次进入后才能清掉。程序是这样写的吗??
没多少把握。
至于软件消抖,应该是些延时吧,如果是这样的话,这个键盘中断功能也没有什么多大意义,相当于查询的方式了。
硬件消陡,是有很多方法,比如加触发器之类的,但会增加成本。
1. CPU响应键盘中断后即已取中断向量,不用再去读了。
2. 不要把所有的键盘中断允许位都置1,只设置需要的位。
3. 在按键输入上加一个简单的阻容滤波电路,可以起到很好的消抖作用。
4. 无论采用什么芯片,什么键盘处理方式,软件消抖都是必须的。不仅只是延时而已。
5. 执行KBSCR_ACKK=1后KEYF没有清零,可能与调试软件的显示刷新有关。
海纳百川  有容乃大
恩,学到了很多东西,谢谢!!
返回列表