Показать сообщение отдельно
Старый 01.04.2009, 08:13   #42   
Форумец
 
Сообщений: 1,532
Регистрация: 19.02.2009
Возраст: 54
Записей в дневнике: 1

petrd вне форума Не в сети
Еще один примерчик на светодиодах, к предыдущей схеме добавилась кнопка и резистор. Теперь в основном цикле ждем нажатия кнопки, и если она будет нажата, то будет загораться или гаснуть светодиод HL5, а в прерывании теперь будут моргать 4 светодиода ( HL1-HL4), только побыстрей.
Для обработки нажатия использовал встроенную в MikroC процедуру Button(). В железе проверено.
Код:
unsigned short counter, oldstate, step;
void interrupt(){       // подпрограмма обработки прерывания
if(INTCON.T0IF){
counter++;
if (counter>1){
PORTB=~PORTB&0x0f|step;
counter=0;
}
INTCON.T0IF=0;
}
}// interrupt
void Init(){         // подпрограмма начальной инициализации
CMCON=7;            // все входы как цифровые, компараторы отключены
TRISA=0xff;         // настроили выводы PORTA на вход
TRISB=0;            // настроили выводы PORTB на вывод
OPTION_REG = 0x87;  // настройка TMR0, прерывания будут каждые 66,304 ms
INTCON.T0IE=1;      // разрешили прерывания по переполнению TMR0
INTCON.GIE=1;       // разрешили все прерывания
step=0;
oldstate=0;
}// Init
void main(){
Init();
while(1){           // организовали вечный цикл
if (Button(&PORTA, 0, 1, 0))
oldstate = 1;
if (oldstate && Button(&PORTA, 0, 1, 1)){ // ждем отпускания кнопки (переход от 0 к 1)
step=~step&0x80;
PORTB|=step;
oldstate = 0;
}
}
}//~
Планирую еще примеры по работе с модулем ШИМ, по работе с ЖКИ и термометром DS18B20. Жалко, что в PIC16F628A нет АЦП.
Если будут пожелания, то можно еще что-нибудь запустить.
Миниатюры
Нажмите на изображение для увеличения
Название: LED_Blink_1.JPG
Просмотров: 214
Размер:	74.4 Кб
ID:	422219  
  Ответить с цитированием