Hi, Ioannis
And what about your I/O "defines" ( TRISB = ??? ) did you declare the input and output pins ???
Or use individual "HIGH" 's .or "LOW" 's..
Just an idea ...
Alain
Hi, Ioannis
And what about your I/O "defines" ( TRISB = ??? ) did you declare the input and output pins ???
Or use individual "HIGH" 's .or "LOW" 's..
Just an idea ...
Alain
************************************************** ***********************
Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
************************************************** ***********************
IF there is the word "Problem" in your question ...
certainly the answer is " RTFM " or " RTFDataSheet " !!!
*****************************************
I think I found the problem.
Here it is.
Code:1st i=240 11110000 PortB 11110000 'an example. Temp=PORTB 11110000 PORTB=Temp & i 11110000 2nd i=241 11110001 PORTB 11110000 Temp=PORTB 11110000 PORTB=Temp & i 11110000 3rd i=242 11110010 PORTB 11110000 Temp=PORTB 11110000 PORTB=Temp & i 11110000 . .. ... Etc..
The first time you get i=240 in decimal. Which is 11110000.
Then, whatever you "bitwise AND" it with, you will always get 11110000.
Thus, after 240, you will always have 11110000 because each time loop increments, you assign the previous PORTB value to the temp variable.
-------------------
Last edited by sayzer; - 18th October 2006 at 14:13.
"If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte
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.
Bookmarks