Bác nào biết cách cắt một số 16bit thành 2 số 8bit chứa byte cao và byte thấp của số 16bit bẳng ngôn nhữ C chỉ em fát . Em xin đa tạ very much
Thông báo
Collapse
No announcement yet.
Help...Tách số 16bit thành 2byte(cao và thấp) dùng C
Collapse
X
-
ví dụ có khai báo thế này
unsigned int k;
unsigned char i,j,n,m;
j=k&0xff;//lấy byte thấp
i=(k>>8)&0xff;//lấy byte cao
hoặc là
n=8;
while(n--){k<<=1;m=c;i=(i<<1)|m;}//byte cao
n=8;
while(n--){k<<=1;m=c;j=(j<<1)|m;}//byte thấp
(C:cờ nhớ)
còn có rất nhiều cách nữa,bạn tự tìm hiểu nhé, mình chỉ bất chợt nghĩ đến cách này thôiLast edited by saoxathu; 22-08-2008, 00:58.dientuvietnam.net
Comment
-
Nguyên văn bởi quoc_thaibk Xem bài viếtunion INT_TO_BYTE
{
unsigned int i;
unsigned char b[2];
};
union INT_TO_BYTE test;
test.i=<số 16bit mà bạn muốn>;
muốn lấy số 8 bit thì cứ test.b[0] hay .b[1]dientuvietnam.net
Comment
-
Chương trình:
#include <AT89x52.h>
#include <stdio.h>
char s8bitlow; // so 8 bit LOW
char s8bithi; //so 8 bit HIGH
int s16bit; //so 16 bit
void main(void){
puts("CHIA SO 16 BIT RA 2 SO 8 BIT");
s16bit=0xABCD;
s8bitlow=s16bit;
s8bithi=s16bit>>8;
printf("So 16 bit: %X >> Byte cao %BX byte thap: %BX", s16bit,s8bithi,s8bitlow);
while(1);
}
KQ:
Running ... !
CHIA SO 16 BIT RA 2 SO 8 BIT
So 16 bit: ABCD >> Byte cao AB byte thap: CD
Comment
-
Nguyên văn bởi hungnp Xem bài viếtnhư của quocthaibk là tuyệt chiêu rồi.
Comment
-
Cách của bạn digicom là đúng rồi. Thích thì có cách khác, so sánh xem cái nào tốn ít lệnh hơn thì dùng.
So_16_bit / 256 = Byte_cao
So_16_bit % 256 = Byte_thap (Phep chia lay phan du)Ethernet-RS232, PIC Webserver, RFID Reader
CallerID, Cảnh báo BTS, ...
0988006696
linhnc308@gmail.com
http://linhnc308.blogspot.com
Comment
-
Mình đã dùng timer(Ngại đọc asm) để kiểm tra xem giữa khai báo kiểu union để lấy byte cao và byte thấp kể cả lấy giá trị của một bit bất kỳ trong một byte so với cách lấy bằng phép chia, phép phần dư, phép dịch bít,AND,OR,... như thông thường vẫn dùng thì thấy dùng khai báo union chương trình chạy nhanh hơn hẳn. Mà nhìn chương trình cũng chuyên nghiệp hơn?
Comment
-
Nguyên văn bởi hungnp Xem bài viếtMình đã dùng timer(Ngại đọc asm) để kiểm tra xem giữa khai báo kiểu union để lấy byte cao và byte thấp kể cả lấy giá trị của một bit bất kỳ trong một byte so với cách lấy bằng phép chia, phép phần dư, phép dịch bít,AND,OR,... như thông thường vẫn dùng thì thấy dùng khai báo union chương trình chạy nhanh hơn hẳn. Mà nhìn chương trình cũng chuyên nghiệp hơn?Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.
Comment
-
PHP Code:unsigned int test = 0xABCD;
unsigned char idata *a, byte_cao, byte_thap;
a = &test;
byte_cao = *a;
byte_thap = *(a+1);
Thực chất trong C, người ta thường dùng cách như saoxathu dùng
PHP Code:j=k&0xff;//lấy byte thấp
i=(k>>8)&0xff;//lấy byte cao
Diễn đàn Vi điều khiển:
Comment
-
hê hê, các bác góp ý thật là rôm rả. Em xin vote cho code (cách) của quocthai huynh. Rất ngắn mà dễ quản lý, chỉ cần khai báo một lần xài hoài, dùng cách dịch bit (<<,>>) cũng được nhưng hình như có vẻ không mang tính hệ thống bằng dùng kiểu union. E cũng mò mò tìm ra cách tương tự dùng union kết hợp struct có điều dài hơn của anh quocthai chút (hơn 1 lệnh thôi) (rút kinh nghiệm sau vậy..). Cảm ơn các huynh đã góp ý, chúc các huynh thành đạt VÀ EM LẠI CÓ THÊM MỘT CÂU HỎI MỚI NỮA NÈ:
-trong 2 cách khai báo sau có gì khác nhau không:
+cách 1:
************
typedef union split16to8
{
unsigned short i;
unsigned char lo;
unsigned char hi;
};
************
+cách 2:
************
typedef union
{
unsigned short i;
unsigned char lo;
unsigned char hi;
}split16to8;
************
+++nếu có giải thích giùm đệ chỗ khác đó
+++Nếu không thì tại sao khi đệ thêm câu lệnh này tiếp theo thì cách một báo lỗi còn cách 2 thì ko:
split16to8 number16bit;
----------HẾT------------------
TB:các bác giải thích thêm giùm em chỗ này cái, em ko thấy có kiểu khai báo này trong giáo trình C: union INT_TO_BYTE test;Last edited by apple; 23-08-2008, 01:53.Mấy ai định nghĩa được tình yêu.
Có gì đâu một buổi chiều.
Kề dao lên cổ yêu hay chết .
Gật đầu cái rụp thế là yêu.
--------
Apple
Comment
-
Nguyên văn bởi apple Xem bài viết
TB:các bác giải thích thêm giùm em chỗ này cái, em ko thấy có kiểu khai báo này trong giáo trình C: union INT_TO_BYTE test;
Còn mấy cái typedef thì nó chuyển qua lại thấy lằng nhằng quá hok muốn nhớ.
Cậu cứ mở quyển lập trình C của Quách Tuấn Ngọc là có ngay sự phân biệt rõ ràng đỡ mấy cái lằng nhằng hok đáng mất time đấy.
Sông dài, Thuyền lớn, Biển rộng bao la.
Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.
Comment
-
Nguyên văn bởi linhnc308 Xem bài viếtCách của bạn digicom là đúng rồi. Thích thì có cách khác, so sánh xem cái nào tốn ít lệnh hơn thì dùng.
So_16_bit / 256 = Byte_cao
So_16_bit % 256 = Byte_thap (Phep chia lay phan du)
So sánh với dịch bit thì dịch 8 lần chỉ tốn 3 chu kì máy (dsPIC hen còn cái khác thì tùy)
Sông dài, Thuyền lớn, Biển rộng bao la.
Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.
Comment
Bài viết mới nhất
Collapse
-
bởi bqvietServo cuối cùng vẫn chỉ là điều chỉnh tốc độ và đọc phản hồi vị trí
Qua cổng song song LPT cổ
https://www.electronicsforu.com/elec...eed-controller
Qua cổng USB - xem thêm đám FT232RL-
Channel: Điện tử công nghiệp
hôm nay, 15:56 -
-
bởi thiennam0703Em đang tìm hiểu cách xây dựng chương trình điều khiển động cơ Servo Yaskawa bằng máy tính tuy nhiên khi tìm kiếm trên mạng các hướng dẫn thì thường là điều khiển bằng vi điều khiển hoặc điều khiển bằng PLC hay điều khiển động cơ...
-
Channel: Điện tử công nghiệp
hôm nay, 15:32 -
-
Trả lời cho Tổng hợp các thông tin về mạch nạp cho AVRbởi bacthoMình cũng bị như vậy mà chưa biết ở đâu
-
Channel: Vi điều khiển AVR
Hôm qua, 21:00 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi nhathung1101Câu trả lời là không dùng được.
Hai lớp dán mặt trước và mặt sau, gọi là film phân cực. Muốn hiểu rõ về nó thì chịu khó search nhé. Ở đây có rất nhiều chó cứ ngửi thấy phân là sủa nhặng, nên không giải thích nhiều....-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 16:20 -
-
Comment on Tổng hợp các thông tin về mạch nạp cho AVRbởi Memem
-
Channel: Vi điều khiển AVR
Hôm qua, 15:10 -
-
Trả lời cho Tổng hợp các thông tin về mạch nạp cho AVRbởi MememMọi người ơi cho em hỏi cái này ạ, hiện tại em đang làm btl về hiển thị giá trị nhiệt độ trên led 7 thanh sử dụng atmega16, code em chạy trên mô phỏng rất oke nhưng khi lắp qua mạch thực thì bị lỗi ở led đầu tiên bị lỗi như thế này...
-
Channel: Vi điều khiển AVR
Hôm qua, 15:10 -
-
bởi mantruongepuNhờ cả nhà tìm giúp mình thông tin IC này với, thấy ghi 943B W58BAL mà mình tìm mấy ngày nay không được, nó được đóng gói dạng TSSOP 8. Cám ơn cả nhà....
-
Channel: Điện tử dành cho người mới bắt đầu
20-11-2024, 14:40 -
-
bởi TherulCảm ơn bạn đã chia sẻ câu chuyện và quá trình phát triển sản phẩm của mình. Trước tiên, thật may mắn khi bạn vượt qua tai nạn và vẫn giữ được niềm đam mê cũng như khả năng sáng tạo trong lĩnh vực kỹ thuật. Việc bạn tiếp tục...
-
Channel: từ PIC tới dsPIC
20-11-2024, 07:20 -
-
Trả lời cho Em muốn hỏi mọi người về nguyên lý hoạt động, tần số của mạch công suất trong máy rửa siêu âm ạ.bởi nguyendinhvanBạn nên nghiên cứu cái chấn lưu đèn ống Compact fluorescent lamp hay đèn compact trước đã. Nó rẻ đỡ tốn kém.
Sau khi hiểu rõ rồi thì chuyển sang cái mạch này.
Ở cái chấn lưu, tần số của nó linh tinh lắm, tùy điện áp nguồn, tùy...-
Channel: Hỗ trợ học tập
19-11-2024, 22:44 -
-
bởi yname11 E có 1 laptop bị hỏng màn hình, e tháo ra thì thấy nó có 4 lớp , lớp ngoài cùng là 1 lớp nhựa rất mỏng màu hơi đen ( chắc là 1 loại film dán), tiếp theo là 1 lớp thủy tinh bị vỡ (màu đen) , đến 1 lớp thủy tinh trắng ( lớp này có...
-
Channel: Thiết bị điện tử cá nhân
18-11-2024, 19:12 -
Comment