在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430(f149)學(xué)習(xí)筆記——紅外遙控發(fā)射

            MSP430(f149)學(xué)習(xí)筆記——紅外遙控發(fā)射

            作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
            最近由于項(xiàng)目需求,研究了一下MSP430,總體感覺(jué)MSP430還是非常不錯(cuò)的單片機(jī),不虧是TI的產(chǎn)品。項(xiàng)目中用MSP430實(shí)現(xiàn)了紅外遙控功能,下面我們先來(lái)分析一下紅外的發(fā)送原理。
            紅外發(fā)送原理

            紅外發(fā)送實(shí)際上是按照一定的時(shí)間間隔,斷斷續(xù)續(xù)的發(fā)送紅外射線來(lái)進(jìn)行數(shù)據(jù)傳輸,為了提高數(shù)據(jù)傳輸?shù)臏?zhǔn)確定和降低功耗,紅外一般是采用38K的紅外調(diào)制信號(hào),其中,38K允許上下浮動(dòng)1K以內(nèi)的誤差。紅外發(fā)送的開(kāi)頭需要一個(gè)引導(dǎo)位,引導(dǎo)位是發(fā)送9ms,然后停止4.5ms,如果發(fā)送完一個(gè)數(shù)據(jù)之后還需要再發(fā)數(shù)據(jù)的話還需要連發(fā)碼,連發(fā)碼是先發(fā)送9ms,然后停止4.5ms。引導(dǎo)碼和連發(fā)碼的波形如下:

            本文引用地址:http://www.biyoush.com/article/201611/322815.htm

            引導(dǎo)碼和連發(fā)碼之后是32位數(shù)據(jù)位,這32位數(shù)據(jù)位實(shí)際上是一個(gè)字節(jié),其中,前16位是用戶自定義地址碼,用來(lái)區(qū)分紅外是發(fā)給誰(shuí)的,比如,電視的紅外遙控是不能操作冰箱或空調(diào)的,剩下的16位是傳輸?shù)臄?shù)據(jù),其中前8位是要傳送的一個(gè)字節(jié),后8位是這個(gè)字節(jié)的反碼,用來(lái)校驗(yàn)數(shù)據(jù)傳輸?shù)氖欠裾_的,數(shù)據(jù)位無(wú)非就是0或1,其中0是先發(fā)送560us紅外,然后停止565us,1是先發(fā)送560us然后停止1685us,0和1的波形如下:

            每次傳輸實(shí)際上就是一個(gè)引導(dǎo)碼加32位數(shù)據(jù)位或者一個(gè)連發(fā)碼加32位數(shù)據(jù)位,整體的波形如下:



            注意,你上所有的波形都是接收時(shí)的波形,由于紅外接收頭,如HS0038B,在采集到38K紅外線時(shí)輸出低電平,在采集不到38K紅外線時(shí)輸出高電平,所以,當(dāng)發(fā)送紅外線時(shí)在波形中為低電平,停止發(fā)送時(shí)反而為高電平。

            實(shí)現(xiàn)電路
            熟習(xí)了原理以后,再來(lái)設(shè)計(jì)電路圖就非常簡(jiǎn)單了,用兩個(gè)三極管停止串聯(lián),其中一個(gè)的基極(無(wú)論是PNP還是NPN,都是旁邊那個(gè)腳)接到38K方波上,另一個(gè)的基極接到發(fā)送控制引腳上,我這里沒(méi)有自己來(lái)繪制原理圖,采用了一個(gè)網(wǎng)上的原理圖,具體如下:

            代碼設(shè)計(jì)

            下面的原理部分都理通了,下面,我們用MSP430來(lái)實(shí)現(xiàn)設(shè)計(jì),其中P2.3口是MSP430的PWM輸出引腳,這里是輸出38K方波,P2.2口為發(fā)送停止控制引腳。具體代碼如下:

            1. #include<msp430x14x.h>
            2. staticunsignedintcnt=0;
            3. voiddelay_ms(unsignedintms){
            4. cnt=ms;
            5. TBCCR0=1000;
            6. TBCTL=CNTL_0+TASSEL_2+MC_1+ID_3;
            7. TBCCTL0=CCIE;
            8. while(cnt!=0);
            9. TBCTL=MC_0;
            10. }
            11. voiddelay_us(unsignedintus){
            12. cnt=1;
            13. TBCCR0=us;
            14. TBCTL=CNTL_0+TASSEL_2+MC_1+ID_3;
            15. TBCCTL0=CCIE;
            16. while(cnt!=0);
            17. TBCTL=MC_0;
            18. }
            19. voidir_open(){
            20. P2DIR|=BIT2|BIT3;//P2.2,P2.3輸出
            21. P2SEL|=BIT3;//P2.2:IOP2.3:TA0
            22. P2OUT&=~(BIT2|BIT3);
            23. //38K->P2.3
            24. CCR0=(int)(26.3*8+0.5);
            25. CCTL1=OUTMOD_6;
            26. CCR1=(int)(13.15*8+0.5);
            27. TACTL=TASSEL_2+MC_1;
            28. }
            29. voidir_start(){
            30. P2OUT|=BIT2;
            31. delay_us(9000);
            32. P2OUT&=~BIT2;
            33. delay_us(4500);
            34. }
            35. voidir_next(){
            36. P2OUT|=BIT2;
            37. delay_us(9000);
            38. P2OUT&=~BIT2;
            39. delay_us(2250);
            40. }
            41. voidir_send_byte(unsignedcharc){
            42. unsignedchari;
            43. for(i=0;i!=8;++i){
            44. P2OUT|=BIT2;
            45. delay_us(560);
            46. P2OUT&=~BIT2;
            47. if(c&0x01){
            48. delay_us(1685);
            49. }
            50. else{
            51. delay_us(565);
            52. }
            53. c>>=1;
            54. }
            55. }
            56. voidir_end(){
            57. P2OUT|=BIT2;
            58. delay_us(300);
            59. P2OUT&=~BIT2;
            60. }
            61. voidir_put(unsignedcharc){
            62. ir_start();
            63. ir_send_byte(0x00);
            64. ir_send_byte(0xff);
            65. ir_send_byte(c);
            66. ir_send_byte(~c);
            67. ir_end();
            68. }
            69. voidir_close(){
            70. P2SEL&-~BIT3;
            71. P2DIR|=BIT3;
            72. P2OUT&=~BIT3;
            73. TACTL=TACLR;
            74. }
            75. voidmain(void)
            76. {
            77. WDTCTL=WDTPW+WDTHOLD;//StopWDT
            78. BCSCTL1&=~XT2OFF;//使能XT2
            79. do
            80. {
            81. IFG1&=~OFIFG;//清除XT2標(biāo)志
            82. _NOP();
            83. }
            84. while((IFG1&OFIFG));//等待外部晶振穩(wěn)定即寄存器IFGI的OFIFG位等于0
            85. BCSCTL2|=SELM_2;//將MCLK配置為XT2
            86. BCSCTL2|=SELS;//將SMCLK配置1/2XT2即4M
            87. _EINT();
            88. ir_open();
            89. //ir_close();//關(guān)閉紅外函數(shù),這里不用
            90. while(1){
            91. delay_ms(1000);
            92. //P2OUT^=BIT2;
            93. ir_put(0x83);
            94. }
            95. }
            96. #pragmavector=TIMERB0_VECTOR
            97. __interruptvoidtimerb_handler(){
            98. --cnt;
            99. }

            好了,看過(guò)上面這些資料,紅外的發(fā)送就不會(huì)有什么疑問(wèn)了,調(diào)試的時(shí)候我是用51單片機(jī)的紅外解碼測(cè)試程序來(lái)調(diào)試的,現(xiàn)在已經(jīng)完全沒(méi)有問(wèn)題了,如果有什么疑問(wèn),歡迎留言討論。


            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉