新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機寄存器配置問題

        單片機寄存器配置問題

        作者: 時間:2016-11-24 來源:網絡 收藏
        在寫單片機是對寄存器的設置要注意,有很多外設可能用這一個寄存器,在外設初始化的時候或對寄存器修改是可能會影響到其他外設的正常工作,今天就遇到這樣一個蛋疼的問題,
        這是我初始化程序中的一段代碼節選:
        void init_timer0(void)
        {
        ...
        TIMSK=0X01;//使能溢出中斷,大概16ms一次
        }
        void init_timer2(void)
        {
        ...
        TIMSK=0x40;//關閉比較中斷打開溢出中斷
        }
        void adc_init(void)
        {
        ...
        }
        注意到定時機器0和1的中斷設置位在同一個寄存器TIMSK中的不同位中,上面的代碼如果在初始化完定時器0后在器初始化點時期1時則定時器0的中斷服務函數無法執行,十一代碼修改如下:
        void init_timer0(void)
        {
        ...
        TIMSK |= 0X01;//使能溢出中斷,大概16ms一次
        }
        void init_timer2(void)
        {
        ...
        TIMSK |= 0x40;//關閉比較中斷打開溢出中斷
        }
        void adc_init(void)
        {
        ...
        }
        程序正常運行
        總結:以后在寄存器(還樣還要注意寄存器在復位的初始值)的設置上找采用 “|” 和 “&” 來置位和清零寄存器的某一位,這樣就不會在不注意的情況下影響到其他外設的正常工作了


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 东光县| 旺苍县| 滦南县| 孝感市| 怀集县| 集安市| 大埔县| 綦江县| 大兴区| 凤城市| 田阳县| 大厂| 四子王旗| 云梦县| 商水县| 咸丰县| 普定县| 德庆县| 九江县| 连城县| 太湖县| 武清区| 昌都县| 芜湖县| 靖江市| 周至县| 上虞市| 兴和县| 泽库县| 休宁县| 丰顺县| 古交市| 鹤庆县| 南皮县| 云霄县| 崇阳县| 东源县| 剑阁县| 涟源市| 天门市| 宝兴县|