最近由于項目需求,研究了一下MSP430,總體感覺MSP430還是非常不錯的單片機,不虧是TI的產品。項目中用MSP430實現了紅外遙控功能,下面我們先來分析一下紅外的發送原理。
紅外發送原理
紅外發送實際上是按照一定的時間間隔,斷斷續續的發送紅外射線來進行數據傳輸,為了提高數據傳輸的準確定和降低功耗,紅外一般是采用38K的紅外調制信號,其中,38K允許上下浮動1K以內的誤差。紅外發送的開頭需要一個引導位,引導位是發送9ms,然后停止4.5ms,如果發送完一個數據之后還需要再發數據的話還需要連發碼,連發碼是先發送9ms,然后停止4.5ms。引導碼和連發碼的波形如下:
引導碼和連發碼之后是32位數據位,這32位數據位實際上是一個字節,其中,前16位是用戶自定義地址碼,用來區分紅外是發給誰的,比如,電視的紅外遙控是不能操作冰箱或空調的,剩下的16位是傳輸的數據,其中前8位是要傳送的一個字節,后8位是這個字節的反碼,用來校驗數據傳輸的是否正確的,數據位無非就是0或1,其中0是先發送560us紅外,然后停止565us,1是先發送560us然后停止1685us,0和1的波形如下:
每次傳輸實際上就是一個引導碼加32位數據位或者一個連發碼加32位數據位,整體的波形如下:
注意,你上所有的波形都是接收時的波形,由于紅外接收頭,如HS0038B,在采集到38K紅外線時輸出低電平,在采集不到38K紅外線時輸出高電平,所以,當發送紅外線時在波形中為低電平,停止發送時反而為高電平。
實現電路
熟習了原理以后,再來設計電路圖就非常簡單了,用兩個三極管停止串聯,其中一個的基極(無論是PNP還是NPN,都是旁邊那個腳)接到38K方波上,另一個的基極接到發送控制引腳上,我這里沒有自己來繪制原理圖,采用了一個網上的原理圖,具體如下:
代碼設計
下面的原理部分都理通了,下面,我們用MSP430來實現設計,其中P2.3口是MSP430的PWM輸出引腳,這里是輸出38K方波,P2.2口為發送停止控制引腳。具體代碼如下:
#include static unsigned int cnt = 0; void delay_ms(unsigned int ms){ cnt = ms; TBCCR0 = 1000; TBCTL = CNTL_0 + TASSEL_2 + MC_1 + ID_3; TBCCTL0 = CCIE; while(cnt != 0); TBCTL = MC_0; } void delay_us(unsigned int us){ cnt = 1; TBCCR0 = us; TBCTL = CNTL_0 + TASSEL_2 + MC_1 + ID_3; TBCCTL0 = CCIE; while(cnt != 0); TBCTL = MC_0; } void ir_open(){ P2DIR |= BIT2 | BIT3;//P2.2, P2.3輸出 P2SEL |= BIT3; //P2.2:IO P2.3:TA0 P2OUT &= ~(BIT2 | BIT3); //38K->P2.3 CCR0 = (int)(26.3*8 + 0.5); CCTL1 = OUTMOD_6; CCR1 = (int)(13.15*8 + 0.5); TACTL = TASSEL_2 + MC_1; } void ir_start(){ P2OUT |= BIT2; delay_us(9000); P2OUT &= ~BIT2; delay_us(4500); } void ir_next(){ P2OUT |= BIT2; delay_us(9000); P2OUT &= ~BIT2; delay_us(2250); } void ir_send_byte(unsigned char c){ unsigned char i; for(i = 0; i != 8; ++i){ P2OUT |= BIT2; delay_us(560); P2OUT &= ~BIT2; if(c&0x01){ delay_us(1685); } else{ delay_us(565); } c >>= 1; } } void ir_end(){ P2OUT |= BIT2; delay_us(300); P2OUT &= ~BIT2; } void ir_put(unsigned char c){ ir_start(); ir_send_byte(0x00); ir_send_byte(0xff); ir_send_byte(c); ir_send_byte(~c); ir_end(); } void ir_close(){ P2SEL &- ~BIT3; P2DIR |= BIT3; P2OUT &= ~BIT3; TACTL = TACLR; } void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1&=~XT2OFF; //使能XT2 do { IFG1&=~OFIFG; //清除XT2標志 _NOP(); } while((IFG1&OFIFG)); // 等待外部晶振穩定 即寄存器IFGI的OFIFG位等于0 BCSCTL2|=SELM_2; //將MCLK配置為XT2 BCSCTL2|=SELS; //將SMCLK配置1/2XT2 即4M _EINT(); ir_open(); //ir_close();//關閉紅外函數,這里不用 while(1){ delay_ms(1000); //P2OUT ^= BIT2; ir_put(0x83); } } #pragma vector=TIMERB0_VECTOR __interrupt void timerb_handler(){ --cnt; }
上一篇:MSP430G2553 WDT的NMI中斷例子
下一篇:msp430寄存器地址與宏定義位置
推薦閱讀
史海拾趣
機頂盒,全稱為數字視頻變換盒,是連接電視機與外部信號源的關鍵設備,其專業性與科普性并重。作為現代家庭娛樂的重要組成部分,機頂盒不僅實現了從模擬信號到數字信號的轉換,還極大地豐富了電視節目的選擇與觀看體驗。
從廣義上講,機頂盒涵蓋了各種與電視機連接的網絡終端設備,包括早期的模擬頻道增補器、上網機頂盒,以及當前廣泛應用的數字衛星機頂盒、有線電視數字機頂盒和IPTV機頂盒等。這些設備通過接收、解碼和顯示三個主要步驟,將來自不同傳輸介質的數字信號轉換為適合電視機播放的格式。
從技術層面看,機頂盒集成了高性能的解調器、解碼器和處理器,能夠接收并處理來自有線電纜、衛星天線、寬帶網絡及地面廣播的高清、甚至超高清視頻信號,為用戶帶來細膩的畫面與震撼的音效。同時,機頂盒還具備網絡交互功能,支持在線購物、網頁瀏覽、視頻點播等多元化服務,使電視機從單向接收信息的設備轉變為智能終端。
展望未來,隨著高清、超高清技術的普及以及人工智能、云計算等技術的融入,機頂盒將向智能化、多功能化方向發展,為用戶提供更加便捷、個性化的觀看體驗。在智能電視普及的背景下,機頂盒作為有效補充和擴展,將繼續在特定應用場景下發揮不可替代的作用,推動家庭娛樂的多元化發展。
為了進一步擴大市場份額,BETA Transformer Technology Corp公司開始實施國際化戰略。公司積極參加國際電子展覽,與國際同行進行深入交流與合作。同時,BETA公司還在海外設立了研發中心和生產基地,以便更好地服務全球客戶。通過不斷拓展國際市場,BETA公司的品牌影響力和市場競爭力得到了顯著提升。
Babcock深知技術創新是公司發展的核心動力。因此,公司始終保持著對技術研發的持續投入。通過不斷引進先進設備、優化研發流程、加強團隊建設等措施,Babcock的技術實力得到了不斷提升。同時,公司還注重與高校和研究機構的合作,共同推動電子技術的創新發展。
面對電子行業的快速變化和發展趨勢,康龍公司積極擁抱數字化轉型。公司引入了先進的ERP系統和數字化工具,實現了從供應鏈、生產管理到財務管理的全面信息化。這不僅提高了公司的運營效率和管理水平,還為公司的產業升級和未來發展奠定了堅實基礎。
博林公司自創立以來,一直致力于電子行業的技術創新。公司擁有一支專業的研發團隊,不斷投入巨資進行技術研發和創新。在某一時期,博林公司成功開發出了一款具有顛覆性的電子產品,憑借其卓越的性能和獨特的設計,迅速在市場上獲得了廣泛認可。這款產品的成功推出,不僅為博林公司帶來了巨大的經濟效益,也進一步鞏固了其在電子行業的領導地位。
隨著國內市場的逐漸飽和,eLED.com Corp開始將目光投向國際市場。公司積極參與各類國際展會,向全球客戶展示其優質的產品和技術。同時,eLED.com Corp還與國際知名企業開展合作,共同研發新技術,推動LED行業的發展。通過與國際巨頭的合作,eLED.com Corp不僅提升了自身的技術水平,還拓展了國際市場,實現了品牌的全球化布局。
ccs3.3(3.2)安裝問題及其解決&安裝目錄說明 最近開始學習DSP,首先已TI公司的C54系列來進行練習,采用TI公司的CCSSTDIO V3.3的集成開發環境(IDE),來熟悉DSP的開發的軟件設計,在安裝CCS3.3和CCS3.2時都出現了一些組件無法注冊的問題,會彈出 ...… 查看全部問答∨ |
大家好,我的WinCE 5.0系統使用Usb Mass Storage功能,把Pocket Mory1作為存儲設備開放時,從PC端拷貝數據到Pocket Mory1時,點擊觸摸屏進行操作,系統沒有任何反應;把SD卡作為存儲設備開放時,從PC端拷貝數據到SD卡時,點擊觸摸屏操作系統,操作 ...… 查看全部問答∨ |
用VS2003和drivestudio編輯VdwLibs.dsw這文件時報源文件不存在這個錯 前面的安裝工作都裝好了的, vs2003 ddk2003 drivestudio3.2 裝好后 編譯DriverStudio安裝目錄DriverStudio\\DriverWorks\\source\\VdwLibs.dsw,以得到vdw_wdm.lib這個庫文件 的時候,選用drivestudio build的時候, 就報源文件不存在這個錯誤.  ...… 查看全部問答∨ |
不顯示刪除回復顯示所有回復顯示星級回復顯示得分回復 一道計算機通信題目,大家一起討論 CAN總線的通信特點為:廣播。每個節點往外發消息,所有其他節點都會收到這個消息,然后過濾決定這個消息是否對自己重要。 本題附加要求為: 1. CAN總線上連接有多個控制器,一個觸摸屏 1.1 控制器:各控制器運行特定的程序,并且需 ...… 查看全部問答∨ |
關于WINCE下USB與ActiveSync的連接問題 我用的是YLE2440的核心板,仿照底板畫的底板,去掉了一些模塊。USB部分與原板畫的一模一樣。USB在BOOT部分工作正常,能夠下載內核并很穩定,但是進入WINCE后,無法與ActiveSync建立聯接,驅動部分用的是板子 ...… 查看全部問答∨ |
|
由于第一次用ST的單片機,我把ICCDATA和ICCCLK直接接入ICC10接口處,RESET接入并接4.7K上拉,單片機用的是外部晶振,沒有和ICC10接口的9角相連;結果寫時出現寫時出現下列錯誤:wrong device detectedmismatch of PIDPID& ...… 查看全部問答∨ |