Вт авг 20, 2019 19:52:49
Ср авг 21, 2019 08:21:32
Ср авг 21, 2019 13:28:38
Ср авг 21, 2019 20:38:28
Ср авг 21, 2019 21:36:34
Чт сен 19, 2019 16:49:21
Пт сен 20, 2019 21:05:51
Сб сен 21, 2019 14:24:26
Ср дек 11, 2019 01:12:43
Пн янв 20, 2020 20:45:46
Сб янв 25, 2020 06:26:11
Вс фев 09, 2020 20:01:13
Ср июл 15, 2020 23:48:26
Чт июл 16, 2020 06:57:54
как-то слишком просто... надо бы как-то так: на питоне транслятор, который транслирует код на асме в код на бейсике, на бейсике транслятор в паскаль для отладки в дельфи, а уж из дельфи транслятор в код Си... так лучше, имхоlin17 писал(а):для паскаля вот разрабатывается транслятор, чтобы отлаживать на дельфях, а потом транслировать в код Си
Чт июл 16, 2020 14:20:08
Чт июл 16, 2020 15:28:51
Чт июл 16, 2020 16:15:29
NStorm писал(а):...обычно мало пригодные для правки человеком. С тем же успехом можно пытаться.....
Чт июл 16, 2020 19:27:42
Вт окт 20, 2020 09:11:52
while (1)
{
PWM1CON = 0b00000000; // отключаем ШИМ1
FVRCON = 0b00000000; // отключаем ИОН, отключаем температурный индикатор
ADCON = 0b00000000; // отключаем модуль АЦП
PORTA = 0; // все выходы порта переводим в низкое состояние
__delay_ms(500);
IOCIE = 1; // разрешаем прерывание по изменению уровня PORTA
IOCAF = 0; // сбрасываем флаг IOCAF (свидетельствующий о прерывании RA3)
SWDTEN = 0; // отключаем сторожевой таймер на период сна
SLEEP(); // здоровый крепкий сон до пробуждения нажатием кнопки)
IOCIE = 0; // запрет прерывания по изменению уровня PORTA
SWDTEN = 1; // включаем сторожевой таймер
CLRWDT();
LED = 1; // включаем питание
PWM1CON = 0b11000000; // вкл ШИМ для двухтонального сигнала включения
TMR2 = 0; // сброс TMR2 для исключения пауз между тонами
PR2 = 10; // первый тон сигнала включения ~ 700 Гц
PWM1DCH = 5; // -//-
__delay_ms(111);
TMR2 = 0; // сброс TMR2 для исключения пауз между тонами
PR2 = 6; // второй тон сигнала включения ~ 1,1 кГц
PWM1DCH = 3; // -//-
__delay_ms(111);
PWM1CON = 0b01000000; // выкл ШИМ
FVRCON = 0b10000001; // включаем ИОН 1,024V, отключаем температурный индикатор
ADCON = 0b00011101; // включаем модуль АЦП, FVR вход (фиксированное опорное напряжение), FOSC/2
GO:
for(n=0; n<=15000; n++) // время работы основного цикла программы, где 1000n соответствует ~ 1 минуте работы (максимальный n=65535, ТЕ 65мин)
{
if (!TK1) // если перемычка на 0, то бесконечный режим работы (без таймера))
{
n=0;
}
CLRWDT();
__delay_ms(52);
if (!TK) // если кнопка нажата - подаем короткий звуковой сигнал
{
PWM1EN = 1; // вкл ШИМ звукового сигнала нажатия кнопки
__delay_ms(55);
PWM1EN = 0;
__delay_ms(999);
if (!TK) // если кнопка нажата более 1 сек - отключаем питание
{
goto Power_OFF;
}
else // если кнопка нажата менее 1 сек - обнуляем таймер ожидания
{
goto GO;
}
}
GO_nDONE = 1; //начать преобразование АЦП
while(GO_nDONE); //ожидание окончания преобразования АЦП
if(ADRES > 86) //если U ниже 3.0В выключаем питание
{
goto Power_OFF;
}
else
{
if(ADRES > 80) //если U ниже 3.3В включим двойной предупредительный звуковой сигнал о низком заряде АКБ, который повторяется каждые 15с
{
if (i<2)
{
PWM1EN = 1; // вкл ШИМ для предупредительного звукового сигнала
__delay_ms(55);
PWM1EN = 0; // выкл ШИМ
__delay_ms(33);
}
i++;
}
}
if(n==14000) // вкл предупредительный 4-хкратный звуковой сигнал, предупреждающий о отключении питания, где 1000n соответствует ~ 1 минуте работы (максимальный n=65535, ТЕ 65мин)
{
for(m=0; m<=3; m++)
{
PWM1EN = 1; // вкл ШИМ для предупредительного звукового сигнала
__delay_ms(155);
PWM1EN = 0; // выкл ШИМ
__delay_ms(77);
}
}
}
Power_OFF:
PWM1EN = 1; // вкл ШИМ для двухтонального сигнала выключения
TMR2 = 0; // сброс TMR2 для исключения пауз между тонами
PR2 = 6; // первый тон ~ 1,1 кГц
PWM1DCH = 3; // -//-
__delay_ms(111);
TMR2 = 0; // сброс TMR2 для исключения пауз между тонами
PR2 = 10; // второй тон ~ 700 Гц
PWM1DCH = 5; // -//-
__delay_ms(111);
PWM1EN = 0; // выкл ШИМ
LED = 0; // отключаем питание
}
return;
}
Вт окт 20, 2020 11:29:23
void init() {
PWM1CON = 0b00000000; // отключаем ШИМ1
FVRCON = 0b00000000; // отключаем ИОН, отключаем температурный индикатор
ADCON = 0b00000000; // отключаем модуль АЦП
PORTA = 0; // все выходы порта переводим в низкое состояние
__delay_ms(500);
IOCIE = 1; // разрешаем прерывание по изменению уровня PORTA
IOCAF = 0; // сбрасываем флаг IOCAF (свидетельствующий о прерывании RA3)
SWDTEN = 0; // отключаем сторожевой таймер на период сна
SLEEP(); // здоровый крепкий сон до пробуждения нажатием кнопки)
IOCIE = 0; // запрет прерывания по изменению уровня PORTA
SWDTEN = 1; // включаем сторожевой таймер
}
void power_on() {
LED = 1; // включаем питание
PWM1CON = 0b11000000; // вкл ШИМ для двухтонального сигнала включения
TMR2 = 0; // сброс TMR2 для исключения пауз между тонами
PR2 = 10; // первый тон сигнала включения ~ 700 Гц
PWM1DCH = 5; // -//-
__delay_ms(111);
TMR2 = 0; // сброс TMR2 для исключения пауз между тонами
PR2 = 6; // второй тон сигнала включения ~ 1,1 кГц
PWM1DCH = 3; // -//-
__delay_ms(111);
PWM1CON = 0b01000000; // выкл ШИМ
FVRCON = 0b10000001; // включаем ИОН 1,024V, отключаем температурный индикатор
ADCON = 0b00011101; // включаем модуль АЦП, FVR вход (фиксированное опорное напряжение), FOSC/2
}
void power_off() {
PWM1EN = 1; // вкл ШИМ для двухтонального сигнала выключения
TMR2 = 0; // сброс TMR2 для исключения пауз между тонами
PR2 = 6; // первый тон ~ 1,1 кГц
PWM1DCH = 3; // -//-
__delay_ms(111);
TMR2 = 0; // сброс TMR2 для исключения пауз между тонами
PR2 = 10; // второй тон ~ 700 Гц
PWM1DCH = 5; // -//-
__delay_ms(111);
PWM1EN = 0; // выкл ШИМ
LED = 0; // отключаем питание
}
void main(void) {
init();
power_on();
CLRWDT();
while (1) {
for (n = 0; n <= 15000; n++) // время работы основного цикла программы, где 1000n соответствует ~ 1 минуте работы (максимальный n=65535, ТЕ 65мин)
{
if (!TK1) // если перемычка на 0, то бесконечный режим работы (без таймера))
{
n = 0;
}
CLRWDT();
__delay_ms(52);
if (!TK) // если кнопка нажата - подаем короткий звуковой сигнал
{
PWM1EN = 1; // вкл ШИМ звукового сигнала нажатия кнопки
__delay_ms(55);
PWM1EN = 0;
__delay_ms(999);
if (!TK) // если кнопка нажата более 1 сек - отключаем питание
{
power_off();
return;
} else // если кнопка нажата менее 1 сек - обнуляем таймер ожидания
{
break;
}
}
GO_nDONE = 1; //начать преобразование АЦП
while (GO_nDONE); //ожидание окончания преобразования АЦП
if (ADRES > 86) //если U ниже 3.0В выключаем питание
{
power_off();
return;
} else {
if (ADRES > 80) //если U ниже 3.3В включим двойной предупредительный звуковой сигнал о низком заряде АКБ, который повторяется каждые 15с
{
if (i < 2) {
PWM1EN = 1; // вкл ШИМ для предупредительного звукового сигнала
__delay_ms(55);
PWM1EN = 0; // выкл ШИМ
__delay_ms(33);
}
i++;
}
}
if (n == 14000) // вкл предупредительный 4-хкратный звуковой сигнал, предупреждающий о отключении питания, где 1000n соответствует ~ 1 минуте работы (максимальный n=65535, ТЕ 65мин)
{
for (m = 0; m <= 3; m++) {
PWM1EN = 1; // вкл ШИМ для предупредительного звукового сигнала
__delay_ms(155);
PWM1EN = 0; // выкл ШИМ
__delay_ms(77);
}
}
}
return;
}
}