新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 談談單片機C語言編程中不經意間的一個小錯誤!

        談談單片機C語言編程中不經意間的一個小錯誤!

        作者: 時間:2013-03-08 來源:網絡 收藏

        換算到匯編中可以比較明顯的看到問題:

        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的時候要記得修改此處的參數,否則搞死人不償命的。

        51單片機相關文章:51單片機教程


        c語言相關文章:c語言教程



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 枣强县| 湖北省| 凤翔县| 通化市| 汉阴县| 兰州市| 宝坻区| 苍南县| 绵阳市| 富顺县| 昂仁县| 竹北市| 柳林县| 读书| 汾阳市| 昭苏县| 凤冈县| 白玉县| 南丰县| 客服| 盐池县| 石渠县| 高唐县| 博客| 龙门县| 景东| 北流市| 同心县| 当涂县| 德昌县| 永和县| 祁阳县| 绥江县| 平江县| 三原县| 海原县| 贵德县| 深州市| 托克托县| 龙岩市| 麻城市|