Microcontroller Intermediate
Kit - Using Switches as Inputs
Up until now, all the
microcontroller projects have just done what
they were programmed to do without any input
from us. You have probably already thought that
it would be nice to have the microcontroller do
something based on inputs it receives from the
real world. This tutorial shows how to use a
switch as an input so that you can control what
the microcontroller is doing.
In this tutorial, we
will use the 7 segment display as we connected
it in the previous tutorial (Using
a 7 segment display). The switch will be
used to change what is shown on the display.
The type of switch we
will be using is called a normally open switch.
This is often abbreviated as NO switch where NO
stands for Normally Open. The switch has 2 legs
(connectors). Normally Open means that the
connectors are not connected (forming an open
circuit) unless you press the switch. When you
press the switch, a connection is made between
the two connectors, creating a short circuit (or
closed circuit). You can also get Normally
Closed switches (NC) which means that they are
closed, forming a short circuit, unless you are
pressing the button.
Our switch is really a
button rather than a switch because you have to
hold it down to maintain the connection between
the two points. These types are more useful
with microcontrollers than a true switch. A
true switch lets you flip between open and
closed without having to hold down the button.
Inputs to the Microcontroller
To use one of the input/output pins of the
8051 microcontroller as an input, you must write
a '1' to that pin.
Then in the software, you can check to see if
the input is a '0' or a '1' and do different
operations based on that input.
Use the same hardware configuration that you
have after the 7 segement display tutorial. Add
in the switch by connecting one wire to Pin 2 of
the 2051 (that is Port 3, Bit 0) and connecting
the other wire to ground. Now when the button
is not pressed, pin 2 will be left unconnected
to anything and when the software checks (reads)
pin 2, it will see the '1' that we wrote there
to make it an input pin. When the button is
pressed, pin 2 will be connected to ground and
when the software checks pin 2, it will see a
'0'.
Software
Our first program will constantly check the
input to see if the input (P3.0) is a '0' or a
'1'. This is called polling.
We will use the command JB (Jump
if Bit is set) to check if pin 2 is a '1' or a
'0'. (If pin 2 is '1' then we say that the
bit is set. In this case the bit is P3.0 so we
would say P3.0 is set.) Below is the
little bit of assembly code we will use to
monitor the input and change the display.
SETB
P3.0
;This is required to use
P3.0 as an input
LOOP:
JB
P3.0,
NOT_PRESSED ; If
the button is not pressed, skip the next line
ACALL
DISPLAY_0
;Display '0' on the 7 segment display
AJMP
LOOP
;Jump back up to LOOP:
NOT_PRESSED:
ACALL
DISPLAY_1 ;Display
'1' on the 7 segment display
AJMP
LOOP
;go to LOOP(always jump back to point labeled
LOOP)
The first line sets up pin 2 as an input by
writing a '1' to P3.0. Then "JB P3.0,
NOT_PRESSED" checks to see if P3.0 is a '1'
which means the button is not pressed. If the
button is not pressed, it jumps to that label
(NOT_PRESSED) and calls the routine to make a
'1' on the display. If the button is pressed,
it will not jump but instead will go to the next
line which calls the routine to make a '0' on
the display. So the display will show the value
of P3.0.
Note: Another command you may want to use is
JNB (Jump if Not Bit set) which is the opposite
of JB.
The program is switch.asm.
Compile the program using
TASM and load the hex file into the 2051.
Put the 2051 into the circuit and connect the
power. The display should say '1' until you
press the button and then should say '0' while
the button is being pressed.