[ Воспроизвести файл QuickTime ] 17022011.mp4 [ 852.93 Кб | Просмотров: 24321 ]
iar_msp.swf [ 57.67 Кб | Просмотров: 24300 ]
#include <msp430x12x.h>
static char string1[] = { "Hello World\r\n" };
char i;
unsigned int p,cnt,y ;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog
// ########## Настройка портов ввода-вывода ########################
P3SEL = 0x30; // P3.3,4 = USART0 TXD/RXD
P1DIR |=0xFF;
P1SEL |= 0x0C; // P1.2 and P1.3 TA1/2 otions
// #############################################################################
// ######### В данных мк есть 4 источника тактовых сигналов ####################
// ##### LFXT1CLK низко/высокочастотных генератор работает от 32768 гц до 16 Мгц
// ##### XT2CLK - опциональный высокочастотный генератор от 400 Кгц до 16 Мгц ##
// ##### DCOCLK - Встроенный генератор с цифровым управлением (DCO) ############
// ##### VCLOCK - Встроенный низкочастотный генератор частота 12 Кгц ###########
// #############################################################################
// ##### Модуль синхронизации формирует 3 вида тактовых сигналов ###############
// ##### MCLK - Основной тактовый сигнал #######################################
// ##### ACLK - Вспомогательный тактовый сиггнал ###############################
// ##### SMCLK - Дополнительный тактовый сигнал. Может назнач. для отд.периферии
// ############### Настройка системы тактирования ##############################
// ############################### 32768 ######################################
// DCOCTL=0x00;
// BCSCTL1=0x80; // XT2OFF,LF-enable,ACLK Divider=1
// BCSCTL2=0xC8; // MCLK=LFXT1CLK,MCLK Divider=1,SMCLK=LFXT1CLK,
// ############################################################################
// ################# Настройка для внешнего кварца 4.433619 Мгц или любого внешнего #######
BCSCTL1 |= 0xC0; // XT2OFF,HF-enable,ACLK Divider=1
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault флаг установлен ?
BCSCTL2=0xC8; // MCLK=LFXT1CLK,MCLK Divider=1,SMCLK=LFXT1CLK,
// ##########################################################################################
// ############# Настройка модуля USART #############################
ME2 = 0x03; // Enabled USART0 TXD/RXD
UCTL0 |=0x11; // 8-bit character, SWRST=1
UTCTL0 |= 0x30; // UCLK = MCLK
UBR00 = 0xE6; // 9600 from 1Mhz
UBR10 = 0x00; //
UMCTL0 = 0xBF; // Modulation
UCTL0 &= ~0x01; // Initialize USART state machine
IE2 |=0x03; // Enable USART0 RX/TX interrupt
IFG2 |=0x03; // Clear inital flag on POR
// ################ Настройка модуля Timer_A Генерация ШИМ на ноге 23 - P1.2 ###################
// ####### Каждый блок захвата/сравнения содержит модуль вывода. Модуль вывода ##################
// ####### используется для генерации выходных сигналов, в т.ч. таких, как ШИМ-сигналы ##########
// ####### Каждый модуль вывода имеет восемь рабочих режимов, которые генерируют ################
// ####### сигналы, основываясь на сигналах EQU0 и EQUx. ########################################
// ##############################################################################################
TACTL = 0x0210; // Control register.SMCLK, timer up to TACCR0
TACCTL0 = 0x0010; // Capture/Compare control register CCR0 interrupt enabled
TACCR0 = 2500; // Outpu compare register
TACCR1 = 1200; // CCR1 PWM duty cycle
// ################################################################################################
// ############# Просто таймер в режиме счета ####################################################
// ################ Считает до TACCRO и сбрасывается в 0 ########################################
// TACTL = 0x0210; // Control register.SMCLK, timer up to TACCR0
// TACCTL0 = 0x0010; // Capture/Compare control register CCR0 interrupt enabled
// TACCR0 = 2500; // Outpu compare register
// ##############################################################################################
_BIS_SR( GIE); // global interrupt enable
}
// UART0 TX ISR
#pragma vector=USART0TX_VECTOR
__interrupt void usart0_tx (void)
{
if (i < sizeof string1-1)
TXBUF0 = string1[i++];
}
// UART0 RX ISR
#pragma vector=USART0RX_VECTOR
__interrupt void usart0_rx (void)
{
if (RXBUF0 == 'u') // 'u' received?
{
i = 0;
TXBUF0 = string1[i++];
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
cnt++;
if ( (cnt>=100)&&(cnt<=200) ) { TACCTL1 = 0xE0; P1OUT = 0x01; }
if ( (cnt>200)&&(cnt<=400) ) {TACCTL1 = 0x00; P1OUT = 0x00; }
if (cnt > 400) cnt =0;
}
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0