最近由於專案需求,研究了一下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)
void delay_us(unsigned int us)
void ir_open()
void ir_start()
void ir_next()
void ir_send_byte(unsigned char c)
else
c >>= 1;
}}void ir_end()
void ir_put(unsigned char c)
void ir_close()
void main(void)
while((ifg1&ofifg)); // 等待外部晶振穩定 即暫存器ifgi的ofifg位等於0
bcsctl2|=selm_2; //將mclk配置為xt2
bcsctl2|=sels; //將smclk配置1/2xt2 即4m
_eint();
ir_open();
//ir_close();//關閉紅外函式,這裡不用
while(1)
}#pragma vector=timerb0_vector
__interrupt void timerb_handler()
MSP430 F149 學習筆記 紅外置收
用msp430 f149 做紅外置收比傳送更為簡單,我採用的紅外感測器是hs0038b,這個原件在接收到38k紅外時輸出低電平,否則輸出高電平,因此,我們就可以從這點開始編寫程式了,由於hs0038b的電路圖很多,我這裡就不貼出來了,下面是具體的 include include delay.h st...
msp430f149外中斷問題
msp430的外中斷歸根到底 其實只需要兩個部分的配置就可以了 1.引腳配置 2.中斷函式配置 一 引腳配置 以引腳p2.1為例 p2dir 0x01 配置為輸入 p2ie 0x01 p2ies 0x01 其他暫存器可配置,可不配置。注意引腳功能選擇為一般引腳,不是功能引腳。雖然引腳的配置很簡單,但...
msp430f149的低功耗模式
430的低功耗確實很強啊,雖然和vr微控制器比起來速度慢了好多。在cpu進行工作時,如果沒有什麼事情幹,就得進入低功耗模式啦,lmpx 0 4 這幾種模式的具體事項就是如下的,得記住了。一,執行模式 msp430具有一種活動模式和五種軟體可選的低功耗執行模式。乙個中斷事件可以將晶元從五種低功耗模式中...