![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 4 túi
Tham gia ngày: Jul 2008
Bài gửi: 61
: |
Bit Va Byte
cac bac cho e hoi ti.
E co 400 bien kieu int1 va e muon ghep no thanh 50 bien kieu int thi lam the nao nhi? thanks! Bạn phải gõ có dấu, mình đã nhắc ở đây, có vẻ như bạn ko đọc: http://www.picvietnam.com/forum/show...8&postcount=68 thay đổi nội dung bởi: bien_van_khat, 10-07-2009 lúc 05:04 PM. |
![]() |
![]() |
![]() |
#2 |
Đệ tử 2 túi
Tham gia ngày: Dec 2008
Bài gửi: 33
: |
Theo ý kiến của mình thì :
Nếu bạn dùng CCS thì int1 là biến 1 bit,vậy phải cần dùng 50 biến int8 (8 bit) để ghép : Code:
int1 T[]; (T là tập hợp giá trị biến 1 bit cần ghép) int8 k[] = {0x00,...,0x00};(K là tập hợp giá trị biến 8 bit sau khi ghép ) i = 0; j = 0; bước 1 : k[j] = k[j] + T[i]; i tăng 1 đơn vị; k[j] = k[j] <<1; nếu i < 8 quay lại bước 1; nếu i > =8 i = 0; j tăng 1 đơn vị nếu j >= 8,nhảy đến END j < 8 ,quay lại bước 1 END//kết thúc |
![]() |
![]() |
![]() |
#3 | |
Đệ tử 4 túi
Tham gia ngày: Jul 2008
Bài gửi: 61
: |
Trích:
co j mong anh e chi ju[. thanks! Nội quy diễn đàn bắt buộc phải gõ có dấu, mình đã nhắc ở đây, có vẻ như bạn ko đọc: http://www.picvietnam.com/forum/show...8&postcount=68 thay đổi nội dung bởi: bien_van_khat, 10-07-2009 lúc 05:04 PM. |
|
![]() |
![]() |
![]() |
#4 |
Đệ tử 7 túi
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
: |
"10us đọc giá trị" thời gian đâu để PIC làm việc # nữa ta
|
![]() |
![]() |
![]() |
#5 | |
Đệ tử 4 túi
Tham gia ngày: Jul 2008
Bài gửi: 61
: |
Trích:
|
|
![]() |
![]() |
![]() |
#6 |
Đệ tử 4 túi
Tham gia ngày: Jul 2008
Bài gửi: 61
: |
|
![]() |
![]() |
![]() |
#7 | |
Đệ tử 4 túi
Tham gia ngày: Jul 2008
Bài gửi: 61
: |
Trích:
|
|
![]() |
![]() |
![]() |
#8 | |
Đệ tử 4 túi
Tham gia ngày: Aug 2008
Bài gửi: 89
: |
![]() Trích:
Code:
... #define BITS_COUNT 400 int16 count=0; // Bat dau tai vi tri byte 0 int8 buff[BITS_COUNT/8]; // Dung mat 50 Bytes .... void SetBitData(int1 value) // Goi ham moi 10us de luu gia tri cua bit doc duoc { // Gan lan luot tung bit (13 bits cao xac dinh byte va 3 bits thap xac dinh bit) if(value==1) buff[count>>3]|=(1<<(count&0x07)); else buff[count>>3]&=(~(1<<(count&0x07))); if(count++==BITS_COUNT){ // Nhan du 400 bits va thuc hien truyen du lieu 50 bytes ve may tinh count=0; // Reset lai ve vi tri byte 0 } } ...
__________________
Quang báo RG/RGB 6/8/12/16 bits màu Phone No: 0905.034.086 Email: lmquyen@gmail.com thay đổi nội dung bởi: cskiller, 11-07-2009 lúc 01:19 AM. |
|
![]() |
![]() |
![]() |
#9 |
Đệ tử 4 túi
Tham gia ngày: Aug 2008
Bài gửi: 89
: |
Tôi khuyên bạn nên collect 256 bits là tối ưu nhất thay vì 400 để đảm bảo với thời gian 10us, vì với 256 bits có thể dùng 1 byte để count và việc shift bit có thời gian thực thi nhanh hơn rất nhiều:
Code:
... #define BITS_COUNT 256 int8 count=0; // Bat dau tai vi tri byte 0 int8 buff[BITS_COUNT/8]; // Dung mat 32 Bytes .... void SetBitData(int1 value) // Goi ham moi 10us de luu gia tri cua bit doc duoc { // Gan lan luot tung bit (5 bits cao xac dinh byte va 3 bits thap xac dinh bit) if(value==1) buff[count>>3]|=(1<<(count&0x07)); else buff[count>>3]&=(~(1<<(count&0x07))); if(++count==0){ // Nhan du 256 bits va thuc hien truyen du lieu 32 bytes ve may tinh // Khong can reset count ve 0 vi tu dong tran so 1 byte } } ...
__________________
Quang báo RG/RGB 6/8/12/16 bits màu Phone No: 0905.034.086 Email: lmquyen@gmail.com thay đổi nội dung bởi: cskiller, 11-07-2009 lúc 02:58 PM. |
![]() |
![]() |
![]() |
#10 |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Cách đơn giản nhất là dùng hàm shift_right, shift_left của CCS.
Tuy nhiên lúc này bạn phải khai báo mảng chứa dữ liệu của bạn kiểu char. Do đó, số lượng bit tối đa có thể dịch phụ thuộc vào độ lớn mảng mà CCS cho phép. |
![]() |
![]() |
![]() |
#11 | |
Đệ tử 4 túi
Tham gia ngày: Jul 2008
Bài gửi: 61
: |
Trích:
|
|
![]() |
![]() |
![]() |
#12 |
Đệ tử 6 túi
Tham gia ngày: Mar 2007
Bài gửi: 150
: |
Theo tôi thì thế này : mỗi 10us bạn đọc giá trị 1 lần bạn dịch bít đó vào biến x(kiểu byte) , sau 8 lần thì ghi lưu biến x đó vào byte thứ 1 , cứ thế mà tiếp tục đến byte thứ 50. Như vậy bạn chỉ tốn khoản 51 byte mà thôi . Kô cần phải khai báo mãng 400 bit đâu .
Trong CCS có hỗ trợ cho bạn 2 hàm dịch bit (shift_left và shift_right) ví dụ : đọc 8 bit từ ngõ vào B1 (mỗi lần đọc cách nhau là 10us) Code:
unsigned int x,i; for(i=0;i<8;i++) { shift_left(x,1,input(pin_B1) delay_us(9); }
__________________
_________________________________________________ Le Trung Duc Industry Research & Application Center NTT Institute of Hi_technolog ltduc@ntt.edu.vn leduc_cktd@yahoo.com.vn http://www.nttc.edu.vn CNC DIY : http://quangcaosanpham.com/shop/driverservo 0909300332 |
![]() |
![]() |
![]() |
|
|