找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 202|回复: 14
打印 上一主题 下一主题
收起左侧

再来请教个51单片机IO问题

[复制链接]
跳转到指定楼层
楼主
ID:1133220 发表于 2024-10-20 08:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大佬:      断续学了点51单片机,学到中断的时候,想请教一下,
.......
sbit KEY=P3^1;
KEY=1;
if(!KEY)
{
........
}
........
这种IO电平的改变检测,是单片机硬件控制的吗,是不是相当于随时都在检测IO电平并且可以即时响应?和硬件中断的区别是什么?和中断的优先级有高低之分吗?

多谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1109793 发表于 2024-10-20 10:49 | 只看该作者
这就是所以软件检测的方式了吧。
是否相应要看你这个if被执行的频率了。如果还有其他更多代码,就不可能即时相应了。中断可以做到比较即时相应。高优先级的就更容易保证即时,低优先级,就看是否存在更高优先级的代码在运行了。
话说读取外部的按键设么的,不需要太高的即时相应的吧
回复

使用道具 举报

板凳
ID:342197 发表于 2024-10-20 10:54 | 只看该作者
中断优先级更高。
回复

使用道具 举报

地板
ID:342197 发表于 2024-10-20 10:55 | 只看该作者
中断优先级更高,电平检测级别低
回复

使用道具 举报

5#
ID:94031 发表于 2024-10-20 13:13 | 只看该作者
当IO口做输入时,用指令可以随时监测IO电平,这不是中断,中断有个响应过程,这直接指令读取。
回复

使用道具 举报

6#
ID:1133220 发表于 2024-10-20 20:22 | 只看该作者
xiaobendan001 发表于 2024-10-20 10:49
这就是所以软件检测的方式了吧。
是否相应要看你这个if被执行的频率了。如果还有其他更多代码,就不可能即 ...

编程软件层面上是软件检测了,内部硬件层面呢?是不是它内部做出的电平改变响应是被动的?
回复

使用道具 举报

7#
ID:1133220 发表于 2024-10-20 20:23 | 只看该作者

回复

使用道具 举报

8#
ID:1133220 发表于 2024-10-20 20:23 | 只看该作者
远征之路 发表于 2024-10-20 10:55
中断优先级更高,电平检测级别低

内部硬件层面是不是它内部做出的电平改变响应是被动的?
回复

使用道具 举报

9#
ID:1133220 发表于 2024-10-20 20:24 | 只看该作者
xuyaqi 发表于 2024-10-20 13:13
当IO口做输入时,用指令可以随时监测IO电平,这不是中断,中断有个响应过程,这直接指令读取。

多谢。它是主动读取还是被动响应的?
回复

使用道具 举报

10#
ID:624769 发表于 2024-10-20 21:53 | 只看该作者
当你程序运行到:   if(!KEY)  时,单片机会去查询(读取) P31 的状态是 0/1
回复

使用道具 举报

11#
ID:1134207 发表于 2024-10-21 10:46 | 只看该作者
中断优先级更高,电平检测级别低
回复

使用道具 举报

12#
ID:1121801 发表于 2024-10-21 13:50 | 只看该作者
P3引脚因为没有缓冲器,所以读输入电平时要先将P3.1置1,然后读取的才是输入电平,如果不置1,那么读取的输入电平会不正确。
读电平是软件执行到这个位置才会读电平,没有执行到这里是不会读电平的。而且中断的优先级是比正常程序运行级别要高的,所以一般是响应中断程序先,退出中断后才会按步执行主程序
回复

使用道具 举报

13#
ID:332444 发表于 2024-10-21 14:04 | 只看该作者
当启动中断后硬件独立运行并响应,但还是有等待CPU响应时间的,否则的话中断时钟就不会有误差,提问写的代码是独立按键不是中断,因此是软件写怎么响应的由写的软件决定.
回复

使用道具 举报

14#
ID:94031 发表于 2024-10-21 14:14 | 只看该作者
pcbbb2024 发表于 2024-10-20 20:24
多谢。它是主动读取还是被动响应的?

你读就能得到,cpu不发中断。
回复

使用道具 举报

15#
ID:276663 发表于 2024-10-21 16:32 | 只看该作者
你需要理解一下原理,
中断,顾名思义就是,打断一个正常的进程。

  1. void main(void)
  2. {
  3.         int_config();//中断配置
  4.         while(1)
  5.         {
  6.                 delay(20);
  7.                 if(key1==0)
  8.                 {
  9.                         led = 1;//点亮
  10.                         delay(200);//延时200ms
  11.                 }
  12.                 led = 0;
  13.         }
  14. }

  15. //中断处理程序
  16. //产生中断,说明已经有了低电平
  17. viod Int_KEY2 interrupt X
  18. {
  19.         delay(20);//消抖
  20.         if (key2 == 0)//还按着,说明确定有按键按下
  21.         {
  22.                 if (led2 == 1)
  23.                 {
  24.                         led2 = 0;//灭掉
  25.                 }
  26.                 else
  27.                 {
  28.                         led2 = 1;//点亮
  29.                 }
  30.         }
  31. }
复制代码


看上面的程序主程序在循环检查key1按键,key2就是靠中断处理,啥时候有key2按下就会打断正常的主程序,插入运行一段中断程序,然后再继续从主程序打断的位置继续执行。

执行中断程序时,单片机内部会有记录主程序运行位置的保存和恢复处理。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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