Laufzeit und Watchdog und Timer
This commit is contained in:
93
src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java
Normal file
93
src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user