Transcript I/O Ports

I/O Ports
CS-280
Dr. Mark L. Hornick
1
Ports are channels from the CPU
to external hardware and software

Atmega32 has:



4 Digital I/O ports,
1 Analog-to-Digital port,
1 Serial port,…

The number of ports depends on processor type

Each port has a specific fixed address in the I/O
address space:


0x00 through 0x3F (0-63)
This address space is separate and distinct from
the Program and Data address spaces!
CS-280
Dr. Mark L. Hornick
2
Review: Data Memory Map
The General-purpose registers,
while not SRAM, are assigned the
first 32 addresses of the
Data Memory address space.
The I/O Registers are assigned
the next 64 addresses in the Data
Memory address space. Note that
SREG, SPL, SPH, PORTB,
DDRB, etc are all I/O registers
Note 0x20 offset
between I/O and
Data addresses
for I/O registers
Note that all I/O Registers thus have two addresses:
one address in the I/O address space and a corresponding
address in the Data Memory address space!
OUT 0x18, R20
; same as OUT PORTB, R20
is equivalent to:
STS 0x38, R20
; alternate: STS PORTB+0x20, R20
CS-280
Dr. Mark L. Hornick
3
Atmega32 has four digital I/O ports

PortA, PortB, PortC, PortD
 each have 8 pins (Px0 – Px7)

Each of these ports is associated with
three special-purpose I/O registers,
each with their own addresses:




DDRx
PORTx
PINx
DDRB, the I/O register (at I/O address
0x17) controls whether the pins on PortB
function as input or output:
 DDRB - Data Direction Register B

Each pin of PortB can be configured
independently via DDRB

Writing 0xff to DDRB configures all pins
of PortB to behave as output CS-280
Dr. Mark L. Hornick
4
Writing to a Port

The OUT instruction is used to write a value from a Register
to a port
 OUT PORTB, r25
writes the value of r25 to the PORTB output register (at I/O
address 0x18)
 Each bit in the 8-bit value corresponds to a hw pin of the port
 Only the pins configured as output will actually be written

Be sure to .INCLUDE “m32def.inc”, (which .DEF’s
PORTB=0x18):

The SBI instruction is used to set a single bit within a port
 SBI PORTB, 0
sets the value of bit 0 to 1

The CBI instruction is used to reset a single bit within a port
 CBI PORTB, 0
sets the value of bit 0 to 0
CS-280
Dr. Mark L. Hornick
5
PortB (0x18) is hard-wired to
the on-board LEDs
Setting a bit (to logical 1) turns
the LED on
SBI PORTB, 0 ;set bit 0


The associated pin must be
configured as an output
Note this is similar to
OUT PORTB, 0x01
But SBI affects only the single bit,
while OUT sets all 8 bits
CS-280
Dr. Mark L. Hornick
6
The digital I/O ports can also be
configured to act as INPUT ports
The I/O register DDRB controls whether
the pins on PortB function as input or
output:

Each pin of PortB can be configured
independently via DDRB

Writing 0x00 to DDRB configures all
pins of PortB to behave as input

Writing 0x0f configures pins 0-3 of
PortB as output and pins 4-7 as input
CS-280
Dr. Mark L. Hornick
7
Configuring I/O Portx for digital input
1.
2.
3.
First, use DDRx to specify which pins of Portx will
function as input and output:
LDI temp, 0x0f
OUT DDRx, temp ;pins 0-3 output, 4-7 input
Next, drive the input pins high (logical 1).
If you forget to do this, the pins will assume random
voltages (e.g. from static electricity) unless an external
voltage is deliberately applied!
LDI temp, 0xf0
OUT PORTx, temp ;drive input pins high
Finally, you can read the current state of the input pins as
the voltages are applied (+5v = logical 1, 0v = logical 0) or
as the pin is grounded
IN temp, PINx ;read state of input pins
CS-280
Dr. Mark L. Hornick
8
Read from a PINx, not PORTx!

The IN instruction is used to read a value
from the input pins on a port configured for
input:


IN R0, PINx
; read input pins
reads the value of the PORTx INput latch into R0
PINx [the input latch associated with Portx] can
only be read, not written

Unlike PORTx and DDRx, which can be both read and
written
CS-280
Dr. Mark L. Hornick
9