[an error occurred while processing this directive]
MSP UART кто поможет выровнять руки?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Artem 06 марта 2006 г. 17:45

MSP430F1611
весь текст пограммы
под IAR v.3.40a

проблема в том, что на второй стороне(РС)
принимается чего-нипопадя

(между MSP и PC стоит преобр. уровней)


#include
unsigned int a;
unsigned char send = 0;

union {
struct{
unsigned char bit0 :1;
unsigned char bit1 :1;
unsigned char grn :1;
unsigned char yel :1;

unsigned char red :1;
unsigned char bit5 :1;
unsigned char bit6 :1;
unsigned char bit7 :1;
}Led;
unsigned char Byte;
}Out;

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL2 |= SELM_2 + SELS;

TACTL |= TAIE + TASSEL_2 + ID_3 + MC_1;
CCR0 = 0xC350;
P1DIR |= 0x01; // Set P1.0 to output direction
P2DIR |= BIT2 + BIT3 + BIT4; // Set P2.2,3,4 to output direction
P2IE |= BIT0 + BIT1; // Set P2.0,1 to generate interrupt
P2IES = 0x03;
P2OUT = 0x00;
P3SEL |= 0xC0; // P3.6,7 = USART1 option select
P1OUT = 0x00;

U1CTL = SWRST;

UCTL1 |= CHAR; // 8-bit character
UBR01 = 0x34; // 6Mhz/115200 - 52.08
UBR11 = 0x00;
UTCTL1 |= SSEL1; // UCLK = SMCLK
UMCTL1 = 0x00; // modulation
// max Error = -1,76%

ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD

UCTL1 &= ~SWRST; // Initialize USART state machine
IE2 |= URXIE1; // Enable USART1 RX interrupt

_BIS_SR(GIE);

for(;;) ;
}


#pragma vector=PORT2_VECTOR
__interrupt void port2(void)
{
switch(P2IFG){
case 0x01:
Out.Led.grn ^= 1;
break;
case 0x02:
Out.Led.red ^= 1;
break;
}//end switch
P2IE = 0;
P2IFG = 0;
TACTL &= ~TAIFG;
TACTL |= TACLR;
TACTL |= TAIE + TASSEL_2 + ID_3 + MC_2;
}

#pragma vector=TIMERA1_VECTOR
__interrupt void timer_A(void)
{
a++;
if(Out.Led.grn) {
Out.Led.yel = 1;
if(a > 14) {
P1OUT ^= 0x01;
a = 0;
U1TXBUF = send;
send++;
}//end if(a > 14)
}//end if(Out.Led.grn)
else {
Out.Led.yel = 0;
P1OUT ^= 0x01;
U1TXBUF = 0x43;
}//end else
P2OUT = Out.Byte;
P2IFG = 0;
P2IE = 0x03;
TACTL &= ~TAIFG;
}

#pragma vector=USART1RX_VECTOR
__interrupt void USART1(void)
{
U1IFG &= ~(URXIFG1 + UTXIFG1);
}

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru