PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 11-04-2008, 02:04 AM   #1
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Như vậy có lẽ hàm trabang() của bạn có vấn đề. Thực ra để chuyển dữ liệu binary thành một chuỗi để hiển thị thì không cần làm cầu kỳ như bạn.

Bạn chỉ cần khai báo một bảng mặt nạ như sau:
Code:
byte const mask[8] = {1, 2, 4, 8, 16, 32, 64, 128};
Sau đó trong hàm trabang() (hay có thể đổi tên thành bin2ascii() cho chính xác hơn), bạn chỉ cần thực hiện:
Code:
for (i=0; i<=8; i++)
	{
		if (x & mask[i]) a[i] = '1'; else a[i] = '0';
	}
Như vậy là mảng a[] sẽ chứa biểu diễn ASCII của số nhị phân x. Có lẽ bạn cần khai báo lại thành char a[8] cho thích hợp với đoạn code trên.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-04-2008, 09:20 PM   #2
kimhuynguyen
Đệ tử 3 túi
 
Tham gia ngày: Nov 2007
Nơi Cư Ngụ: Vietnam
Bài gửi: 48
:
Trích:
Nguyên văn bởi namqn View Post
Như vậy có lẽ hàm trabang() của bạn có vấn đề. Thực ra để chuyển dữ liệu binary thành một chuỗi để hiển thị thì không cần làm cầu kỳ như bạn.

Bạn chỉ cần khai báo một bảng mặt nạ như sau:
Code:
byte const mask[8] = {1, 2, 4, 8, 16, 32, 64, 128};
Sau đó trong hàm trabang() (hay có thể đổi tên thành bin2ascii() cho chính xác hơn), bạn chỉ cần thực hiện:
Code:
for (i=0; i<=8; i++)
	{
		if (x & mask[i]) a[i] = '1'; else a[i] = '0';
	}
Như vậy là mảng a[] sẽ chứa biểu diễn ASCII của số nhị phân x. Có lẽ bạn cần khai báo lại thành char a[8] cho thích hợp với đoạn code trên.

Thân,

Xin chào,

namqn xem lại có được không:
for (i=0; i<=8; i++)... --> i = 0, 1, 2, 3, 4, 5, 6, 7, 8 --> 9 bits

đúng ra phải là:
for (i=0; i<8; i++)

Và nữa, đoạn code trên sẽ tạo chuỗi có LSB trước MSB(?)


Có thể thực hiện đơn giản hơn như sau không:
Code:
for (i=0; i<8; i++)
	{
		if (x & (0x80 shr i)) a[i] = '1'; else a[i] = '0';
	}
không cần phải lưu bảng tra.
__________________
More friends more foods

thay đổi nội dung bởi: kimhuynguyen, 17-04-2008 lúc 09:44 PM. Lý do: Sửa sai lỗi username namqn
kimhuynguyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-04-2008, 09:37 PM   #3
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Đúng vậy, for (i=0; i<8; i++) thì mới đúng. Tôi đã không kiểm tra cận.

Code đúng là tạo ra LSB nằm trước MSB, nhưng có thể in MSB trước hay sau đều được, tùy vào đoạn code in dữ liệu thôi. Tôi chỉ gợi ý cách giải quyết yêu cầu của thuật toán, còn thuật toán là do tác giả chọn.

Việc chọn lựa giữa
Code:
if (x & (0x80 shr i)) a[i] = '1'; else a[i] = '0';

Code:
if (x & mask[i]) a[i] = '1'; else a[i] = '0';
còn tùy theo PIC được dùng. Nếu PIC không có lệnh dịch nhiều bit một lúc (PIC16F877A rơi vào trường hợp này) thì các lệnh dịch với i tăng dần sẽ kém hiệu quả hơn lệnh tra bảng. Tất nhiên dùng bảng thì sẽ tốn thêm 8 word cho bảng, nhưng chưa hẳn mã máy cho lệnh dịch sinh ra đã ngắn hơn mã máy cho lệnh tra bảng. Những điều này để cho người dùng CCS C đánh giá, còn tôi không dùng CCS C nên không đánh giá được.

Bạn đã đánh sai username của tôi.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 03:05 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam