Egg Timer

Here's our first real experiment, a simple egg timer. Well, egg timer, not really, you can do a lot more with it than time your boiling eggs. At least I don't suppose you want to boil your eggs for up to 99 minutes!

The object of this experiment is to show you how software timing loops work. A software timing loop is relatively simple because it relies completely on the processor, no external hardware is necessary. One of the major disadvantages of a software timing loop is that the processor can't do other things while carefully counting its steps.
Later experiments will teach you how to use the Z80 CTC for instance to control the timing of the software to get a much more accurate result, regardless of the work load of the processor.

You may learn other things from this program too. For starters you may learn how to work the display and keyboard of the MPF-1. And there's some BCD arithmetic in the program too. Remember that the Z80 is actually a binary number crunching machine, it requires some extra tricks to make it deal with human readable numbers.

Operating Instructions

After you load the program into memory (filename 0002) you can start it like just about any other program on the MPF-1 by typing ADDR 1 8 0 0 GO. The display should now show E t   3.0 0, which means that the timer is set for 3.00 minutes.
You can change the time by simply entering 4 digits in a row, including any leading zeroes. As soon as you type the first digit you'll see something like E t 1 _ _ _, which means that you can enter the other digits on the cursor lines.
Should you make a mistake simply complete the number and start again. You may also press the DEL key to return to the previously set time.
To make this program fool proof you can't enter the seconds field above 59 or set the time to 0.00 seconds. Study the source code to see how I did that if you like.

You can start the countdown of the egg timer (with any value ranging from 1 second to 99 minutes and 59 seconds) by simply pressing GO. When the timer reaches 0.00 the message - S T O P - will flash while an intermittent sound will also signal the timeout of the countdown. Pressing almost any key now will stop the noise and return you to the preset time.
While the countdown is running you can stop the timer by pressing the STEP key (please note that STEP is spelt almost the same as STOP :). After stopping the countdown like this you can restart it again by pressing GO.
By pressing DEL after stopping the countdown somewhere midway you reset the timer back to its preset time. This way you can easily restart the countdown from the beginning.

Room For Improvement

I deliberately kept the program rather simple. Therefore there is some room for improvement. Feel free to alter the program to your liking.
Here are some things which might be improved:

  • The timing is not very accurate as it is now. In my case it is about 8 seconds slow per hour. You can fine tune the timer further by decreasing the SEC_RELOAD value and put a dummy loop inside the main countdown loop. This will give you better resolution than currently provided by the SCAN1 routine.
  • Key-beeps are not implemented. If you like key beeps or key clicks you can add them to the program.
  • You may want to limit the number of beeps after the timeout. Currently the beeps will continue indefinitely until you press any key. This means that the egg timer may produce a lot of noise while left running unattended.

Download

Here you can download the file eggtimer.zip, which contains the source listing, the actual plain hex file, a list file and an mp3 file of the program.