|
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 |
01-01-2010, 03:54 PM | #1 |
Đệ tử 1 túi
Tham gia ngày: Jan 2009
Bài gửi: 17
: |
Khai báo biến 3 byte, giúp e với!
Anh chị ơi, e đang tập viết union và struct.
E khai báo một kiểu union Xreg (2 struct Xtemp và Xbit, cách sắp xếp struct e có vẽ lại trong hình kèm theo). Rồi, e viết chương trình Shift để dịch trái 1 biến 3 byte (kiểu Xreg). Trong chương trình chính, e cho xuất giá trị bit MSB của biến 3 byte (Tx_bit) ra pin D.7, xoay biến 3 byte bằng hàm Shift, delay để tạo chớp tắt một vài lần. Nhưng, không thấy động tĩnh gì cả, cả 3 ngày rồi e tìm hoài hok biết lỗi chỗ nào, các anh chị thương tình xem giùm e đoạn code với. Cảm ơn anh chị lắm lắm. //PIC16f877A, crystal 8MHz, test kieu union //MikroC Pro V3.2 union Xreg // Kieu du lieu cua cac thanh ghi X10 { struct Xbit //TX_BIT + x5x + TEMp + x15x + RX_BIT { rx_bit :1; unsigned char none ; //skip unsigned:7; //skip temp :2; //temp dung ket noi temp0 va temp1 khi dich trai unsigned:5; tx_bit:1; }Xbit; struct Xtemp //TEMP1 + TEMP0 :dung nap du lieu va dich bit { unsigned int temp0; unsigned char temp1; }Xtemp; }; union Reg8 //Kieu du lieu reg8 dung truy xuat tung bit thanh ghi 8bit { unsigned char _byte; struct _bit { unsigned char b0:1; unsigned char b1:1; unsigned char b2:1; unsigned char b3:1; unsigned char b4:1; unsigned char b5:1; unsigned char b6:1; unsigned char b7:1; }_bit; }; void Shift(union Xreg *reg ) //Dich trai (1 bit) thanh ghi 3 bytes kieu Xreg { reg -> Xtemp.temp1 <<= 1; reg -> Xbit.temp <<= 1; reg -> Xtemp.temp0 <<= 1; } union Xreg *a; union Reg8 *b; void main() { TRISD = 0; a=0x20; b=0x08;//port D a->Xtemp.temp0 = 0xAAAA; a->Xtemp.temp1 = 0xAA; //*a = 0b 1010 1010 1010 1010 1010 1010 b->_byte = 0x00; //portD = 0b 0000 0001 while (1) { b->_bit.b7 = a->Xbit.tx_bit; //D.7 = Tx_bit Shift(a); //Xoay thanh ghi 3 byte Delay_ms(500); } } thay đổi nội dung bởi: minhcuong1122, 01-01-2010 lúc 04:10 PM. |
|
|