[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-gcc-list] Using PORTB with variables, PORTB = var
From: |
Kevin Cozens |
Subject: |
Re: [avr-gcc-list] Using PORTB with variables, PORTB = var |
Date: |
Sat, 22 Apr 2006 12:40:20 -0400 |
User-agent: |
Mozilla Thunderbird 1.0.7-1.1.fc4 (X11/20050929) |
address@hidden wrote:
This doesn't work as expected... not sure why. I would like to keep the
functions if possible, I'm thinking it has something to do with scope
perhaps? I am new to C by the way, if it isn't evident already (:
It has nothing to do with scope. It has more to do with your being new to C
(and previously programming in assembler?) if I understand properly what you
are trying to do based on your code examples.
Originally you stated that you weren't getting the behaviour you expected but
never stated what you did expect. Your code examples lead me to think you have
8 LED's connected to port B of an AVR. You want to turn the first LED on then
off, followed by the second, the third, etc. After the eighth one, you want to
start at the first one again.
Assuming that is what you want to do, you are almost there.
The first issue with your code is that var is a 16-bit value which you are
outputting to an 8-bit port. var should be declared as an 8-bit value. The
second issue is with your use of the C operator <<. This is equivalent to a
shift operation in assembly language. It is NOT the same as a rotate operation
you may have used in assembly language.
The << in C is more like a simple arithmetic(?) shift you find in some
microcontrollers. The bits shift left until they reach the MSB then they fall
off the MSB after that. A rotate instruction that you find in some
microcontrollers will take the value in the MSB and place it in the LSB while
shifting all other bits left.
A simple fix to the program is to declare var as an 8-bit value. Then, in the
change() function, add an if statement after the bit shift
if (var == 0)
var = 1;
It won't be the most elegant way of doing things but it should give you the
effect you want.
--
Cheers!
Kevin.
http://www.interlog.com/~kcozens/ |"What are we going to do today, Borg?"
Owner of Elecraft K2 #2172 |"Same thing we always do, Pinkutus:
| Try to assimilate the world!"
#include <disclaimer/favourite> | -Pinkutus & the Borg
- [avr-gcc-list] Using PORTB with variables, PORTB = var, unauthorized, 2006/04/22
- Re: [avr-gcc-list] Using PORTB with variables, PORTB = var, Abdul Malik Khan, 2006/04/22
- Re: [avr-gcc-list] Using PORTB with variables, PORTB = var, Lars Noschinski, 2006/04/22
- Re: [avr-gcc-list] Using PORTB with variables, PORTB = var, unauthorized, 2006/04/22
- Re: [avr-gcc-list] Using PORTB with variables, PORTB = var, Steve Meliza, 2006/04/22
- Re: [avr-gcc-list] Using PORTB with variables, PORTB = var,
Kevin Cozens <=
- Re: [avr-gcc-list] Using PORTB with variables, PORTB = var, Ned Konz, 2006/04/22