最近由于項目需求,研究了一下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& ...… 查看全部問答∨ |