Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <hidef.h> /* for EnableInterrupts macro */
- #include "derivative.h" /* include peripheral declarations */
- //світлодіоди
- #define LED1 PTDD_PTDD4
- #define LED2 PTDD_PTDD5
- #define LED3 PTDD_PTDD6
- #define LED4 PTDD_PTDD7
- //кнопки
- #define btn_1 !PTAD_PTAD2
- #define btn_2 !PTAD_PTAD3
- #define btn_3 !PTAD_PTAD4
- #define btn_4 !PTAD_PTAD5
- // обробник переривань «тіків» каналу 0 таймера
- interrupt VectorNumber_Vtpm1ch0 void TimerStep(void)
- {
- //скидання прапору переривання
- if(TPM1C0SC_CH0F)
- {
- TPM1C0SC_CH0F = 0;
- }
- //блимання світлодіодів
- LED1 = !LED1;
- LED2 = !LED2;
- LED3 = !LED3;
- LED4 = !LED4;
- //скидання флагу переповненння таймера
- TPM1SC_TOF = 0;
- }
- //обробник переривання: ввід з клавіатури
- interrupt VectorNumber_Vkeyboard1 void BTN_Click(void)
- {
- // підтвердження переривання (KBF скидається)
- KBISC_KBACK = 1;
- if(btn_1) //натискання кнопки
- {
- //запускати канал 0 таймеру 1 в режимі вихідного порівняння з дозволенним перериванням каналу
- // максимальний дільник частоти (1:1:1)
- TPM1SC_PS2 = 1;
- TPM1SC_PS1 = 1;
- TPM1SC_PS0 = 1;
- //зануляємо регістр
- TPM1C0SC = 0;
- TPM1C0SC_CH0IE = 1;
- TPM1C0SC_MS0A = 1;
- // обираємо системну шину для кроку таймера - 1.
- TPM1SC_CLKSA = 1;
- // дозвіл на переривання
- TPM1SC_TOIE = 1;
- }
- else if(btn_2)
- {
- //зупинка таймера при натиску на 2 кнопку
- //очищення налаштувань шини + вимкнення світлодіодів
- TPM1SC_CLKSA = 0;
- TPM1C0SC = 0;
- LED1 = 1;
- LED2 = 1;
- LED3 = 1;
- LED4 = 1;
- }
- else if (btn_3)
- {
- // збільшення періоду блимання світлодіодів вдвічі
- // зчитуємо біти дільника частоти
- int fd = TPM1SC & 0b00000111;
- if(fd != 0b00000111)
- {
- fd += 1;
- }
- // біти дільника частоти зсуваємо в регістрi
- TPM1SC_PS0 = fd & 1;
- TPM1SC_PS1 = (fd >> 1) & 1;
- TPM1SC_PS2 = (fd >> 2) & 1;
- }
- else if (btn_4)
- {
- // збільшення періоду блимання світлодіодів вдвічі
- // зчитуємо біти дільника частоти
- int fd = TPM1SC & 0b00000111;
- if(fd) fd -= 1;
- TPM1SC_PS0 = fd & 1;
- TPM1SC_PS1 = (fd >> 1) & 1;
- TPM1SC_PS2 = (fd >> 2) & 1;
- }
- }
- void main(void)
- {
- EnableInterrupts;
- /* include your code here */
- PTDDD = 0b11110000;//початковий стан діодів
- PTDD = 1;//
- //PTDD = 0b00001111; /* далі ми вмикаємо усі червоні діоди і звукогенератор (де 0 – вімкнути, а 1 – вимкнути. При чому для звукогенератора - навпаки)*/
- //so, if all 1s --> on all diods and off buzz
- PTAPE_PTAPE2 = 1;//enable pullup for kb2
- PTAPE_PTAPE3 = 1; //enable pullup for kb3
- PTAPE_PTAPE4 = 1;//enable pullup for kb4
- PTAPE_PTAPE5 = 1;//enable pullup for kb5
- /*Каждая линия ввода/вывода настраивается на исполнение альтернативной
- функции входа модуля KBI установкой в 1 соответствующего бита регистра */
- KBIPE_KBIPE5 = 1;
- KBIPE_KBIPE4 = 1;
- KBIPE_KBIPE3 = 1;
- KBIPE_KBIPE2 = 1;
- KBISC_KBIE = 1;// // enable Keyboard Interrupts
- KBISC_KBF = 1;//триггер флага запроса
- TPM1SC = 0; //8-бітний регістр стану та керування
- TPM1C0V = 0; //Регістр значень каналу
- TPM1MOD = 50000; //значення модуля регістра - число, до якого рахуватиме таймер
- TPM1CNTH = 0; //Канали модулів TPM. номер модуля -1
- __RESET_WATCHDOG(); /* feeds the dog */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement