Testing a port
Here is a bit of code that I've been using to test microprocessor pins (also know as ports).
This word turns the selected output on and off every half a second (500 milliseconds) until a key is pressed. ('Word' is the Forth name for what other languages call functions, procedures or methods)
I won't explain all of the detail, but here are some bits worth noting.
// ( port# -- )
: test_port0
// program port as an output
." Testing port 0." dup . ." ->"
dup p0_out_bit
BEGIN
dup p0set_bit ." 1"
500 ms
dup p0clear_bit ." 0"
500 ms
KEY? UNTIL
KEY drop
drop
CR
;
This word turns the selected output on and off every half a second (500 milliseconds) until a key is pressed. ('Word' is the Forth name for what other languages call functions, procedures or methods)
I won't explain all of the detail, but here are some bits worth noting.
- The // comment is supported on this Forth platform but not normally. The more traditional backslash (\) to end of line comments and round brackets (parentheses) are also supported.
- p0_out_bit, p0set_bit and p0clear_bit are words I created earlier. These do the following: p0_out_bit turns a particular pin (port) into an output, p0set_bit turns a pin high (on, 3v) and p0clear_bit turns a pin low (off, 0v).
- Forth syntax is words or numbers separated by spaces.
- Forth stores values on the stack, so 500 ms will store 500 onto the stack and the word 'ms' on this Forth system waits for that number of milliseconds.
- The Forth word ':' (colon) defines a new word called the name that follows it. The Forth word ';' (semicolon) ends that new word creation process.
- The BEGIN marks the start of the loop and the UNTIL marks the end of the loop. UNTIL will loop until it gets a true (In the above case KEY? produces a true when a key is ready).
- This Forth system is not case sensitive - so it doesn't matter whether the words are spelt DROP or drop.
31 test_port0This will print:
Testing port 0.31 ->setting31On this system, port 0.31 is the on-board LED, and hence this particular example will flash the LED. (Note: the 'setting31' is test output printed by p0_out_bit)
101010101010101010
0 Comments:
Post a Comment
<< Home