Широтно-импульсная модуляция на микроконтроллере MSP430 на языке Cи

Задание

 

1. Загрузить и выполнить тестовую программу. Тестовая программа управляет яркостью светодиода через задержку времени, задаваемую в цикле. Тестовая программа управления яркостью светодиодом на языке Си приведена в приложении Б.

2. Выполнить индивидуальное задание, приведенное в приложении А: разработать алгоритм и программу управления яркостью светодиода.

3. Оформить отчет по лабораторной работе.

 

Порядок выполнения работы

 

Выполнение лабораторной работы состоит из следующих шагов.

  1. Запустите программу IAR Kick Start Embedded Workbench IDE
  2. Создайте новый проект
  3. Сохраните проект в созданную папку
  4. Установите в настройках тип вашего микроконтроллера F2013G2553
  5. Выберите язык - Cи
  6. Сохраните программу с заданным именем
  7. Выполните компиляцию проекта, Rebuild All
  8. Сохраните проект с заданным именем
  9. Запустите программу в Debug
  10. Сохраните экранные формы с использованием PrintScreen

 


Приложение A

Варианты индивидуальных заданий

Red LED PWM Green LED PWM
0.2
0.4
0.5
0.6
0.7
0.8
0.2
0.4
0.5
0.6
0.7
0.8

Приложение Б

Пример программы на языке Си

 

;*******************************************************************

;

; ACLK = n/a, MCLK = SMCLK = default DCO

;

; MSP430x2xx

; -----------------

; /|\| XIN |-

; | | |

; --|RST XOUT|-

; | |

; | P1.0|àRed LED

; | P1.6|àGreen LED

;

; Mart 2013

; Built with IAR Embedded Workbench Version

;*******************************************************************

// use PWM

#include "msp430.h"

#define LED1 BIT0

#define LED2 BIT6

#define LED_DIR P1DIR

#define LED_OUT P1OUT

int main( void )

{

// Stop watchdog timer to prevent time out reset

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

unsigned int i,j,k;

LED_DIR |= LED1 + LED2;

LED_OUT &= ~(LED1 + LED2);

for(;;)

{

i=5; // PWM = 5 %

P1OUT = 0x41;

j=i; // SW Delay

do j--;

while (j != 0);

P1OUT = 0;

k = 100-i; // SW Delay

do k--;

while (k != 0);

}

}


Практическое занятие № 3

Циклические программы для управления портами вывода микроконтроллера MSP430 на языке Cи

 

Задание

 

1. Загрузить и выполнить тестовую программу. Тестовая программа производит переключение светодиодов и изменение яркости их свечения через задержку времени, задаваемую в цикле. Тестовая программа управления светодиодом на ассемблере приведена в приложении Б.

2. Выполнить индивидуальное задание, приведенное в приложении А: разработать алгоритм и программу управления переключением светодиодов и изменение яркости их свечения.

3. Оформить отчет по лабораторной работе.

 

Порядок выполнения работы

 

Выполнение лабораторной работы состоит из следующих шагов.

  1. Запустите программу IAR Kick Start Embedded Workbench IDE
  2. Создайте новый проект
  3. Сохраните проект в созданную папку
  4. Установите в настройках тип вашего микроконтроллера F2013G2553
  5. Выберите язык - Cи
  6. Сохраните программу с заданным именем
  7. Выполните компиляцию проекта, Rebuild All
  8. Сохраните проект с заданным именем
  9. Запустите программу в Debug
  10. Сохраните экранные формы с использованием PrintScreen

 


Приложение A

Варианты индивидуальных заданий

Red LED 0.1 0.3 0.5
Green LED

 

Red LED
Green LED 0.3 0.6

 

Red LED
Green LED 0.5 0.3

 

Red LED 0.5 0.3
Green LED

 

Red LED 0.3 0.5
Green LED 0.5

 

Red LED 0.6 0.3
Green LED 0.5

 

Red LED 0.3 0.6
Green LED

 

Red LED
Green LED 0.3 0.6

 

Red LED
Green LED 0.6 0.3

 

Red LED 0.6 0.3
Green LED

 

Red LED 0.3
Green LED 0.5

 

Red LED 0.7
Green LED 0.8 0.7

 

 


Приложение Б

Пример программы на языке Си

 

;*******************************************************************

;

; ACLK = n/a, MCLK = SMCLK = default DCO

;

; MSP430x2xx

; -----------------

; /|\| XIN |-

; | | |

; --|RST XOUT|-

; | |

; | P1.0|-->Red LED

; | P1.6|-->Green LED

;

; Mart 2013

;*******************************************************************

// use PWM

#include "msp430.h"

#define LED1 BIT0

#define LED2 BIT6

#define LED_DIR P1DIR

#define LED_OUT P1OUT

int main( void )

 

// Stop watchdog timer to prevent time out reset

WDTCTL = WDTPW + WDTHOLD;

// Stop WDT

unsigned int i,j,k;

LED_DIR |= LED1 + LED2;

LED_OUT &= ~(LED1 + LED2);

for(;;)

{

for(z=0;z<10000;z++)

{

i=40; // PWM = 40 %

P1OUT = 0x40; // Green LED

j=i; // SW Delay

do j--;

while (j != 0);

P1OUT = 0;

k = 100-i; // SW Delay

do k--;

while (k != 0);

}

for(z=0;z<10000;z++)

{

i=30; // PWM = 30 %

P1OUT = 0x1; // Red LED

j=i; // SW Delay

do j--;

while (j != 0);

P1OUT = 0;

k = 100-i; // SW Delay

do k--;

while (k != 0);

}

for(z=0;z<10000;z++)

{

i=100; // PWM = 100 %

P1OUT = 0x1; // Red LED

j=i; // SW Delay

do j--;

while (j != 0);

P1OUT = 1;

k = 100-i; // SW Delay

do k--;

while (k != 0);

}

for(z=0;z<10000;z++)

{

i=50; // PWM = 50 %

P1OUT = 0x40; // Green LED

j=i; // SW Delay

do j--;

while (j != 0);

P1OUT = 0;

k = 100-i; // SW Delay

do k--;

while (k != 0);

}

for(z=0;z<10000;z++)

{

i=1; // PWM = 1 %

P1OUT = 0x40; // Green LED

j=i; // SW Delay

do j--;

while (j != 0);

P1OUT = 0;

k = 100-i; // SW Delay

do k--;

while (k != 0);

}

}

 


Практическое занятие № 4