CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

problem with shift_left.....

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
John Morley
Guest







problem with shift_left.....
PostPosted: Mon Jun 23, 2003 11:19 am     Reply with quote

Hi all,

Compiler version: 3.162

I am using shift_left to clock 8 bits of data out of a peripheral device, MSB first. The problem is that when I get the 8th bit, the variable that the data is going into rolls over to a negative number. I seem to be doing it exactly the way numerous examples in the manual do it, but mine has this undesired behaviour. BTW, the data variable is define as:

int data;

I show the routine I am having a problem with first, and then the output of a printf to show what's going on. As you can see from the output, all seems to be well until the 8th bit....


for(ctr = 1 ; ctr <= 8 ; ++ctr)
{
output_high(SCLK); // Clock to high
delay_us(20);
shift_left(&data,1,input(SDATA));
output_low(SCLK); // Clock to low
printf("ctr, bit, data: : \%i \%i \%i\n\r", ctr,input(SDATA), data);
}
output_low(SDATA); // Acknowledge the 1st byte to be driven by the SHT1x
output_high(SCLK);
delay_us(20);
output_low(SCLK);


Output:

ctr, bit, data: : 1 1 1
ctr, bit, data: : 2 1 3
ctr, bit, data: : 3 1 7
ctr, bit, data: : 4 0 14
ctr, bit, data: : 5 0 28
ctr, bit, data: : 6 0 56
ctr, bit, data: : 7 0 112
ctr, bit, data: : 8 1 -32

Thanks for looking!

John
___________________________
This message was ported from CCS's old forum
Original Post ID: 144515473
Neutone



Joined: 08 Sep 2003
Posts: 839
Location: Houston

View user's profile Send private message

Re: problem with shift_left.....
PostPosted: Mon Jun 23, 2003 11:25 am     Reply with quote

:=Hi all,
:=
:=Compiler version: 3.162
:=
:=I am using shift_left to clock 8 bits of data out of a peripheral device, MSB first. The problem is that when I get the 8th bit, the variable that the data is going into rolls over to a negative number. I seem to be doing it exactly the way numerous examples in the manual do it, but mine has this undesired behaviour. BTW, the data variable is define as:
:=
:=int data;
:=
:=I show the routine I am having a problem with first, and then the output of a printf to show what's going on. As you can see from the output, all seems to be well until the 8th bit....
:=
:=
:= for(ctr = 1 ; ctr <= 8 ; ++ctr)
:= {
:= output_high(SCLK); // Clock to high
:= delay_us(20);
:= shift_left(&data,1,input(SDATA));
:= output_low(SCLK); // Clock to low
:= printf("ctr, bit, data: : \%i \%i \%i\n\r", ctr,input(SDATA), data);
:= }
:= output_low(SDATA); // Acknowledge the 1st byte to be driven by the SHT1x
:= output_high(SCLK);
:= delay_us(20);
:= output_low(SCLK);
:=
:=
:=Output:
:=
:=ctr, bit, data: : 1 1 1
:=ctr, bit, data: : 2 1 3
:=ctr, bit, data: : 3 1 7
:=ctr, bit, data: : 4 0 14
:=ctr, bit, data: : 5 0 28
:=ctr, bit, data: : 6 0 56
:=ctr, bit, data: : 7 0 112
:=ctr, bit, data: : 8 1 -32
:=
:=Thanks for looking!
:=
:=John

So the printf function is showing a signed interger instead of an unsigned interger? Verify the printf function call is formatted correctly. If you were shifting in a signed byte it worked fine.
___________________________
This message was ported from CCS's old forum
Original Post ID: 144515475
Sherpa Doug
Guest







Re: problem with shift_left.....
PostPosted: Mon Jun 23, 2003 12:24 pm     Reply with quote

It looks like a printf problem. Try printing the result in hex instead of decimal to see what the actual bits are.

:=Hi all,
:=
:=Compiler version: 3.162
:=
:=I am using shift_left to clock 8 bits of data out of a peripheral device, MSB first. The problem is that when I get the 8th bit, the variable that the data is going into rolls over to a negative number. I seem to be doing it exactly the way numerous examples in the manual do it, but mine has this undesired behaviour. BTW, the data variable is define as:
:=
:=int data;
:=
:=I show the routine I am having a problem with first, and then the output of a printf to show what's going on. As you can see from the output, all seems to be well until the 8th bit....
:=
:=
:= for(ctr = 1 ; ctr <= 8 ; ++ctr)
:= {
:= output_high(SCLK); // Clock to high
:= delay_us(20);
:= shift_left(&data,1,input(SDATA));
:= output_low(SCLK); // Clock to low
:= printf("ctr, bit, data: : \%i \%i \%i\n\r", ctr,input(SDATA), data);
:= }
:= output_low(SDATA); // Acknowledge the 1st byte to be driven by the SHT1x
:= output_high(SCLK);
:= delay_us(20);
:= output_low(SCLK);
:=
:=
:=Output:
:=
:=ctr, bit, data: : 1 1 1
:=ctr, bit, data: : 2 1 3
:=ctr, bit, data: : 3 1 7
:=ctr, bit, data: : 4 0 14
:=ctr, bit, data: : 5 0 28
:=ctr, bit, data: : 6 0 56
:=ctr, bit, data: : 7 0 112
:=ctr, bit, data: : 8 1 -32
:=
:=Thanks for looking!
:=
:=John
___________________________
This message was ported from CCS's old forum
Original Post ID: 144515478
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group