Proteus. Выдает ошибку

Сделал схему ультразвукового дальномера на основе микроконтроллера ATmega8. Загрузил код в микроконтроллер, после чего выдал вот такую ошибку: Invalid opcode 0xFFFF at PC=0x0002 @0.000002000s. Эта ошибка возникает из-за кода или схемы?

#include <mega8.h>
#include <delay.h>
#include <alcd.h>
#include <stdio.h>

#define TRIGGER_PIN 0
#define ECHO_PIN 1
#define RS_PIN 3
#define RW_PIN 2
#define E_PIN 1
#define D4_PIN 4
#define D5_PIN 5
#define D6_PIN 6
#define D7_PIN 7
#define SB1_PIN 2
#define SB2_PIN 3
#define SB3_PIN 6
#define SB4_PIN 1
#define SB5_PIN 0

unsigned int distance = 0;
int temperature = 25; // Начальная температура

void trigger_pulse() {
    PORTD.0 = 1;
    delay_us(10);
    PORTD.0 = 0;
}

unsigned int measure_distance() {
    unsigned int time = 0;
    trigger_pulse();
    
    while (!PIND.1);
    TCNT1 = 0;
    
    while (PIND.1){
        time = TCNT1;
    }
    
    return (time / 58 / 2);
}

void measure_temperature() {
    // Отправляем команду для измерения температуры US-100
    
    PORTD.0 = 1;
    delay_ms(1);
    PORTD.0 = 0;
    delay_ms(1);
    // Команда для измерения температуры
    PORTD.0 = 1;
    delay_ms(100);
    PORTD.0 = 0;
    
    // Считываем температуру
  
    
    temperature = 25;
}

void increase_distance() {
    if (distance < 999) {
        distance += 10;
    }
}

void decrease_distance() {
    if (distance >= 10) {
        distance -= 10;
    }
}

void main(void) {
    char str[16];
    DDRC.0 = 0; // Настройка входа для SB5
    DDRC.1 = 0; // Настройка входа для SB4
    DDRC.2 = 1; // Настройка вывода для SB1
    DDRC.3 = 1; // Настройка вывода для SB2
    DDRC.6 = 1; // Настройка вывода для SB3

    DDRD.0 = 1;
    DDRD.4 = 1;
    DDRD.5 = 1;
    DDRD.6 = 1;
    DDRD.7 = 1;
    DDRB.1 = 1;
    DDRB.2 = 1;
    DDRB.3 = 1;

    PORTC.2 = 1; // Включение подтягивающего резистора для SB1
    PORTC.3 = 1; // Включение подтягивающего резистора для SB2
    PORTC.6 = 1; // Включение подтягивающего резистора для SB3

    lcd_init(16);

    
    while (1) {
        lcd_clear();
        lcd_gotoxy(0, 0);
        sprintf(str, "Distance: %u cm", distance);
        lcd_puts(str);
        lcd_gotoxy(0, 1);
        sprintf(str, "Temperature: %d C", temperature);
        lcd_puts(str);
        
        if (PINC.0 == 0) {
            measure_distance();
        } else if (PINC.1 == 0) {
            measure_temperature();
        } else if (PINC.2 == 0) {
            increase_distance();
        } else if (PINC.3 == 0) {
            decrease_distance();
        } else if (PINC.6 == 0) {
            // Действие для SB3 (RESET)
            while (1);
        }
        
        delay_ms(500);
    }

}введите сюда описание изображения`


Ответы (0 шт):