
Проблема с PIC16F628a. Запрограммировано на Микро Си, откомпилировано. Но Протеусе работает нормально. Но вот в железе работает
не правильно. Программатор Екстра Пик все читает и пишет. Может фьюзы стоят не правильно, но я проверил при прошивке?
вот прога чисто для проверки
#define voda porta.f0 //--ДАТЧИК ВОДЫ
#define temp porta.f1 //--датчик температуры
#define prg1 porta.f2 //--код программы 0 бит
#define prg2 porta.f3 //--код программы 1 бит
#define pit porta.f4 //--контроль питания
#define otshim portb.f0 //--отжим
#define revers portb.f1 //--реверс двигателя
#define motor portb.f2 //--включение двигателя
#define klap1 portb.f3 //--клапан 1
#define klap2 portb.f4 //--клапан 2
#define ten portb.f5 //--нагреватель
#define sliv portb.f6 //--слив воды
#define error portb.f7 //--ошибка
unsigned cnt; // Определение переменной cnt
int prer; //прерывания
int minn; //минуты
int sek; //секунды
int cik; //счетчик цикла
int konpr; //конец программы
//----------
void interrupt() {
prer++; // В случае прерывания увеличить cnt на
//TMR0 = 0; // Возврат TMR0 в начальное состояние
INTCON = 0x20; // Бит T0IE установлен, bit T0IF очищен
if (prer == 10) {
//error = ~error; }
if (konpr == 0) {error = ~error;}
prer = 0;
sek++; // счет секунд
}
if (sek == 60) { // счет минут
sek = 0;
// error = ~error;
minn++;
}
if (minn = 60) {minn = 0;}
//--проверка аварий
}
//----------
void vodaf() { //-набор воды
do {
klap2 = 1;
} while(voda == 1);
klap2 = 0;
}
//----------
void tenf() { //--нагрев воды
ten = 1;
motor = 1;
do {
if (voda == 1) {goto end_ten;}
delay_ms(200);
} while(temp == 1);
end_ten:
motor = 0;
ten = 0;
}
//----------
void slivf() { //-слив воды
ten = 0;
klap1 = 0;
klap2 = 0;
sliv = 1;
motor = 1;
do {
delay_ms(200);
}
while (voda == 0);
delay_ms(500);
motor = 0;
sliv = 0;
}
//----------
void poloskan() { //--полоскание
cik =0;
vodaf();
do {
motor = 1;
delay_ms(2000);
motor = 0;
revers = ~revers;
delay_ms(1000);
cik++;
}
while (cik < 2);
revers =0;
motor = 0;
slivf();
}
//----------
void otshimf() { //--отжим белья
otshim = 1;
cik = 0;
do {
motor = 1;
delay_ms(2000);
motor = 0;
delay_ms(700);
cik++;
}
while (cik < 2);
otshim = 0;
motor = 0;
}
//----------
void main() { //dvdf
OPTION_REG = 0x256; // Назначение предделителя для TMR0
// ANSEL = 0; // Порты I/O настроены как цифровые
// ANSELH = 0;
TRISB = 0; // Все входы порта B настроены на вывод
PORTB = 0x0; // Сброс порта B
TMR0 = 0; // TMR0 считает от 0 до 255
INTCON = 0xA0; // Разрешить прерывания по TMR0
sek = 0; // секунды
minn = 0; //минуты
cik = 0;
konpr = 0;
//----------
vodaf();
tenf();
//--стирка
do { // Бесконечный цикл
motor = 1;
delay_ms(2000);
motor = 0;
revers = ~revers;
delay_ms(2000);
cik++;
} while(cik < 2);
delay_ms(1000);
slivf();
delay_ms(1000);
poloskan();
delay_ms(1000);
otshimf();
//-------конец--------------
konpr = 1;
error = 1;
}