
02.03.2008, 16:56
|
|
Moderator - Level 7
Регистрация: 19.10.2007
Сообщений: 225
Провел на форуме: 1260519
Репутация:
298
|
|
Текст программы, часть 1:
Код:
#include <16F676.h> //Выбираем контроллер
#use delay(clock=4000000) //Частота внутр генератора 4МГц
#use Fast_IO(A) //Ручная установка регистров TRIS
#use Fast_IO(C)
#fuses nowdt, nomclr,intrc_IO //отключаем сторожевой таймер,
//отключаем внешний сброс
//работа от внутреннего генератора
//без тактовых импульсов на RA4
#define DAT1 Pin_A5 // первый датчик (объем)
#define DAT2 Pin_A4 // второй датчик (контакт)
#define Sec_On Pin_A3 // кнопка "поставить на охрану"
#define Sec_Off Pin_C5 // кнопка "снять с охраны" секретная :)
#define Out_Siren Pin_A0 // выход на сирену
#define Out_Lamp Pin_A1 // выход на лампу
#define Out_Led Pin_A2 // выход на светодиод
//переменные********************************************************
Boolean Stat_Dat1, //состояние первого датчика
//true, если датчик замкнут (на охране)
Stat_Dat2, //состояние второго датчика
//true, если датчик замкнут (на охране)
Stat_On, //состояние кнопки "поставить на охрану" true, если была нажата
Stat_Off; //состояние кнопки "снять с охраны" true, если была нажата
Unsigned int16 Time; //это время, "тикает" с тактом 0.01 секунды
//прерывания**********************************************************
#Int_Timer0 // обработка прерывания
void Timer0_Isr()
{ ++Time; // добавляем единицу к счетчику времени, 1 счет=0.01 сек
Delay_us(13);
Set_Timer0(100); }
//функции***********************************************************
void Initial() //функция настройки контроллера
{ setup_adc_ports(NO_ANALOGS); //все выводы "цифровые"
setup_adc(ADC_OFF); // отключаем АЦП
setup_timer_0(RTCC_Internal|RTCC_Div_64); // настройка таймера 0
setup_timer_1(T1_DISABLED); //отключение таймера 1
setup_comparator(NC_NC); //отключение компаратора
setup_vref(FALSE); //отключение порогового напряжения компаратора
Set_Tris_A(0b11111000); //выводы RA0, RA1, RA2 - выходы
Set_Tris_C(0b11111111); //весь порт С настроен на вход
enable_interrupts(Global); //Запускаем счетчик времени
enable_interrupts(Int_Timer0);
output_low(Out_Siren); //Отключаем сирену и индикацию
output_low(Out_Lamp);
output_high(Out_Led);
Stat_On=false; //кнопки считаем отключенными
Stat_Off=false;
delay_ms(10000); //пауза при включении питания (для датчика объема)
//при сбросе питания система
//попытается встать на охрану
}
|
|
|