From ab07a0d708935b43f5c6462e138516d0073bd813 Mon Sep 17 00:00:00 2001 From: Darkress <30271678+DarkressX@users.noreply.github.com> Date: Sat, 17 Jun 2023 20:42:59 +0200 Subject: [PATCH] Working WatchdogTimer --- de/darkress/pic16f84sim/Main.java | 15 ++++++++++++++- .../pic16f84sim/microcontroller/Timer.java | 4 ++-- .../pic16f84sim/microcontroller/Watchdog.java | 15 +++++++++------ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/de/darkress/pic16f84sim/Main.java b/de/darkress/pic16f84sim/Main.java index 3f8d24f..a293405 100644 --- a/de/darkress/pic16f84sim/Main.java +++ b/de/darkress/pic16f84sim/Main.java @@ -5,6 +5,7 @@ import de.darkress.pic16f84sim.decoder.CommandDecoder; import de.darkress.pic16f84sim.microcontroller.Cycles; import de.darkress.pic16f84sim.microcontroller.Memory; import de.darkress.pic16f84sim.microcontroller.ProgramCounter; +import de.darkress.pic16f84sim.microcontroller.Watchdog; import de.darkress.pic16f84sim.parser.Parser; import java.util.concurrent.TimeUnit; @@ -13,18 +14,30 @@ class Main { public static void main(String[] args) throws InterruptedException { - Command[] program = Parser.parser("de/darkress/pic16f84sim/TestPrograms/TPicSim7.LST"); + Command[] program = Parser.parser("de/darkress/pic16f84sim/TestPrograms/TPicSim11.LST"); Memory.initMemory(); while(ProgramCounter.getPc() < 1024) { + if((Memory.getRegister(0x03) & 0x10) == 0x00) { // Checking WDT in Status Register + System.out.println("Resetting device"); + Watchdog.resetProgram(); + } System.out.println("Command: " + program[ProgramCounter.getPc()].toString()); program[ProgramCounter.getPc()].execute(); System.out.println(Integer.toHexString(Memory.workingRegister) + " " + Cycles.getCycles()); System.out.println(Integer.toHexString(Memory.getOption()) + " " + Integer.toHexString(Memory.getTimer())); + + System.out.println(Integer.toHexString(Memory.getRegister(0x20)) + " " + Integer.toHexString(Memory.getRegister(0x21))); + System.out.println(Integer.toHexString(Memory.getRegister(0x22)) + " " + Integer.toHexString(Memory.getRegister(0x23))); + System.out.println(Integer.toHexString(Memory.getPCLATH()) + " " + Integer.toHexString(Memory.getPCL()) + "\n"); + + if(ProgramCounter.getPc() == 0x10) { + System.out.println(Memory.getRegister(0x20)); + } } } } \ No newline at end of file diff --git a/de/darkress/pic16f84sim/microcontroller/Timer.java b/de/darkress/pic16f84sim/microcontroller/Timer.java index 1052708..cb7d407 100644 --- a/de/darkress/pic16f84sim/microcontroller/Timer.java +++ b/de/darkress/pic16f84sim/microcontroller/Timer.java @@ -56,10 +56,10 @@ public class Timer cyclesToTimerIncrease--; if(cyclesToTimerIncrease == 0) { resetTimeToTimerIncrease(); - Watchdog.increaseWatchdogTimer(); + Watchdog.decreaseWatchdogTimer(); } } else { - Watchdog.increaseWatchdogTimer(); + Watchdog.decreaseWatchdogTimer(); } if(timerEnabled()) { if(!getPrescalerAssignment()) { // Assigned to timer0 diff --git a/de/darkress/pic16f84sim/microcontroller/Watchdog.java b/de/darkress/pic16f84sim/microcontroller/Watchdog.java index d1c4590..a3db386 100644 --- a/de/darkress/pic16f84sim/microcontroller/Watchdog.java +++ b/de/darkress/pic16f84sim/microcontroller/Watchdog.java @@ -8,22 +8,25 @@ public class Watchdog return watchdogTimer; } - public static void increaseWatchdogTimer() + public static void decreaseWatchdogTimer() { - watchdogTimer++; + watchdogTimer--; + checkWatchdog(); } private static void checkWatchdog() { - if(watchdogTimer > 18000) + if(watchdogTimer == 0) { - + System.out.println("Watchdog Time-Out"); + Memory.setRegister(0x03, Memory.getRegister(0x03) & 0xEF); //Clear !TO in StatusReg } } - private static void resetProgram() + public static void resetProgram() { - + Memory.setRegister(0x03, Memory.getRegister(0x03) | 0x10); + watchdogTimer = 18000; } }