Оглавление:
- Шаг 1: понимание
- Шаг 2: Инициализация порта
- Шаг 3: сверхнизкое энергопотребление
- Шаг 4: ТАЙМЕР
- Шаг 5: режим низкого энергопотребления
- Шаг 6: ISR-таймер
- Шаг 7: Аппаратное прерывание
- Шаг 8: ISR - сброс / кнопка
- Шаг 9: КОД
- Шаг 10: Справочный код
Видео: Счетчик секунд MSP430: 10 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Добро пожаловать! Создание счетчика секунд: использование CCStudio 8 и MSP430F5529 для проекта.
Язык C для кодирования микроконтроллера. Применение режимов пониженного энергопотребления, таймеров и прерываний. Выходные данные отображаются в виде 7 сегментов.
Шаг 1: понимание
Давай начнем!
Инициализируйте сторожевой таймер в состояние ВЫКЛ, используя требуемый пароль для сторожевого таймера (это помогает контролировать бесконечные циклы, сохраняя безопасность процессора).
#включают
/ ** * main.c * /
int main (пусто)
{
WDTCTL = WDTPW | WDTHOLD; // остановка сторожевого таймера
возврат 0;
}
Шаг 2: Инициализация порта
{
P3DIR = 0xFF; // P3DIR = 0x00;
P6DIR = 0xFF;
P4DIR | = 0x00;
P4REN | = 0xFF;
P4OUT | = 0xFF;
}
P3DIR | = 0x00 говорит нам, что весь ПОРТ-3 инициализирован для приема входных данных.
P3DIR | = 0xFF сообщает нам, что весь PORT-3 инициализирован для выдачи выходных данных.
P3DIR | = 0x01 только вывод P3.0 инициализируется для вывода в ПОРТ-3. Это следует за отображением порта в шестнадцатеричном формате.
P4REN | = 0xFF, это означает, что на выводах PORT-4 включены подтягивающие резисторы.
Чтобы выбрать их между Pull UP или Pull DOWN, используется инструкция P $ OUT | = 0xFF.
Если используется 0xFF, они настраиваются как резисторы Pull UP, а если 0x00 - как резисторы Pull DOWN.
Шаг 3: сверхнизкое энергопотребление
MSP430F5529 позволяет снизить потери мощности процессора. Это полезно в автономных приложениях.
Это требует объявления всех выводов или портов для вывода.
{
P7DIR | = 0xFF;
P6DIR | = 0xFF;
P5DIR | = 0xFF;
P4DIR | = 0xFF;
P3DIR | = 0xFF;
P2DIR | = 0xFF;
P1DIR | = 0xFF;
}
Шаг 4: ТАЙМЕР
Использование таймера для генерации задержки в одну секунду. При этом используется SMCLK 1 МГц, также таймер работает в режиме низкого энергопотребления (на следующем шаге, после его отсчета, он прерывается из LPM). Этот процесс экономит электроэнергию и снижает нагрузку на процессор.
TA0CCTL0 = CCIE;
TA0CCR0 = 999;
TA0CTL = ТАССЕЛЬ_2 + MC_1;
Значения - 999, так как требуется еще один счет, чтобы вернуться к нулю в регистре таймера.
Шаг 5: режим низкого энергопотребления
_BIS_SR (LPM0_bits + GIE);
Это включает общее разрешение прерывания (GIE) и переводит ЦП в режим LPM0, где MCLK, поддерживающий ЦП, выключен, а запускаются SMCLK и ACLK, которые поддерживают работу таймера. Таким образом, мы можем видеть, что ЦП выключен, за счет экономии энергии.
Шаг 6: ISR-таймер
#pragma vector = TIMER0_A0_VECTOR
_interrupt void Timer_A (недействительно)
{
z ++;
если (z> задержка)
{
P3OUT = код [x];
P6OUT = code1 [y];
x ++;
если (x == 10)
{
х = 0;
y ++;
}
если (y == 6)
у = 0;
z = 0;
}
}
вектор прагмы предназначен для представления ISR в C embd.
code [x] и code1 [y] - это массивы, содержащие выходные значения для двух семи сегментов, для отображения 60-секундного счетчика.
Шаг 7: Аппаратное прерывание
P2DIR = 0x00;
P2REN = 0x02;
P2OUT = 0x02;
P2IE | = BIT1;
P2IES | = BIT1;
P2IFG & = ~ BIT1;
Здесь P2.1 объявлено как аппаратное прерывание, при нажатии кнопки счетчик сбрасывается на значение.
остальная программа записывается внутри ISR этого прерывания.
Шаг 8: ISR - сброс / кнопка
#pragma vector = PORT2_VECTOR
_interrupt void port_2 (недействительно)
{
P2IFG & = ~ BIT1;
х = 0; у = 0;
P3OUT = код [x];
P6OUT = code1 [y];
v ++;
для (i = 0; i
{
P1OUT | = BIT0; //P1.0 = переключить
_delay_cycles (1048576);
P1OUT & = ~ BIT0; // P1.0 = переключение
_delay_cycles (1048576);
}
Эта ISR сбрасывает счетчик и ведет подсчет того, сколько раз была нажата кнопка «Остаться».
(Здесь отображение осуществляется с помощью переключателя светодиодов, также можно использовать другой массив и таймер, чтобы отображать эти значения как выходные данные в 7 сегменте).
Шаг 9: КОД
#включают
#define delay 1000
код символа = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};
char code1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};
изменчивый беззнаковый int x = 0, y = 0, z = 0;
volatile unsigned int v = 0, i = 0;
пустая функция()
{
WDTCTL = WDTPW | WDTHOLD; // остановка сторожевого таймера
P7DIR | = 0xFF;
P7OUT | = 0x00;
P8DIR | = 0xFF;
P8OUT | = 0x00;
P4DIR | = 0xFF;
P4OUT | = 0x00;
P5DIR | = 0xFF;
P5OUT | = 0x00;
P1DIR = 0xFF;
P3DIR = 0xFF;
P6DIR = 0xFF;
P2DIR = 0x00;
P2REN = 0x02;
P2OUT = 0x02;
P2IE | = BIT1;
P2IES | = BIT1;
P2IFG & = ~ BIT1;
TA0CCTL0 = CCIE;
TA0CCR0 = 999;
TA0CTL = ТАССЕЛЬ_2 + MC_1;
_BIS_SR (LPM0_bits + GIE);
}
// Подпрограмма обслуживания прерывания таймера A0
#pragma vector = TIMER0_A0_VECTOR
_interrupt void Timer_A (недействительно)
{
z ++;
если (z> задержка)
{
P3OUT = код [x];
P6OUT = code1 [y];
x ++;
если (x == 10)
{
х = 0;
y ++;
}
если (y == 6)
у = 0;
z = 0;
}
}
// Процедура обслуживания аппаратного прерывания
#pragma vector = PORT2_VECTOR
_interrupt void port_2 (недействительно)
{
P2IFG & = ~ BIT1;
х = 0;
у = 0;
P3OUT = код [x];
P6OUT = code1 [y];
v ++;
для (i = 0; i
{P1OUT | = BIT0; // P1.0 = переключение
_delay_cycles (1048576);
P1OUT & = ~ BIT0; // P1.0 = переключение
_delay_cycles (1048576);
}
}
Шаг 10: Справочный код
Репозиторий GitHub
Рекомендуемые:
Как сделать таймер стирки на 30 секунд для Arduino своими руками, ОСТАНОВИТЬ РАСПРОСТРАНЕНИЕ COVID: 8 шагов
Как сделать таймер стирки на 30 секунд для Arduino своими руками, ОСТАНОВИТЬ РАСПРОСТРАНЕНИЕ COVID: привет
Таймер стирки на 20 секунд для COVID-19: 6 шагов (с изображениями)
Таймер 20 секунд для мытья рук для COVID-19: По мере распространения COVID-19 по всему миру мы должны защищать себя не только за счет меньшего количества собираемых средств и ношения маски для лица, но и за счет более частого мытья рук. Если вы этого не сделаете, это неэффективно против вирусов. • Тщательно мойте руки. Как правильно мыть руки? W
Счетчик Гейгера счетчик PKE: 7 шагов (с изображениями)
Счетчик Гейгера PKE Meter: Я давно хотел построить счетчик Гейгера, чтобы дополнить мою охлаждаемую камеру Пельтье. Есть (надеюсь) не очень полезная цель владения счетчиком Гейгера, но мне просто нравятся старые русские лампы, и я подумал, что это будет
Переключатель хлопков (40 хлопков за 5 секунд): 4 шага (с изображениями)
Переключатель хлопка (40 хлопков за 5 секунд): переключатель хлопка имеет возможность включать / выключать любой электрический компонент, подключив выход схемы к релейному переключателю. Здесь мы собираемся сделать переключатель хлопка с несколькими компонентами с очень хорошими объяснениями. По сравнению со всеми другими переключателями хлопков
Убить все данные на CD / DVD за 5 секунд или меньше: 3 шага
Убить все данные на CD / DVD за 5 секунд или меньше: уничтожить все данные на CD / DVD за 5 секунд или меньше. Зачем вам это нужно: ++ Уничтожить старые резервные копии за несколько лет ++ Помните о себе записал особенное время в спальню на DVD ++ Ваш бывший хочет вернуть CD / DVD. ++ УДОВОЛЬСТВИЕ С ДИСКОМ AOL !!!! ржу не могу