Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
250 Микроконтроллеры AVR от азов программирования... #asm( ) выполняется ассемблерная команда разрешения прерывания sei. Команды такого уровня не имеют аналогов в традиционном син таксисе языка СИ. Да и нецелесообразно выдумывать новые команды, когда удобнее просто выполнить команду Ассемблера. Описание программы (листинг 5.14) Текст программы, сформированный мастером, содержит две функции. Вернее, еще не функции, а их заготовки. Во-первых, это главная функция main, которая в уже готовой доработанной программе занимает строки 11— 42. Листинг 5.14 This program was produced by the CodeWizardAVR V1 24.4 Standard Automatic Program Generator © Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r 1. Project . Prog 7 Comments Бегущие огни с использованием прерываний Chip type Clock frequency Memory model External SRAM size Data Stack size : 32 : ATtiny2313 4,000000 MHz : Tiny : 0 25 26 «include <tiny2313.h> // Описание глобальных переменных unsigned char rab; // Прерывание по совпадению таймера Т1 interrupt [TIM1_C0MP] void timer1_comp_isr(void) if (PIND.0==1) // Проверка состояния переключателя rab = rab »1; // Сдвиг разрядов if (rab==0) rab = 0Ы00000О0; // Если дошло до конца else rab = rab «1; // Сдвиг разрядов if (rab==0) rab = 0b00000001; // Сдвиг влево P0RTlkrab"0xFF; // Запись в порт с инверсией void main(void) CLKPR=0x80, // Отключить деление частоты системного генератора CLKPR=OxOO; P0RTA=0x00; // Инициализация порта А DDRA=0x00; PORTB=OxFF; // Инициализация порта В DDRB=OxFF; P0RTD=0x7F; // Инициализация порта D DDRD=OxOO; TCCR0A=0x00; // Инициализация таймера ТО TCCROB=OxOO; TCNT0=0x00, 0CR0A=0x00; OCROB=OxOO; TCCR1A=0x00; // Инициализация таймера Т1 TCCR1B=OxOD;
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==