Широтно-импульсная модуляция на микроконтроллере MSP430 на языке Cи
Задание
1. Загрузить и выполнить тестовую программу. Тестовая программа управляет яркостью светодиода через задержку времени, задаваемую в цикле. Тестовая программа управления яркостью светодиодом на языке Си приведена в приложении Б.
2. Выполнить индивидуальное задание, приведенное в приложении А: разработать алгоритм и программу управления яркостью светодиода.
3. Оформить отчет по лабораторной работе.
Порядок выполнения работы
Выполнение лабораторной работы состоит из следующих шагов.
- Запустите программу IAR Kick Start Embedded Workbench IDE
- Создайте новый проект
- Сохраните проект в созданную папку
- Установите в настройках тип вашего микроконтроллера F2013G2553
- Выберите язык - Cи
- Сохраните программу с заданным именем
- Выполните компиляцию проекта, Rebuild All
- Сохраните проект с заданным именем
- Запустите программу в Debug
- Сохраните экранные формы с использованием 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. Оформить отчет по лабораторной работе.
Порядок выполнения работы
Выполнение лабораторной работы состоит из следующих шагов.
- Запустите программу IAR Kick Start Embedded Workbench IDE
- Создайте новый проект
- Сохраните проект в созданную папку
- Установите в настройках тип вашего микроконтроллера F2013G2553
- Выберите язык - Cи
- Сохраните программу с заданным именем
- Выполните компиляцию проекта, Rebuild All
- Сохраните проект с заданным именем
- Запустите программу в Debug
- Сохраните экранные формы с использованием 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