矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 3195|回复: 38

请问普中HC6800EM3-V3.0光盘外部中断一文是否有误

[复制链接]
     
发表于 2022-10-6 21:24:37 | 显示全部楼层 |阅读模式
Screenshot_2022-10-06-20-53-20-41.png Screenshot_2022-10-06-21-02-17-01.png
请看这个程序,既然用了外部中断,又何必定义IO口?包括延时消抖那些是不是多余?十多年前我学汇编语言时,也简单做了一个外部中断实验,详情记不住了,大致意思是在89C2051接8个发光二极管,平时显示F0,外部中断发生时,显示0F。实验成功了,我也没有用软件操作IO口。

     
发表于 2022-10-6 21:29:06 | 显示全部楼层
delay是消抖,全新的开关可以不用消抖,旧开关你不消抖试试!

k3是判断按下还是抬起的。

如果你不用软件操作led这个io口,你怎么让显示变化?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-10-6 21:44:18 来自手机 | 显示全部楼层
bis 发表于 2022-10-6 21:29
delay是消抖,全新的开关可以不用消抖,旧开关你不消抖试试!

k3是判断按下还是抬起的。

消抖是一般按键处理程序,而这里却是中断实验,外部中断请求,LED取反。程序员在这个程序开头定义了
sbit led=P2^0;
sbit k3=P3^2;
并在中断服务函数里响应。这样做,感觉是多此一举,按我的想法,delay(1000);if(k3==0)这两句都去掉,一旦中断响应,直接取反led。
回复 支持 反对

使用道具 举报

     
发表于 2022-10-6 21:50:04 | 显示全部楼层
创业爱好者 发表于 2022-10-6 21:44
消抖是一般按键处理程序,而这里却是中断实验,外部中断请求,LED取反。程序员在这个程序开头定义了
sbi ...

且放下取消delay什么效果不谈,就说不判断key3,看单片机外部中断怎么设置的,有什么功能,可能只对上升沿响应,那就满足你的要求。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-10-6 21:59:59 | 显示全部楼层
bis 发表于 2022-10-6 21:50
且放下取消delay什么效果不谈,就说不判断key3,看单片机外部中断怎么设置的,有什么功能,可能只对上升 ...

Screenshot_2022-10-06-21-58-21-43.png
这是程序前半段。
回复 支持 反对

使用道具 举报

     
发表于 2022-10-6 22:01:13 | 显示全部楼层

你问别人吧,我已经有20多年没用过51了。
回复 支持 反对

使用道具 举报

     
发表于 2022-10-7 16:18:23 | 显示全部楼层
防抖是为了弥补按键物理接触或者人手抖动问题,防止按下一次,重复检测到多次。按下一次是宏观表现,单片机检测到多次是微观表现。
用中断只是检测按键触发的一种方式,与用不用防抖没有关系。
单片机各指令执行时间大都是微秒级甚至更短,你上面的中断服务程序去掉延时后执行时间还是微秒级的,而按下按钮产生的抖动时间大概是毫秒级,相对来说,这么久的时间足够进入中断很多次了,所以防抖措施还是有必要的。
个人看法,仅供参考。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-10-7 17:01:59 来自手机 | 显示全部楼层
xiaocake1 发表于 2022-10-7 16:18
防抖是为了弥补按键物理接触或者人手抖动问题,防止按下一次,重复检测到多次。按下一次是宏观表现,单片机 ...

防抖还是次要的,而且防抖是一般按键处理程序里的一道程序。关键使用了中断,又何必再定义I/O口?没记错的话当年我开了中断就能改变LED显示,如没有中断时显示F0,中断来了以后显示0F,没有直接操作I/O口。
回复 支持 反对

使用道具 举报

     
发表于 2022-10-7 18:15:21 | 显示全部楼层
这个外部中断的试验,应该是一个微动开关一脚接在MCU的外部中断脚,另一脚接地,然后按一下开关,对应的LED发生状态翻转。若在外部中断执行程序中不加入延时和判断,在按压以及放开的瞬间多次的脉冲抖动都会被MCU捕捉到,然后LED发生多次翻转,不能能达到设计结果。如果外部中断的引入不是来硬件开关,而是真接取自其它的IO引脚,一般不会存在信号抖动问题,那延时和判断可以不加入。
回复 支持 反对

使用道具 举报

     
发表于 2022-10-7 18:38:12 | 显示全部楼层
创业爱好者 发表于 2022-10-7 17:01
防抖还是次要的,而且防抖是一般按键处理程序里的一道程序。关键使用了中断,又何必再定义I/O口?没记错 ...

防抖重不重要不是你说的,不然人家都是傻子,就只你最清醒。。。
那个延时和再次判断就是软件防抖的典型操作。。。具体先去查查按键防抖的常用操作吧。。。
还有什么叫外部中断,也去查查。。。
这样一知半解,思维混乱的,玩不了单片机。。。
回复 支持 反对

使用道具 举报

     
发表于 2022-10-7 19:23:29 | 显示全部楼层
楼主一直强调没操作I/O口,我相信楼主没有记错.
复原下电路,猜测使用89c2051,P1口接了8个led.P3.2,或P3.3接按键.
楼主说是用汇编写的,

我猜测中断程序大概是这么写的

MAIN:MOV P1,#0F0H

EINT0: MOV P1,#00FH


好了,结案
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-10-7 20:23:07 | 显示全部楼层
我的电脑! 发表于 2022-10-7 18:15
这个外部中断的试验,应该是一个微动开关一脚接在MCU的外部中断脚,另一脚接地,然后按一下开关,对应的LED ...

他这个程序没写好,这样写容易让初学者把普通I/O口操作和中断混淆起来~尽管实验确实能通过。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-10-7 20:25:16 | 显示全部楼层
xiaocake1 发表于 2022-10-7 18:38
防抖重不重要不是你说的,不然人家都是傻子,就只你最清醒。。。
那个延时和再次判断就是软件防抖的典型 ...

04年就在玩中断了,当时对书中介绍的定时器,中断一知半解,为了验证书中中断的内容,编了个小程序,证明了自己的理解无误。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-10-7 20:39:38 | 显示全部楼层
本帖最后由 创业爱好者 于 2022-10-7 20:42 编辑
haisens 发表于 2022-10-7 19:23
楼主一直强调没操作I/O口,我相信楼主没有记错.
复原下电路,猜测使用89c2051,P1口接了8个led.P3.2,或P3.3接 ...


终于有人理解我的意思了。
当时我并没有写一个比较完善的中断服务程序,而是编了一个最简单的程序来验证书上的说法和我的理解是否一致,因为可能是地域关系,书上的内容看不太懂,也充满疑惑,所以用这个程序来判断。
如果我把程序写成
MAIN:MOV P1,#0F0H

EINT0: JB P3.2,$
MOV P1,#00FH
我又怎么区分是中断起了作用还是I/O口起了作用?

而你写的那个程序,里面没有对P3.2进行读操作,实验一旦成功,就说明是中断起了作用。
回复 支持 反对

使用道具 举报

     
发表于 2022-10-7 21:24:23 | 显示全部楼层
又是楼主您在发帖,04年您就玩中断,十八年过去了还在中断。我觉得楼主天生玩不转这个,还是回答一下最后的语句:p1口送数据11110000,然后查询p3.2口是否低电平,高电平就原地踏步,一旦按下,执行下面一条p1口送数据00001111,整个过程和中断无关
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-5-6 19:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表