PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

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

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
Prev Previous Post   Next Post Next
Old 01-01-2010, 03:54 PM   #1
minhcuong1122
Đệ tử 1 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 17
:
Smile 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.
minhcuong1122 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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à 08:37 PM.


Đượ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