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 nhathung1101Muốn đặt gì thì cũng phải có thông tin cơ bản. Việc nhỏ thế này mà phải dấu giếm thì người lớn không thèm làm đâu.
Cho bạn 3 ngày, không là sẽ xóa.-
Channel: Đặt hàng
Hôm qua, 22:02 -
-
Trả lời cho Hỏi cách điều chế xungbởi nhathung1101Schmit Trigger là chuẩn với điều kiện rise > 0,8V.
Bí thì dùng vi với tích gì đó, miễn đừng nói phân kẻo chó ở đây lại sủa nhặng.-
Channel: Kỹ thuật điện tử tương tự
Hôm qua, 21:57 -
-
bởi trungautMình cần đặt hàng thiết kế chế tạo mạch nghịch lưu 3 pha để cài đặt các thuật toán điều khiển động cơ FOC, DTC, ... Xin liên hệ trungaut@gmail.com để bàn chi tiết. Xin cảm ơn diễn dàn đăng tin!
-
Channel: Đặt hàng
Hôm qua, 14:27 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi tuyennhanCách ly dây điện vào , bộ nguồn và đèn khỏi khung xe thì có rò thật cũng không lo bị giật .
-
Channel: Điện tử dành cho người mới bắt đầu
21-12-2024, 08:56 -
-
Trả lời cho Hỏi cách điều chế xungbởi thetungBạn cho qua cái Tờ ri gơ Sờ mít ấy ......
-
Channel: Kỹ thuật điện tử tương tự
16-12-2024, 11:26 -
-
Trả lời cho Hỏi cách điều chế xungbởi nguyendinhvanCó gì mà khó ?
Răn cưa vuông đây
...-
Channel: Kỹ thuật điện tử tương tự
15-12-2024, 23:36 -
-
Trả lời cho hỏi về tụ điệnbởi ndp62Chữ " VENT" không phải là tên hãng sx tụ đâu ,vó thế là 1 ký hiệu liên quan tụ lowesr ?
-
Channel: Điện thanh
15-12-2024, 18:24 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi bqvietTrừ trường hợp công suất (rất) thấp, hầu như tất cả các loại nguồn xung thông thường đều có tụ nhỏ 1 - 10nF nối giữa sơ cấp và thứ cấp, để thoát nhiễu và để chống hiện tượng tương tự tĩnh điện. Vụ này đã thảo luận vài...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 22:02 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi namlangnhoE thử 3 cái nguồn nó đều giống nhau. Nên e làm tiếp địa luôn.
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 19:58 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi mèomướpDạ chú sắm con át chống giật và thay nguồn tổ ong khác cho an toàn ạ. Đa phần nguồn xung đều xả nhiễu của bên thứ cấp về điện lưới qua 1 con tụ nên cảm giác tê sẽ khó xác định rõ ràng là do rò điện hay là nó vốn vậy...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 18:51 -
Comment