Пн дек 15, 2025 19:46:43
Вт дек 16, 2025 21:31:14
Вт дек 16, 2025 22:54:15
Ср дек 17, 2025 08:32:55
ANSEL = 0; Ср дек 17, 2025 13:22:17
RoboC писал(а):ANSEL = 0
Ср дек 17, 2025 14:33:20
RoboC писал(а):ANSEL = 0
Ср дек 17, 2025 14:37:57
Чт дек 18, 2025 20:13:44
Чт дек 18, 2025 21:19:59
Пт дек 19, 2025 01:16:37
Пт дек 19, 2025 08:29:25
/*Программа "Искателя проводки"*/
#include <pic.h>
#define led GPIO0 //Вывод светодиода
#define key GPIO1 //Вывод кнопки
#define zumer_1 GPIO4 //Первый вывод для подключения резонатора
#define zumer_2 GPIO5 //Второй вывод для подключения резонатора
#define osc_max 8 //Максимальное значение
#define osc_min 2 //Минимальное значение
#define TRUE 1
#define FALSE 0
/***********************************************************/
__CONFIG(FOSC_INTRCIO & WDTE_OFF & MCLRE_OFF & PWRTE_ON & BOREN_OFF & CP_OFF & CPD_OFF);
__EEPROM_DATA(0,0,0,0,0,0,0,0);
_READ_OSCCAL_DATA();
void init(void) /*Подпрограмма инициализации микроконтроллера*/
{
CMCON=0xff; //Выключаем модуль компаратора
ANSEL = 0; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
TRISIO=0b00001110; //Задаем направление работы порта A
GPIO=0b00000000; //Устанавливаем необходимыелогические уровни
OPTION_REG=0b00101000; //Устанавливаем предделитель TMR0 1:1
WPU=0b00000010;
IOCB=0b00000010;
}
void pause(unsigned int time) /*Подпрограмма обеспечивающая паузы*/
{ //t=time X 11 Х 1мкс (Fosc=4МГц)
while(time-->0); //Пауза
}
char scan(void) /*Подпрограмма подсчета периодов поступающих с антены устройства*/
{
char temp; //Переменая для внутрених нужд
TMR0=0; //Очищаем таймер/счетчик
pause(9090); //Пауза 0.1сек
temp=TMR0; //Сохраняем значение таймера/счетчика
if(temp>osc_min && temp<osc_max) //Проверяем лежит ли значение TMR0 в нужном диапазоне
{
return TRUE; //если да то выходим и возвращаем значение TRUE
}
return FALSE; //если нет, то - FALSE
}
main()
{
char temp; //Переменые для внутрених нужд
unsigned int i;
line_1: //Метка для старта работы устройства после режима "sleep"
init(); //Инициализируем процессор
led=1; //Включаем светодиод
while(key==0); //Ждем пока отпустят кнопку
pause(45450); //Небольшая пауза (0.5сек)
for(;;) //Запускаем главный цикл программы
{
led=1; //Зажигаем светодиод
if(scan()) //Проверяем присутствует ли на входе антены электромагнитное поле с частотой 50Гц
{ //если присутствует
led=0; //то гасим светодиод
for(i=0; i<400; i++) //и запускаем цикл для подачи звукового сигнала
{
if(zumer_1) //Проверяем лог. значение на одном из выводов зумера
{
zumer_1=0; //и инвертируем состояние выводов
zumer_2=1;
}
else
{
zumer_1=1; //инвертируем состояние выводов
zumer_2=0;
}
pause(45); //Пауза, которая равна полупериоду частоты 1000 Гц
}
}
if(key==0) //Проверяем не нажата ли кнопка
{ //если нажата
led=0; //то гасим светодиод
zumer_1=0; //устанавливаем на выводах зумера лог. "0"
zumer_2=0;
while(key==0); //Ждем пока отпустят кнопку
pause(45450); //Небольшая пауза (0.5сек)
temp=GPIO; //Сохраняем значение портов ввода/вывода
GPIE=1; //Розрешаем выход из режима "sleep" по изменению логического уровня на выводах микроконтроллера
GPIF=0; //Сбрасываем флаг прерываний от выводов
SLEEP(); //Засыпаем.......
/*Если было нажатие кнопки, то просыпаемся*/
GPIE=0; //Запрещаем прерывание от выводов
goto line_1; //и идем на метку line_1
}
}
}Пт дек 19, 2025 20:37:56
Пт дек 19, 2025 23:58:57
xxxnet писал(а):схема из журнала радио
Сб дек 20, 2025 22:45:03