Laufzeit und Watchdog und Timer

This commit is contained in:
2024-05-12 23:22:04 +02:00
parent 6d329c6059
commit abc915bf2b
4 changed files with 183 additions and 1 deletions

View File

@ -0,0 +1,93 @@
package fabrik.simulator.pic16f84;
import java.util.Timer;
import java.util.TimerTask;
public class WatchdogTimer {
private int prescaler;
private int counter;
private final int MAX_PRESCALER = 128;
public WatchdogTimer(int prescaler) {
this.prescaler = Math.min(prescaler, MAX_PRESCALER);
this.counter = 0;
}
public void start() {
activateWatchdog(prescaler);
int watchdogTime = 18 * prescaler; // Zeit in Millisekunden
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
counter++;
if (counter >= MAX_PRESCALER) {
reset();
System.out.println("Watchdog Timeout!");
}
}
}, 0, watchdogTime);
}
public void reset() {
counter = 0;
}
private void activateWatchdog(int prescaler) {
// Teilerfaktor entsprechend einstellen
switch (prescaler) {
case 1:
DataRegister.setBit(0x81, 0); // Setze PS2:0 auf 000
DataRegister.setBit(0x81, 1); // Deaktiviere den Watchdog-Timer
break;
case 2:
DataRegister.clearBit(0x81, 0); // Setze PS2:0 auf 001
DataRegister.setBit(0x81, 1); // Deaktiviere den Watchdog-Timer
break;
case 4:
DataRegister.setBit(0x81, 0); // Setze PS2:0 auf 010
DataRegister.setBit(0x81, 1); // Deaktiviere den Watchdog-Timer
break;
case 8:
DataRegister.setBit(0x81, 0); // Setze PS2:0 auf 011
DataRegister.setBit(0x81, 1); // Deaktiviere den Watchdog-Timer
break;
case 16:
DataRegister.clearBit(0x81, 0); // Setze PS2:0 auf 100
DataRegister.clearBit(0x81, 1); // Aktiviere den Watchdog-Timer
break;
case 32:
DataRegister.setBit(0x81, 0); // Setze PS2:0 auf 101
DataRegister.clearBit(0x81, 1); // Aktiviere den Watchdog-Timer
break;
case 64:
DataRegister.clearBit(0x81, 0); // Setze PS2:0 auf 110
DataRegister.setBit(0x81, 1); // Aktiviere den Watchdog-Timer
break;
case 128:
DataRegister.setBit(0x81, 0); // Setze PS2:0 auf 111
DataRegister.setBit(0x81, 1); // Aktiviere den Watchdog-Timer
break;
default:
System.out.println("NÜCHTITTGGGGG für den Watchdog-Timer.");
break;
}
}
}