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

歷史上的今天

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

2020年07月19日 | [MSP430] 2.中斷和計(jì)時(shí)器

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

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


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


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


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


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

{

  WDTCTL = WDTPW + WDTHOLD; // Stop WDT

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

  CCTL0 = CCIE;  // CCR0 interrupt enabled

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

  TACCR0 = 10000;  // 12.5 Hz

這幾行簡單配置了計(jì)時(shí)器中斷。


  CCTL0 = CCIE;  // CCR0 interrupt enabled

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

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


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

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

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

由此就有


  TACCR0 = 10000;  // 12.5 Hz

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


通過選擇不同的時(shí)鐘源,不同的時(shí)鐘分頻,不同的計(jì)數(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 的輸 出寄存器和方向寄存器,然后配置板上兩個(gè) 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 上的按鍵在不按下的時(shí)候連接著 VCC,而按下的時(shí)候連接的是 GND,因此我們選擇下降沿觸發(fā)。最后,我們要清除相應(yīng)的中斷標(biāo) 志位。中斷標(biāo)志位通知單片機(jī)一個(gè)中斷的產(chǎn)生,因此在每次中斷處 理程序結(jié)束后,如果我們希望下次產(chǎn)生事件的時(shí)候依然有中斷,我 們應(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)計(jì)數(shù)器溢出的時(shí)候,中斷觸 發(fā),程序便會(huì)執(zhí)行這段代碼,翻轉(zhuǎn) P1.0 的輸出,對應(yīng)地,LED1 會(huì) 出現(xiàn)閃爍的效果。每次翻轉(zhuǎn)之后,程序便會(huì)回到觸發(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)的按鍵時(shí),中斷觸發(fā),程序便會(huì)執(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  中斷  計(jì)時(shí)器 引用地址: [MSP430] 2.中斷和計(jì)時(shí)器

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

推薦閱讀

1.問題描述:使用STM32CubeMX,配置SDIO的4bit模式,對SD卡進(jìn)行讀寫測試。2.準(zhǔn)備工作:軟件版本:STM32CubeMX–4.22.0 ;KEIL5 硬件平臺(tái):原子戰(zhàn)艦V3(1)軟件設(shè)置:I. SDIO選擇,這里選擇4bits模式,實(shí)際選1bits也可以。II. 時(shí)鐘樹配置III. SDIO模式時(shí)鐘分頻設(shè)置,其他默認(rèn)。 其他詳細(xì)配置請自行打開源碼壓縮包里的MP3_Test.ioc查看。(2)Keil工程測試...
(圖片來源:英偉達(dá)官網(wǎng))據(jù)外媒報(bào)道,在汽車上路之前,汽車需要具備的第一個(gè)基本能力就是判斷該車與相鄰汽車或是遇到的物體之間的距離。但是,當(dāng)路上有事情打斷時(shí),甚至有電話打過來時(shí),駕駛員的注意力往往會(huì)被分散。為了克服該問題,英偉達(dá)的研究人員提出了一個(gè)利用神經(jīng)網(wǎng)絡(luò)的解決方案。英偉達(dá)利用深度神經(jīng)網(wǎng)絡(luò),從單個(gè)攝像頭中提取數(shù)據(jù),探測物體距離。...
STM8 SWIM時(shí)鐘控制寄存器(CLK_SWIMCCR)地址偏移值:0x0D復(fù)位值:未定義位7:1保留。始終為0。位0SWIMCLK:SWIM時(shí)鐘分頻值由軟件置位或清除。0:SWIM時(shí)鐘被2分頻1:SWIM時(shí)鐘未2分頻
本篇詳細(xì)的記錄了如何使用STM32CubeMX配置STM32L431RCT6的 RTC 外設(shè)。1. 準(zhǔn)備工作硬件準(zhǔn)備首先需要準(zhǔn)備一個(gè)開發(fā)板,這里我準(zhǔn)備的是STM32L4的開發(fā)板(BearPi):軟件準(zhǔn)備需要安裝好Keil - MDK及芯片對應(yīng)的包,以便編譯和下載生成的代碼。2.生成MDK工程選擇芯片型號(hào)打開STM32CubeMX,打開MCU選擇器:搜索并選中芯片STM32L431RCT6:配置時(shí)鐘源如果選擇使...

史海拾趣

問答坊 | AI 解惑

咋辦

:\'( :\'( :\'( :\'( :\'( :\'( :\'( :\'( :\'( :\'( 不能灌水不能傳東西。。要下載咋辦哈…

查看全部問答∨

Pocket PC中漢字輸入法分析與實(shí)現(xiàn).pdf

Pocket PC中漢字輸入法分析與實(shí)現(xiàn).pdf…

查看全部問答∨

wince更新內(nèi)核問題(eboot logo)

系統(tǒng):wince 5.0 CPU 三星2450 目的:用戶實(shí)現(xiàn)更新開機(jī)畫面。         方法一:把bootlogo.bmp寫到nand的某一塊,然后eboot去讀,我還沒有想這個(gè)         方法二:在電腦上把bootlo ...…

查看全部問答∨

linux交互界面開發(fā)minigui

工控機(jī)交互界面,相對簡單,所以可優(yōu)化考慮用minigui或不用第三方圖形庫。在linux虛擬機(jī)上能運(yùn)行就行,移植到arm我們自己完成。 需求和用戶界面、菜單等基本畫好了,詳見: http://www.qiyedz.com/LinuxGuiDev.doc 要求有開發(fā)經(jīng)驗(yàn),有階段性 ...…

查看全部問答∨

新手:常用40腳avr單片機(jī)型號(hào)?at89s52是嘛?

額,我有一個(gè)avr&51的開發(fā)板(51用的是STC89C52),現(xiàn)在想學(xué)習(xí)一下avr單片機(jī),不知道買哪一款avr單片機(jī),所以想問問大家,還有avr下載是不是可以用并口下載啊,用什么軟件呢?謝謝各位了!…

查看全部問答∨

Cortex-m364位乘如何實(shí)現(xiàn)?

項(xiàng)目需要在STM32上實(shí)現(xiàn)ms-ADPCM,有大量的乘除計(jì)算,需要對64位有符號(hào)整型進(jìn)行乘法計(jì)算,相乘的兩個(gè)數(shù)據(jù)在40位左右,相乘的結(jié)果基本在80位以上,這個(gè)怎么實(shí)現(xiàn)?…

查看全部問答∨

stm8s103K3怎么把輸出IO設(shè)置成推挽?

漏極開路和推挽輸出在哪里設(shè)置? 謝謝!!…

查看全部問答∨

AVR程序求解一個(gè)簡單的函數(shù)

void LS_595_DS1(uchar dat){ char i; for(i=0;i<8;i++) {   _SH1=0;   _DS1=dat&0x01;   dat>>=1;   delay_ls(5);   _SH1=1;  }  _SL1=0;  delay_ls(5) ...…

查看全部問答∨

這個(gè)程序中P3_3能被這樣賦值嗎

for(c=0;c<8;c++)   {  P3_2=0; P3_3=num&0x80; num<<=1; P3_2=1;   }這是用兩片595驅(qū)動(dòng)8位數(shù)碼管的程序程序能用 其中有一段是上面這樣寫的P3_3按理說不是只能賦值成0或1嗎 像1上面這樣不會(huì)有問題嗎 ...…

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

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

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