0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机C语言编程中没有到的中断而中断全部开启的错误你了解吗

j4AI_wujianying 来源:未知 2019-05-26 11:57 次阅读

我们知道,51单片机有几个不同的中断源。

对于一个系统的设计,通常在初始化程序里面需要定义各个中断等

比如:

TMOD = 0x21; // T1 mode 2 T0,mode 1 //GATE C/T M1 M0 GATE C/T M1 M0

TL1 = 0xfd; // 0xfa=4800 bps 0xfd=9600 bps

TH1 = 0xfd;

TH0 = -(10000/256);

TL0 = -(10000%256);

PCON = 0; //波特率不变等设置

SCON = 0x50; //串口1方式1,允许接收

IT0 = 1; //外部中断0下降沿有效

IT1 = 1; //外部中断1下降沿有效

TR0 = 1; //启动定时器0

TR1 = 1; //启动定时器1

ET0 = 1; //开放定时器0中断

ES = 0; //串行中断

EX0 = 0; //外部中断0

EX1 = 0; //外部中断1

EA = 1;

可以看到,我们一共有:定时中断0,定时中断1,外部中断0,外部中断1,串行中断。

这五个中断是最基本的中断源。对于各位的设计,我相信这一段代码在不同的程序重通常都不会自己重复敲打进去了。应该是从以前某个代码中直接复制过来吧。

此时会有一个小问题存在而被你忽略。

之前已经完成的代码中,你很有可能已经使用了全部5个中断,但是,一个刚开发的系统,也许还只是用到了其中的三个或者两个中断,而中断你全部开启了。这个意味着什么呢?

换算到汇编中可以比较明显的看到问题:

org 0000h

ljmp main

org 0003h //中断0入口

ljmp int1 //中断1处理

org 000bh //中断1入口

ljmp int2 //中断1处理

org 0013h ……

ljmp int3

org 001bh

ljmp int4

org 0023h

ljmp int5

main:

……

ret

int1

reti

int2

reti

……

可以知道,设置EX0 = 1意味着如果在外部中断0上存在中断信号,程序会跳转到0003h处运行

而下一条就是跳转到对应的中断处理程序。

假如我们的系统所有的中断都开启,但是你的中断处理程序此时只有一个。比如是串口中断开启。

那就意味着如果有定时中断也好,外部中断也好,全部都会让你执行串口中断处理函数。

因为你根本就没有让中断跳转到对应处理函数的过程,于是一直往下运行,从而发生未知的故障。

又比如你没有 串口中断处理函数,但是你开启了串口中断,你的程序在调试阶段又有一个串口发送数据的函数,那意味着什么?意味着你发送数据的时候有可能进入串口中断入口,而此时没有一个跳转命令到串口处理函数,那么只好重新运行主函数了。

程序就全部乱套了。

综上,没有用到的中断,就不要开启其标志位,在COPY的时候要记得修改此处的参数,否则搞死人不偿命的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5997

    文章

    43946

    浏览量

    620473
  • C语言
    +关注

    关注

    180

    文章

    7521

    浏览量

    127259
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41020

原文标题:谈谈单片机C语言编程中不经意间的一个小错误!

文章出处:【微信号:wujianying_danpianji,微信公众号:单片机精讲吴鉴鹰】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机技术与应用:56中断标志位和挂起中断#单片机

    单片机中断
    学习硬声知识
    发布于 :2022年11月07日 22:40:28

    单片机c语言编程

    单片机c语言编程这是一本关于Intel 80C51 以及广大的51 系列单片机的书这本书介绍给读
    发表于 07-11 09:40

    PIC单片机C语言编程

    单片机体系结构和硬件资源作详尽的了解,以笔者的愚见认为是无法写出高质量实用的C 语言程序。这就是为什么前面所有章节的的示范代码
    发表于 09-09 14:13

    PIC单片机C语言编程

    性要求又很高,因此,如果没有单片机体系结构和硬件资源作详尽的了解,以笔者的愚见认为是无法写出高质量实用的C语言程序。这就是为什么前面所有章
    发表于 03-03 10:55

    单片机c语言学习心得

    上学到了什么?是不是为了期末考试忙碌呢?考完得了90分,哈哈哈好高兴啊,下学期开学回来忘的一干二净,是不是?学到什么了?但是我告诉单片机一旦学会,永远不会忘了。另外我再说说用汇编
    发表于 06-17 14:05

    [转]单片机C语言学习架构分享

    的经验告诉大家,绝对没有这个必要,初学者一开始就直接用C语言单片机编程,既省时间,学起来又容易,进步速度会很快。在刚开始学
    发表于 09-02 22:12

    单片机C语言学习架构分享

    的经验告诉大家,绝对没有这个必要,初学者一开始就直接用C语言单片机编程,既省时间,学起来又容易,进步速度会很快。在刚开始学
    发表于 02-28 09:37

    C语言单片机编程使用的高级语言

    今天主要分享单片机编程使用的高级语言C语言单片机编程
    发表于 10-20 16:38

    单片机为什么要使用C语言

    掉;  ·可方便地接受多种实用程序的服务:如片上资源的初始化有专门的实用程序自动生成;再如,有实时多任务操作系统可调度多道任务,简化用户编程,提高运行的安全性等等。想了解更多单片机C
    发表于 12-10 09:23

    单片机为什么要使用C语言

    常用的标准函数库,以供用户直接使用;  ·头文件定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发;  ·有严格的句法检查,错误很少,可容易地在高级语言
    发表于 12-25 09:43

    单片机编程技巧-时钟中断

    单片机编程技巧-功能强大的时钟中断 功能强大的时钟中断  在单片机程序设计中,设置一个好的时钟中断
    发表于 04-07 09:18 1191次阅读

    51单片机中断编程实例详解

    51单片机中断编程实例详解.pdf
    发表于 12-16 15:42 17次下载

    51单片机入门-2-中断与定时

    51单片机入门-1-中断与定时文章目录51单片机入门-1-中断与定时前言一、中断基础1.中断优先
    发表于 11-21 21:06 5次下载
    51<b class='flag-5'>单片机</b>入门-2-<b class='flag-5'>中断</b>与定时

    51单片机开启中断和定时器

    51单片机开启中断和定时器关于中断,需要用到中断允许寄存器:定时器中断需要的是:总
    发表于 11-22 12:06 12次下载
    51<b class='flag-5'>单片机</b>:<b class='flag-5'>开启</b><b class='flag-5'>中断</b>和定时器

    单片机用按钮中断函数

    的功能,如播放音乐、启动灯光等等。本文将对单片机使用按钮中断函数做详细的阐述,包括实现过程、原理以及相关的编程技巧,以期帮助读者深入了解单片机
    的头像 发表于 09-01 10:17 947次阅读