1. 程式人生 > >暫存器的設定要注意

暫存器的設定要注意

在寫 微控制器是對 暫存器的設定要注意,有很多外設可能用這一個暫存器,在外設初始化的時候或對暫存器修改是可能會影響到其他外設的正常工作,今天就遇到這樣一個蛋疼的問題,

  這是我初始化程式中的一段程式碼節選:

  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)

  {

  ...

  }

  程式正常執行

  總結:以後在暫存器(還樣還要注意暫存器在復位的初始值)的設定上找採用 “|” 和 “&” 來置位和清零暫存器的某一位,這樣就不會在不注意的情況下影響到其他外設的正常工作了