日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年07月19日(星期六)

2020年07月19日 | [MSP430] 2.中斷和計時器

發(fā)布者:oplkjjj 來源: eefocus關(guān)鍵字:MSP430  中斷  計時器 手機看文章 掃描二維碼
隨時隨地手機看文章

在這一部分中我們將會初步了解到中斷的概念及其作用, 我們會嘗試使用計時器中斷和 I/O 中斷操作 LED 燈,讓我們開始吧!


什么是中斷?我們可以將它理解為一個約定的信號,來告知單片 機特定的事件發(fā)生了,引起程序從正常運行的主函數(shù)中斷開,轉(zhuǎn)而 執(zhí)行中斷處理程序,處理特定的事件。


中斷是一個非常重要的概念,它可以讓處理器免于執(zhí)行冗余的輪 詢操作等待特定的外部事件的發(fā)生。在 MSP430 的架構(gòu)中,有許 多種類的中斷:計時器中斷,I/O 中斷,ADC 中斷等等。每一種中 斷在使用前都要使能和配置,每一種中斷又分別有中斷處理程序 (Service Routine)。


下面就讓我們嘗試寫一個小程序,實現(xiàn)使用計時器中斷和 I/O 中 斷操作 LED 燈。


?#include "msp430g2553.h" void main(void)

{

  WDTCTL = WDTPW + WDTHOLD; // Stop WDT

按照慣例,首先包含 g2553 的頭文件,關(guān)閉看門狗。每次寫程序的時候你總會用到它們。

  CCTL0 = CCIE;  // CCR0 interrupt enabled

  TACTL = TASSEL_2 + MC_1 + ID_3;  // SMCLK/8, upmode

  TACCR0 = 10000;  // 12.5 Hz

這幾行簡單配置了計時器中斷。


  CCTL0 = CCIE;  // CCR0 interrupt enabled

我們首先通過置 CCTL0(Timer_A capture/compare control 0)寄存器的 CCIE 位(Capture/compare interrupt enable)使能了計時器中斷。

  TACTL = TASSEL_2 + MC_1 + ID_3;  // SMCLK/8, up mode


然后我們通過 TACTL(Timer_A control)寄存器配置了計時器的時鐘。如果查閱一下 MSP430 的手冊,你會看到之后幾位分別表示什么含義:

TASSEL_2 選擇了 SMCLK 時鐘(由內(nèi)部 DCO 支持,默認頻 率大約為 1MHz);

MC_1 選擇了上升模式(up mode),即計時器計數(shù)的時候由小 至大,計數(shù)上限由 TACCR0(Timer_A capture/compare 0)寄存器決定。

由此就有


  TACCR0 = 10000;  // 12.5 Hz

你一定猜到了配置的結(jié)果 12.5Hz 是怎么得來的了吧, 1M/8/10000=12.5Hz,這就是產(chǎn)生計時器中斷的頻率。


通過選擇不同的時鐘源,不同的時鐘分頻,不同的計數(shù)上限,你幾乎可以配置出任何你想要的頻率,需要注意的是,MSP430的寄存器都是16 位的,所以 TACCR0 的上限是 65535。

我們繼續(xù)完善我們的程序。


  P1OUT &= 0x00;  // Shut down everything P1DIR &= 0x00;

  P1DIR |= BIT0 + BIT6;  // P1.0 and P1.6 pins output 

  P1REN |= BIT3; // Enable internal pull-up/down resistors

  P1OUT |= BIT3;  // Select pull-up mode for P1.3

這幾行代碼我們應(yīng)該已經(jīng)熟悉了。我們首先清空了 PORT1 的輸 出寄存器和方向寄存器,然后配置板上兩個 LED 所對應(yīng)引腳為輸出, 為按鍵對應(yīng)的引腳配置上拉電阻。


  P1IE |= BIT3;  // P1.3 interrupt enabled

  P1IES |= BIT3;  // P1.3 Falling edge

  P1IFG &= ~BIT3;  // P1.3 IFG cleared

這幾行代碼中,我們首先使能了 P1.3 引腳的中斷功能,然后我 們選擇了下降沿觸發(fā)中斷(高電平到低電平觸發(fā)),Launchpad 上的按鍵在不按下的時候連接著 VCC,而按下的時候連接的是 GND,因此我們選擇下降沿觸發(fā)。最后,我們要清除相應(yīng)的中斷標(biāo) 志位。中斷標(biāo)志位通知單片機一個中斷的產(chǎn)生,因此在每次中斷處 理程序結(jié)束后,如果我們希望下次產(chǎn)生事件的時候依然有中斷,我 們應(yīng)當(dāng)清除中斷標(biāo)志位。


  _EINT(); // Enable all interrupts

  while(1) // Loop forever, we work with interrupts! 

    {}

打開所有中斷,輕松加愉快。接下來就是中斷的事兒了。


// Timer A0 interrupt service routine

#pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A0 (void) {

  P1OUT ^= BIT0;  // Toggle P1.0

}


這是 TimerA 的中斷處理程序。每當(dāng)計數(shù)器溢出的時候,中斷觸 發(fā),程序便會執(zhí)行這段代碼,翻轉(zhuǎn) P1.0 的輸出,對應(yīng)地,LED1 會 出現(xiàn)閃爍的效果。每次翻轉(zhuǎn)之后,程序便會回到觸發(fā)中斷的地方, 在本例中,回到 While(1)。


// Port 1 interrupt service routine

?#pragma vector=PORT1_VECTOR __interrupt void Port_1(void) {

  P1OUT ^= BIT6;  // Toggle P1.6

  P1IFG &= ~BIT3;  // P1.3 IFG cleared

}


這是PORT1的中斷處理程序,每當(dāng)我們按下P1.3對應(yīng)的按鍵時,中斷觸發(fā),程序便會執(zhí)行這段代碼,效果如同在前一節(jié)中演示的一樣。


燒代碼看效果吧!


以下是這一節(jié)的完整代碼:


#include "msp430g2553.h" 

void main(void)

{

  WDTCTL = WDTPW + WDTHOLD;

  CCTL0 = CCIE;  // CCR0 interrupt enabled

  TACTL = TASSEL_2 + MC_1 + ID_3;  // SMCLK/8, upmode

  TACCR0 = 10000;  // 12.5 Hz

  P1OUT &= 0x00;  // Shut down everything

  P1DIR &= 0x00;

  P1DIR |= BIT0 + BIT6;  // P1.0 and P1.6 pins output

  P1REN |= BIT3;  // Enable internal pull-up/down resistors

  P1OUT |= BIT3;  // Select pull-up mode for P1.3

  P1IE |= BIT3;  // P1.3 interrupt enabled

  P1IES |= BIT3;  // P1.3 Falling edge

  P1IFG &= ~BIT3;  // P1.3 IFG cleared

  _EINT();  // Enable all interrupts

  while(1)  // Loop forever, we work with interrupts!

  {}

}

 

// Timer A0 interrupt service routine

#pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A0 (void) {

  P1OUT ^= BIT0;  // Toggle P1.0

}

 

// Port 1 interrupt service routine

?#pragma vector=PORT1_VECTOR __interrupt void Port_1(void) {

  P1OUT ^= BIT6;  // Toggle P1.6

  P1IFG &= ~BIT3;  // P1.3 IFG cleared

}

關(guān)鍵字:MSP430  中斷  計時器 引用地址: [MSP430] 2.中斷和計時器

上一篇:lcd12864驅(qū)動程序 用于MSP430
下一篇: [MSP430] 3.UART

推薦閱讀

憑借開發(fā)和管理戰(zhàn)略性增值供應(yīng)鏈解決方案的專業(yè)技能,全球技術(shù)領(lǐng)導(dǎo)者安富利近日被知名研究機構(gòu)Gartner評為高科技供應(yīng)鏈企業(yè)。安富利認為其之所以能躋身2018年Gartner高科技供應(yīng)鏈25強榜單的前10名,正是由于其能夠在全球范圍內(nèi)提供可快速擴展的、定制化的供應(yīng)鏈解決方案。 Gartner每年都會根據(jù)“財富全球500強”和“福布斯全球2000強”1名單,選出入圍供應(yīng)...
1. 什么是二極管的正向額定電流?二極管的額定電流是二極管的主要標(biāo)稱值,比如5A/100V的二極管,5A就是額定電流。通常額定電流的定義是該二極管所能 通過的額定平均電流。但是有些的測試前是方波,也就是可以通過平均值為5A的方波電流。有些得測試前提是直流,也就是能通過5A的直流電流。理論上來說, 對于硅二極管,以方波為測試條件的二極管能通過更...
STM8 SWIM時鐘控制寄存器(CLK_SWIMCCR)地址偏移值:0x0D復(fù)位值:未定義位7:1保留。始終為0。位0SWIMCLK:SWIM時鐘分頻值由軟件置位或清除。0:SWIM時鐘被2分頻1:SWIM時鐘未2分頻
為新能源汽車的核心動力組成部分,電池的性能在很大程度上決定了車輛的綜合表現(xiàn),其技術(shù)路線的爭論一直存在。究竟哪種電池更適合當(dāng)前的純電動車,似乎一直沒有一個定論。由于動力電池的性能優(yōu)勢不同,根本上來說,爭議圍繞的也是續(xù)航問題與安全系數(shù)。 這樣的電池性能分化也導(dǎo)致用戶在選擇何種電池車型搖擺不定.在新能源汽車市場,電池安全與續(xù)航不能同時兼...

史海拾趣

問答坊 | AI 解惑

基于at89c51的可燃性氣體語音報警器畢業(yè)設(shè)計

求助__基于at89c51的可燃性氣體報警器畢業(yè)設(shè)計…

查看全部問答∨

有沒有精通TI達芬奇系列DSP芯片的工程師

目前有個項目,需要請一位工程師(業(yè)余兼職即可)。 1、熟悉TI 達芬奇系列DSP芯片,有DM64xx上開發(fā),優(yōu)化經(jīng)驗。 2、熟悉H264協(xié)議或者MPEG4協(xié)議,最好在DM64XX上做過相關(guān)協(xié)議的開發(fā)或者優(yōu)化工作。 詳細可以QQ455247859聯(lián)系。 …

查看全部問答∨

關(guān)于simulink利用rtw工具箱轉(zhuǎn)化成C代碼的一些問題

        小弟是DSP初學(xué)者,想把simulink的框圖轉(zhuǎn)化成c代碼,在DSP上跑.我在rtw工具箱的設(shè)置是:     Solver:  stop time 選inf             &nb ...…

查看全部問答∨

請問激活驅(qū)動ERROR ID:2錯誤,怎么解決?

WINCE注冊表中激活驅(qū)動的時候出現(xiàn)ERROR ID:2這個錯誤,可有人知道是啥原因?…

查看全部問答∨

弱弱的一問,最大包長度的問題

例如我要傳送一張圖片 大小為100KB,而我的端點最大包長度為1KB,那么我就要傳100次是嗎,對數(shù)據(jù)的分割時應(yīng)用層來做還是驅(qū)動層自動做的,我大概看了驅(qū)動的代碼好像沒有數(shù)據(jù)分割這么一說,見笑?!?

查看全部問答∨

SPI總線通信里面,是不是一個設(shè)備為主設(shè)備就永遠只能做主設(shè)備,做從設(shè)備的設(shè)備永遠只能做從設(shè)備?主從設(shè)備能不能按要求動態(tài)切換?

SPI總線通信里面,是不是一個設(shè)備為主設(shè)備就永遠只能做主設(shè)備,做從設(shè)備的設(shè)備永遠只能做從設(shè)備?主從設(shè)備能不能按要求動態(tài)切換? //================ 就是某一刻通信::A(主)-----》B(從) 隨后的某一刻通信::B(主)-----》A(從) ...…

查看全部問答∨

不間斷電源UPS問題

沒有接觸過不間斷電源,有幾個問題像大家請教,忘不惜告知,先謝了! 有裝飾用的LED燈,總功率根據(jù)項目不同一般在25W~50W之間,12Vdc。之前一直采用開關(guān)電源(輸入220,輸出12vdc)直接供電,停電后則滅。 現(xiàn)客戶提出新要求: 要求正常時,LED燈 ...…

查看全部問答∨

usbdemo代碼在flash可以運行,無法在ram里面運行?(問題已經(jīng)解決)

IAR EWARM 4.41 & JLink & STR912FW44 & Windows 2003我把中斷向量表復(fù)制到ram的最高端, 一共64bytes.在flash里面, 中斷都沒有問題. 但是在ram里面不正常.我測試了0x04000000&nb ...…

查看全部問答∨

怎么用單片機控制MOS管?

小弟最近剛開始學(xué)習(xí)單片機,最近要用單片機來控制MOS管的開斷,僅僅是開斷就可以了,我想用單片機直接控制門級可以嗎?必須要加驅(qū)動電路嗎?…

查看全部問答∨

關(guān)于tiny210開發(fā)板中su: must be suid to work properly的問題

嵌入式文件系統(tǒng)一般用戶執(zhí)行su root切換根用戶提示錯誤:su: must be suid to work properly解決方法:修改busybox權(quán)限,chmod 4755 busybox …

查看全部問答∨
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved