![]() |
![]() |
| Mark's Project Pages/PIC Programming/Getting Started/Input | |
|
Input: As we've studied the 4 bit counter, we've learned a lot about PIC processors. However, our programme only counts, and it would be nice if we could make it respond to our commands. But before we do that, we'll start with a much simpler program. We've already looked at how to configure a port as an output, using the TRIS registers. To use a port as an input, we just need to modify our initialisation routine: Init clrf
PORTA ;all of porta low We've set up bits 0 and 1 of PORTA to be inputs by changing the clrf TRISA to the movlw/movwf combination, and note the binary notation - this makes it much easier to see which bits are inputs and outputs.
Having set up RA0 and RA1 as inputs, accepting input signals is just a case of reading PORTA, and making some sort of sense of the results. We'll write a simple program to test our two inputs. We shall connect two switches to the ports, labelled "ON" and "OFF". The switches are arranged to connect the ports to ground when pressed - when the switch is not pressed, a pull-up resistor makes the port high. This "active-low" arrangement is common in practice.
Programme specification: Pressing the "ON" switch will light an LED. Pressing the "OFF" switch will turn it off. It's very simple, as you can see from the flow diagram:
Clearly, this is going to be a simple programme to write, which leaves us free to think about the simple concepts here. The easiest way to check for a switch is with a btfss statement: btfss PORTA,
0 ;Is the switch pressed? When not pressed, RA0 is high. This means the next line is normally skipped. But when the switch does get pressed, the next line will be executed and in this case the subroutine will be called. When planning the flow chart, we ensure that this line is executed frequently so that we don't miss the key-presses. btfss PORTA,
0 ;Is "ON" switch pressed? This code will check for the switch connected to RA0, and turn on the LED connected to RB0 if the switch is pressed. Next, we need to check for the "OFF" switch, connected to RA1: btfss PORTA,
1 ;Is "OFF" switch pressed? The LED is turned off with a bcf statement. To complete the programme, we just need to arrange for these two lines to be executed frequently as mentioned above. Loop btfss PORTA, 0
;Is "ON" switch pressed? And this is all we need. The PIC will sit in a continuous loop, checking the two switches every few microseconds. You can download input.ASM here, and here is the circuit diagram:
Summary and conclusions: This simple program represents a significant step forward - we can now interact with our programmes. On the next page we will develop this further.
On to the next section - Further input.
|
©2004 Mark Hennessy
Contact Me | Site Map |
Disclaimer