在這一部分中我們將會(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
}
上一篇:lcd12864驅(qū)動(dòng)程序 用于MSP430
下一篇: [MSP430] 3.UART
推薦閱讀
史海拾趣
在電子行業(yè)中,標(biāo)準(zhǔn)化建設(shè)對于提升產(chǎn)品質(zhì)量和企業(yè)競爭力具有重要意義。Aten International深知標(biāo)準(zhǔn)化建設(shè)的重要性,因此在產(chǎn)品研發(fā)和生產(chǎn)過程中始終堅(jiān)持高標(biāo)準(zhǔn)、嚴(yán)要求。公司還積極參與國際標(biāo)準(zhǔn)化組織的活動(dòng),推動(dòng)相關(guān)標(biāo)準(zhǔn)的制定和完善。正是憑借在標(biāo)準(zhǔn)化建設(shè)方面的卓越表現(xiàn),Aten International贏得了業(yè)界的高度認(rèn)可和廣泛贊譽(yù)。
以上五個(gè)故事雖然基于虛構(gòu),但它們都反映了Aten International在電子行業(yè)發(fā)展的真實(shí)情況。這些故事展示了公司在技術(shù)創(chuàng)新、市場拓展、標(biāo)準(zhǔn)化建設(shè)等方面的努力和成就,也體現(xiàn)了Aten International在電子行業(yè)中的領(lǐng)先地位和卓越貢獻(xiàn)。
在電子設(shè)備的日益增多的背景下,用戶對于高效、便捷的設(shè)備管理需求愈發(fā)強(qiáng)烈。Aten International憑借其對連接技術(shù)的深入理解,成功研發(fā)出KVM切換器,該產(chǎn)品能夠?qū)崿F(xiàn)對多臺(tái)計(jì)算機(jī)的控制,大大提高了工作效率。隨著技術(shù)的不斷進(jìn)步,Aten International的KVM切換器不斷更新迭代,從最初的簡單切換功能,發(fā)展到現(xiàn)在的智能管理、遠(yuǎn)程操控等高級(jí)功能,成為了電子行業(yè)的一大亮點(diǎn)。
隨著多媒體技術(shù)的快速發(fā)展,專業(yè)影音產(chǎn)品的市場需求逐漸增長。Aten International緊跟市場趨勢,投入大量研發(fā)資源,推出了一系列專業(yè)影音產(chǎn)品,包括高清視頻切換器、音頻分配器等。這些產(chǎn)品以其高品質(zhì)、高穩(wěn)定性受到了市場的廣泛認(rèn)可,為Aten International在電子行業(yè)樹立了良好的口碑。
隨著電子行業(yè)的快速發(fā)展,AMERICASEMI意識(shí)到只有不斷創(chuàng)新才能在市場中立于不敗之地。因此,公司加大了對研發(fā)的投入,積極引進(jìn)先進(jìn)的技術(shù)和設(shè)備,不斷提升自身的研發(fā)能力。經(jīng)過多年的努力,AMERICASEMI成功研發(fā)出多款具有創(chuàng)新性的半導(dǎo)體產(chǎn)品,如高性能的功率管理芯片和低功耗的傳感器等,這些產(chǎn)品在市場上獲得了廣泛的認(rèn)可。
Electrocube Inc公司的創(chuàng)始人在創(chuàng)立之初便面臨著重重挑戰(zhàn)。當(dāng)時(shí),電子行業(yè)正處于快速發(fā)展階段,市場競爭激烈。然而,創(chuàng)始人憑借對電子技術(shù)的深刻理解和敏銳的市場洞察力,成功開發(fā)出了一款高性能、低成本的電容器產(chǎn)品。這款產(chǎn)品迅速獲得了市場的認(rèn)可,為公司贏得了第一桶金,也為后續(xù)的發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
作為一家有社會(huì)責(zé)任感的企業(yè),Electrocube Inc公司始終關(guān)注環(huán)保問題。公司積極采用環(huán)保材料和生產(chǎn)工藝,減少生產(chǎn)過程中的污染排放。同時(shí),公司還積極參與環(huán)保公益活動(dòng),推動(dòng)電子行業(yè)的綠色發(fā)展。這種對環(huán)保的關(guān)注和踐行,使得Electrocube Inc公司在業(yè)界樹立了良好的形象。
系統(tǒng):wince 5.0 CPU 三星2450 目的:用戶實(shí)現(xiàn)更新開機(jī)畫面。 方法一:把bootlogo.bmp寫到nand的某一塊,然后eboot去讀,我還沒有想這個(gè) 方法二:在電腦上把bootlo ...… 查看全部問答∨ |
工控機(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下載是不是可以用并口下載啊,用什么軟件呢?謝謝各位了!… 查看全部問答∨ |
項(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)?… 查看全部問答∨ |
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) ...… 查看全部問答∨ |
|
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ā)板 精華推薦
- STM32 MCU一次計(jì)算優(yōu)化和提速
- STM32 MCO時(shí)鐘輸出配置實(shí)驗(yàn)
- STM32 HAL SPI讀取MPU6500的設(shè)備ID異常
- STM32內(nèi)存受限情況下攝像頭驅(qū)動(dòng)方式與圖像裁剪的選擇
- 1-單片機(jī)STM32---中斷與事件的區(qū)別
- 38KHz,NEC紅外模擬發(fā)送和接收程序
- 指針的騷操作- 變量拼接和分離
- STM32下載HAL庫寫的代碼后J-Link識(shí)別不到芯片,必須要按住復(fù)位才能下載?
- 利用滴答定時(shí)器(SysTick)實(shí)現(xiàn)簡單的延時(shí)函數(shù)
- 【傳感器,開玩啦】第一關(guān):免費(fèi)申請?jiān)u測運(yùn)動(dòng)和環(huán)境傳感器開發(fā)板
- 在線研討會(huì)報(bào)名|西門子高科技電子設(shè)計(jì)解決方案
- 馬上下載Intel白皮書 贏取驚喜禮品
- 了解keysight汽車電子解決方案,答題贏好禮
- 【EE征集令】LaunchPad學(xué)習(xí)全體驗(yàn)
- 報(bào)名贏紅包,到場抽開發(fā)板|2021 RT-Thread 開發(fā)者大會(huì)等你約!
- 下載MPS AI電源資料包,贏【Keep體脂秤、按摩眼罩、電腦支架】
- 下資料 看視頻 抽大獎(jiǎng)!泰克汽車電子測試解決方案
- 有獎(jiǎng)直播 | 恩智浦微處理器產(chǎn)品與應(yīng)用分享 報(bào)名中!
- 有獎(jiǎng)直播|安森美半導(dǎo)體針對物聯(lián)網(wǎng)的先進(jìn)圖像傳感器解決方案
- 英特爾Foreshadow芯片漏洞曝光 或被竊取安全鎖定區(qū)的敏感數(shù)據(jù)
- 3D固態(tài)激光雷達(dá)SoC芯片進(jìn)入量產(chǎn)倒計(jì)時(shí)
- 重磅!揭秘全球工業(yè)機(jī)器人巨頭數(shù)據(jù)
- 重慶將培育千億產(chǎn)值規(guī)模集成電路產(chǎn)業(yè)
- 四大廠區(qū)深耕半導(dǎo)體 華虹業(yè)績創(chuàng)新高
- 海藍(lán)色iPhone 12概念圖看起來顯質(zhì)感
- 泄露的iOS 14顯露了新一代iMac一體機(jī)的圖標(biāo)
- 蘋果已發(fā)出WWDC 2020線上活動(dòng)的邀請函
- 升級(jí)版防爆盾,三星橫排6攝手機(jī)相機(jī)系統(tǒng)專利解密
- 傳蘋果在開發(fā)可折疊iPhone:兩塊屏幕連接