ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
281445 Топик полностью
Механик08 (02.11.2011 09:47, просмотров: 226) ответил rezident на Давайте код инициализации USCI и портов. В качестве приемника что у вас? ПК? Преобразователь TTLV->RS232 или какой-нибудь мост USB используется?
Вот полный текст программы:  #include "msp430x21x2.h" #define set_led() P3OUT|=BIT1 #define clr_led() P3OUT&=~BIT1 unsigned char string1[5]; unsigned char j = 0; unsigned char rfstate=0; void pins_init(void){ P3DIR = 0x03; //0 - in input mode; 1 - in output mode P3OUT = 0x03; P1DIR = 0x00; P1OUT = 0x00; P2DIR = 0x00; P2OUT = 0x00; } void uart_init(void){ UCA0CTL1 |= UCSWRST; UCA0CTL1 |= UCSSEL1+UCSSEL0; //SMCLK UCA0CTL0 = 0x00; UCA0BR0 = 0x80; // 7372800Hz/19200 = 0x0180 UCA0BR1 = 0x01; UCA0MCTL = 0x00; // Modulation UCBRSx = 0 P3DIR |= 0x10; P3SEL |= 0x30; UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** IE2 |= UCA0RXIE; } void main( void ) { WDTCTL = WDTPW+WDTHOLD; //отключение watchdog pins_init(); IE1 |= OFIE; // разрешить прерывание от детектора ошибки резонатора IFG1 |= OFIFG; if((rfstate&BIT1)==0) uart_init(); __bis_SR_register(GIE); // Enter LPM0, interrupts enabled while(1); } // USCI A0/B0 Receive ISR #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void) { string1[j++] = UCA0RXBUF; if (j > 4) { if(string1[0]==0x55){set_led();}else{clr_led();}; j = 0; while (!(IFG2 & UCA0TXIFG)); UCA0TXBUF = 'O'; } } #pragma vector = NMI_VECTOR __root __interrupt void OSCFault (void) { unsigned char i; BCSCTL1 = XTS + CALBC1_8MHZ; // ACLK = LFXT1 = HF XTAL, DCOCLK=8MHz DCOCTL = CALDCO_8MHZ; BCSCTL2 = 0; //MCLK=DCO; if((BCSCTL3&LFXT1OF)==0){ BCSCTL3 = LFXT1S1; // 3 – 16MHz crystal or resonator do { IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0xFF; i > 0; i--); // Time for flag to set } while (IFG1 & OFIFG); // OSCFault flag still set? BCSCTL2 = SELM_0 + SELS; // MCLK = DCO, SMCLK = LFXT1 IE1 |= OFIE; rfstate=0; // все в порядке, ошибок нет }else{ rfstate |= BIT1; //установка ошибки резонатора UCA0CTL1 |= UCSWRST; BCSCTL2 = 0; UCA0CTL1 |= UCSSEL1+UCSSEL0; //SMCLK UCA0CTL0 = 0x00; UCA0BR0 = 0xA0; // 8000000Hz/19200 = 0x01A0 UCA0BR1 = 0x01; UCA0MCTL = 6<<1; // Modulation UCBRSx = 6 P3DIR |= 0x10; P3SEL |= 0x30; UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** IE2 |= UCA0RXIE; } } причём если ставить брекпоинт на строке UCA0TXBUF = 'O'; и далее запускать на выполнение, МК отрабатывает вывод символа 'O'. А вот сразу - нет. В качестве приёмника у меня радиочастотный модуль Radiocrafts RC1081. На другом конце такой же модуль, подключённый к ПК через COM-USB преобразователь. Связь между модулями проверял (оба подключал к ПК через преобразователи) - в порядке.