реклама на сайте
подробности

 
 
> Прерывание на си, Переехал с ассемблера, вопросы..
Araxnid
сообщение Jan 28 2012, 11:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 3-11-11
Пользователь №: 68 125



МК - ATmega16.
До этого работал с ассемблером и все было очень понятно и ясно, вот сейчас начал С осваивать, написал обычную программу привет светодиод..
На PC2 повешен светодиод, на INT0 кнопка ( при нажатии "0", если отпущена то "1")
Настроил прерывание по INT0, если зафиксирован уровень "0", то светодиод должен погаснуть\засветится.
Вот код
CODE
#define F_CPU 6000000UL // 6 MHz
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

SIGNAL(INT0_vect)
{
PORTC ^= (1<<PC2);
}

int main(void)
{
int i=0;
TCCR0 = 1<<CS02|1<<CS00;
TIMSK = 1<<TOIE0;
DDRC = 1<<DDC2;
PORTC = 1<<PC2;
GICR = 1<<INT0;
sei();
while(1)
{
i++;
i++;
i--;
i--;
}
}


Проверяю в протеусе, если без прерываний, то светодиод горит, если с прерываниями то, тоже горит, но на нажатие кнопки не реагирует.
TCCR0 и TIMSK - это я с таймером экспериментировал, но там тоже ничего не вышло..
GICR - регистр для разрешение прерываний по INT0.

+ вопрос в догонку, а как здесь счетчики, которые и в главной функции работают, и в прерывании можно проверить..я так понимаю, через глобальные переменные только?

Ах да, если это важно, то компилирую в Avr studio v.5

Сообщение отредактировал Araxnid - Jan 28 2012, 11:33
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 16:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016