IT技術互動交流平臺

4MSP430定時器_定時器中斷

作者:楊奉武456  來源:IT165收集  發布日期:2016-12-26 20:23:10

一開始沒寫好就上傳了,,,,,,,,這次來個全的

自己學MSP430是為了寫一篇關于PID的文章,需要430在proteus上做仿真,一則認為在自動控制算法上PID真的很經典,PLC設備上大多是模塊式的,拿來就是參考說明書設置,設置,,,而對于單片機而言就是程序!!!只有自己寫出來PID算法,才能對PID有更深刻的理解,..二來感覺自己已經好久都沒有寫一篇讓自己感到滿意的文章了......

這些天,,,,今天終于解除了我的很大疑惑了,,,,,,,終于可以完成這篇普通普通定時器中斷的文章了,,,,,,其實說普通也不普通,,MSP430的定時器確實設計的很強悍,,,,,,,,

其實對于普通定時器吧!不外乎,,,,定時,,,,產生中斷,,,,細節問題就不說了,,,,看我下面的理論介紹部分,,,我更注重于實戰講解,,因為自己學習也喜歡聽一步一步實戰講解的.然后再.

看一下具體的理論資料,,,,,,然后就,,,,,懂了,,,,會了

CCR0   和  TACCR0  是一個哈,,,,,,,,別在別處看到CCR0就蒙了哈,,,這是設置的計數比較值,,

430的定時器能選擇時鐘來源,,具體看下面,,,如果不選擇那么就是用一個引腳(特定的)的輸入PWM作為他的時鐘了

先上菜----外部引腳來四個上升沿就進入下面的中斷函數  

實質----內部計數器TAR在計數到CCR0(TACCR0)時就進來了

__interrupt void Timer_A0 (void)     //定時器A0中斷服務程序
{
  P4OUT ^= BIT1; //P4_1引腳反轉
}

然后再來一個上升沿,,就會進入---溢出中斷-------可以取消,不讓他有溢出中斷   

實質----內部計數器TAR在計數到CCR0后,,再來一個上升沿就變成 0 了,,,然后就就進來了

__interrupt void Timer_A1 (void) //A1,A2,溢出中斷都會進
{
  switch( TAIV )
  {
  case  TAIV_TAIFG://溢出中斷
             P4OUT ^= BIT1; //P4_1反轉
             break;
  }
}

下面是完整的程序

P1_0引腳,來四個上升沿TAR變為4,,P4_1反轉,,,再來一個沿TAR變為0,再來四個,TAR變為4,,P4_1反轉,再來一個沿TAR變為0,再來四個,TAR變為4,,P4_1反轉,,,循環

所以發現第一次來四個P4_1反轉,,,,后來的都是來5個再反轉了,,所以如果你想來四個反轉,,那么TACCR0應該為3

#include 'io430.h'

void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;//關閉看門狗