Code:For i=0 to $0F PORTB= i next
Code:For i=0 to $0F PORTB= i next
Last edited by mister_e; - 18th October 2006 at 14:15.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Thanks everyone for the response.
Well sayzer gave me the kick-start!
What I was needed was to keep the upper bits while setting or reseting the lower according to the counter in the for - next loop. This is done first by clearing the lower bits, then OR-ing with the new value. I was too tired to see it immediatly. But, thanks for the try...
The new code should look like this:
for i=240 to 250
temp=portb
temp=temp & $F0
temp=temp|i
portb=temp
pause 1000
next i
Thanks again,
Ioannis
if i hold PORTB.7=0Code:DEFINE OSC 20 DEFINE LOADER_USED 1 RCSTA = $90 ' Enable serial port & continuous receive TXSTA = $20 ' Enable transmit, BRGH = 0 SPBRG = 64 ' 19200 Baud @ 0.16% SPBRGH = 0 BAUDCON.3 = 1 ' Enable 16 bit baudrate generator PORTB=0 TRISB=%11110000 i var byte Temp var byte Hserout ["***** Waiting PORTB.7 = 0 *****",13,10] While PORTB.7=1 : wend hserout ["------------------------Start",13,10] for i = 0 to 15 PORTB=i Temp=PORTB hserout ["PORTB=",bin8 temp,13,10] next hserout ["------------------------Stop",13,10] Spin: goto Spin
<img src="http://www.picbasic.co.uk/forum/attachment.php?attachmentid=1137&stc=1&d=116117525 3">
Last edited by mister_e; - 18th October 2006 at 14:41.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
looks like the attachement didn't work...
this is the copy/paste
Code:***** Waiting PORTB.7 = 0 ***** ------------------------Start PORTB=01110000 PORTB=01110001 PORTB=01110010 PORTB=01110011 PORTB=01110100 PORTB=01110101 PORTB=01110110 PORTB=01110111 PORTB=01111000 PORTB=01111001 PORTB=01111010 PORTB=01111011 PORTB=01111100 PORTB=01111101 PORTB=01111110 PORTB=01111111 ------------------------Stop
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Steve's does it... but if you do not want to fiddle with the upper nibble latch
EDIT - Wow - a lot happens in 10 minutes - I was replying to Steve's #5 and 3 more got in there! :-)Code:For i=0 to $0F temp = PORTB & $F0 ' keep upper nibble PORTB= temp | i ' keep upper, set lower to i next
and attachments did not work for me yesterday - I got corrupt error when tried to open
Last edited by paul borgmeier; - 18th October 2006 at 14:50.
Paul Borgmeier
Salt Lake City, UT
USA
__________________
Thanks Paul and Steve.
The solution I was expressing at #6 was the one Paul was describing. That is the solution. Steve clever but you do not keep the upper bits.
I have not checked if the interrupt flag for the 4:7 of port b is affected if one is trying to write on input bits of the port. That renains to be checked.
Thanks again,
Ioannis
Why not using Grandpa's traditional way?
Code:i VAR BYTE for i=0 to 15 PORTB.0 = i.0 PORTB.1 = i.1 PORTB.2 = i.2 PORTB.3 = i.3 NEXT i
mister_e's #5 code is indeed short. Now it keeps upper ones unchanged.
Last edited by sayzer; - 19th October 2006 at 04:23.
"If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte
As the pin are set to input.... if you write to them, the result stay unchanged... as i posted. Not sure with the interrupt.
Why do you think that PORTB.7=1 or PORTB.7=0 no nothing if the TRIS.7 is not set to 0?
One thing is sure, you will clear the RBIF bit just by reading PORTB, so the above solution using Temp=PORTB will certainely cause some strange interrupt behaviour (at least you will miss some). All in the datasheet in INTCON register description.
Last edited by mister_e; - 19th October 2006 at 01:33.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Steve, yes I know reading the port, RBIF will get reset. But what about writing to the port if the upper nibble is input? Will the write cause Interrupt?
I can tolerate to loose a few while writing to the port. But producing Int's for this reason is not welcome.
Sayzer, nice idea the old recipe. I am just looking too shorten my code. I 'll see which method is shortest.
Thanks,
Ioannis
Last edited by Ioannis; - 19th October 2006 at 07:27.
Both “Temp = PortB” and “PortB = i” read the Port . Both allow for a chance of missing a change and therefore an interrupt. Steve is right in that preserving the state of the upper four pins does not appear necessary since it does not change the input values when the port is written – just the latched values should the pin directions be changed from inputs to outputs. Go with #5.
Paul Borgmeier
Salt Lake City, UT
USA
__________________
Bookmarks