PDA

View Full Version : Lại thắc mắc lệnh printf("%u",val_adc) , ADC 10 bit


phandinh
07-05-2009, 10:59 PM
Em đã làm dc giao tiếp ADC 8 bit gởi lên PC , bây giờ e đang làm 10 bit nhưng đang bí mong các bác chỉ giúp các thắc mắc sau:
#############thắc mắc 1 ##################
int16 val_adc ; //biến đọc 10 bit ADC
.....
val_adc = read_adc();
printf("%u",val_adc);// khi dịch thì chương trình báo lỗi " printf format type is invalid "
// nếu em khai báo " int val_adc; " thì không báo lỗi.
trong C thì int có kích thước là 2 byte. CCS thì int có kích thước 1 byte, int16 có kích thước 2 byte.Thực hư là thế nào ?
Vậy với yêu cầu đọc ADC 10 bit em khai báo " int16 val_adc ;" là đúng chứ ?
mà sao khi dịch thì bị báo lỗi như trên.
############ thắc mắc 2 ###################
Ví dụ: val_adc = 1023 ;
printf("%u",val_adc); // có phải sẽ gửi lần lượt gửi 1 ,0 , 2 , 3, không ?


Rất mong các bác chỉ giúp
thanks

thienthanhomenh
08-05-2009, 10:09 AM
bạn xem kỷ lại xem trong hàm printf("%u",val_adc) biến nhập vào (val_adc) là dạng biến ji theo mình nó là unsigned char trong ccs nó là unsigned int8 do bạn
biến nhập hiện tại bạn đua vào là int16 báo lổi là chính xác %u là cho u int8

chú ý là bạn nên khai báo chình xác unsigned int16
hoặc là signed int16 thì se dùng:
printf("%Lu",val_adc) hoặc printf("%Lu",val_adc)
xem bảng này nha
//=============
c
Character

s
String or character

u
Unsigned int

d
Signed int

Lu
Long unsigned int

Ld
Long signed int

x
Hex int (lower case)

X
Hex int (upper case)

Lx
Hex long int (lower case)

LX
Hex long int (upper case)

f
Float with truncated decimal

g
Float with rounded decimal

e
Float in exponential format

w
Unsigned int with decimal place inserted. Specify two numbers for n. The first is a total field width. The second is the desired number of decimal places.


//=============
>>Ví dụ: val_adc = 1023 ;
>>printf("%u",val_adc); // có phải sẽ gửi lần lượt gửi 1 ,0 , 2 , 3, >>không ?
theo mình là không ....

cskiller
08-05-2009, 10:45 AM
%u in số 8 bits không dấu
%Lu in số 16 bits không dấu


Ví dụ: val_adc = 1023 ;
printf("%u",val_adc); // có phải sẽ gửi lần lượt gửi 1 ,0 , 2 , 3, không ?


đang in số không dấu 8 bits -> kết quả là 255

cskiller
08-05-2009, 10:45 AM
%u in số 8 bits không dấu
%Lu in số 16 bits không dấu

phandinh
08-05-2009, 11:54 AM
A ! em làm dc rồi.Vui quá !!!!!!!!!!!!!!!!! Cảm ơn các bác nhiều
Thank u so much much

minhbien
27-11-2010, 05:41 AM
Cho em hỏi là lệnh printf này thực hiện trong bao lâu, em tìm hoài không thấy...cảm ơn các anh trước!

truongqt
26-11-2011, 10:56 PM
A ! em làm dc rồi.Vui quá !!!!!!!!!!!!!!!!! Cảm ơn các bác nhiều
Thank u so much much

Anh ơi cho em xin đoạn code đó anh nhé, em làm mãi mà không được. Em chân thành cảm ơn anh nhiều lắm.