Files
PIC-Simu/src/main/java/fabrik/simulator/pic16f84/PreScaler.java

61 lines
1.3 KiB
Java

package fabrik.simulator.pic16f84;
import fabrik.simulator.pic16f84.interfaces.*;
public class PreScaler extends PICComponent implements PreScalerInterface {
private final int PSA = 0x3;
private final int OPTION = 0x81;
private int scaler;
public PreScaler () {
super();
scaler = 0b111;
}
@Override
public boolean isPrescalerOnTimer(){
return dataRegister.getDirectBit(OPTION, PSA) == 0;
}
@Override
public int getScaler() {
return scaler;
}
@Override
public int getFactor() {
int scale = dataRegister.getDirectRegister(OPTION) & 0b111;
int timer = isPrescalerOnTimer() ? 1 : 0;
return (int) Math.pow (2, scale+timer);
}
@Override
public void reset(){
dataRegister.setDirectBit(OPTION, 0, 0);
dataRegister.setDirectBit(OPTION, 1, 0);
dataRegister.setDirectBit(OPTION, 2, 0);
}
@Override
public void resetFromRegister() {
scaler = getFactor();
}
@Override
public void decrement(boolean manual) {
scaler--;
if (scaler == 0) {
scaler = getFactor();
timer.increment(manual);
}
}
@Override
public void initialize(PICComponents picComponents) {
super.initialize(picComponents);
}
}