历史上的今天
今天是:2025年04月15日(星期二)
2020年04月15日 | MSP430(F149)学习笔记——红外接收
2020-04-15 来源:eefocus
用MSP430(F149)做红外接收比发送更为简单,我采用的红外传感器是HS0038B,这个原件在接收到38K红外时输出低电平,否则输出高电平,因此,我们就可以从这点开始编写程序了,由于HS0038B的电路图很多,我这里就不贴出来了,下面是具体的代码:
#include #include "delay.h" static unsigned short addr = 0x00; static unsigned char ir_rx_buf[256]; static unsigned char ir_rx_w_offset = 0; static unsigned char ir_rx_r_offset = 0; void ir_tx_open(){ P2DIR |= BIT2 | BIT3;//P2.2, P2.3输出 P2SEL |= BIT3; //P2.2:IO P2.3:TA0 P2SEL &= ~BIT2; // 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_set_addr(unsigned char addr){ addr = (unsigned char)(0xff&addr); } static void ir_start(){ P2OUT |= BIT2; delay_us(9000); P2OUT &= ~BIT2; delay_us(4500); } static void ir_next(){ P2OUT |= BIT2; delay_us(9000); P2OUT &= ~BIT2; delay_us(2250); } static 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; } } static void ir_end(){ P2OUT |= BIT2; delay_us(300); P2OUT &= ~BIT2; } void ir_put_char(unsigned char c){ ir_start(); ir_send_byte(addr); ir_send_byte(~addr); ir_send_byte(c); ir_send_byte(~c); ir_end(); } void ir_put_string(char* str){ if(*str != '




