<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > MSP430(f149)學(xué)習筆記——紅外遙控發(fā)射

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

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

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

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

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

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



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

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

代碼設計

下面的原理部分都理通了,下面,我們用MSP430來(lái)實(shí)現設計,其中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標志
  82. _NOP();
  83. }
  84. while((IFG1&OFIFG));//等待外部晶振穩定即寄存器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)閉紅外函數,這里不用
  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)了,調試的時(shí)候我是用51單片機的紅外解碼測試程序來(lái)調試的,現在已經(jīng)完全沒(méi)有問(wèn)題了,如果有什么疑問(wèn),歡迎留言討論。


評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>