PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Giao tiếp USB, CAN, I2C, SPI, USART... (http://www.picvietnam.com/forum/forumdisplay.php?f=45)
-   -   giúp em về Htech C (http://www.picvietnam.com/forum/showthread.php?t=32292)

phanhuycuong290 21-05-2013 03:30 PM

giúp em về Htech C
 
em đang viết chương trình I2C trên MPLAB Htech C, em gặp 1 vấn đề là đăt 1 biến có thể truy xuất từng bit

bên keilC cho 8051 có dạng như sau
unsigned char bdata DATA;
sbit DATA0 = DATA^0;
sbit DATA7 = DATA^7;

bên Htech C nó không hiểu mấy bác ơi
muốn đặt biến dạng này thì làm thế nào vậy

bác nào rành bên Htech C giúp với

namqn 21-05-2013 04:29 PM

Kỹ thuật thao tác chuẩn trong C (không phụ thuộc trình dịch C đang sử dụng):

1. Để set bit k của biến v thành 1:
Code:

v = v | (1 << k);
2. Để clear bit k của biến v thành 0:
Code:

v = v & ~(1 << k);
Bạn nên tìm một tài liệu C primer nào đó để đọc thêm, ví dụ (nhờ Google):

http://en.wikibooks.org/wiki/A_Little_C_Primer
http://www.vectorsite.net/tscpp.html

Thân,

pucapuca123 21-05-2013 06:28 PM

Trích:

Nguyên văn bởi namqn (Post 81942)
Kỹ thuật thao tác chuẩn trong C (không phụ thuộc trình dịch C đang sử dụng):

1. Để set bit k của biến v thành 1:
Code:

v = v | (1 << k);
2. Để clear bit k của biến v thành 0:
Code:

v = v & ~(1 << k);
Bạn nên tìm một tài liệu C primer nào đó để đọc thêm, ví dụ (nhờ Google):

http://en.wikibooks.org/wiki/A_Little_C_Primer
http://www.vectorsite.net/tscpp.html

Thân,

tiện thể bác cho em hỏi luôn cách ghép 8 bít lại với nhau lại bằng cách nào là nhanh nhất.
ví dụ mình có các biến sau.

a0=1;
a1=1;
a2=1;
a3=1;
a4=0;
a5=0;
a6=0;
a7=0;

làm sao để ghép được thành 1 byte : b= a0a1a2a3a4a5a6a7=0b00001111;
và có cách nào sử dụng các biến a0,a1...a7 như các bít trong biến b ( cái này cho tiết kiệm ram) chứ mình toàn khai báo unsigned char a0,a1...a7. tốn ram chết đi được,
cám ơn các bác!

habach 22-03-2014 05:32 PM

Trích:

Nguyên văn bởi pucapuca123 (Post 81946)
tiện thể bác cho em hỏi luôn cách ghép 8 bít lại với nhau lại bằng cách nào là nhanh nhất.
ví dụ mình có các biến sau.

a0=1;
a1=1;
a2=1;
a3=1;
a4=0;
a5=0;
a6=0;
a7=0;

làm sao để ghép được thành 1 byte : b= a0a1a2a3a4a5a6a7=0b00001111;
và có cách nào sử dụng các biến a0,a1...a7 như các bít trong biến b ( cái này cho tiết kiệm ram) chứ mình toàn khai báo unsigned char a0,a1...a7. tốn ram chết đi được,
cám ơn các bác!

Đơn giản.

Code:

typedef union {
struct {
unsigned a0:1;
unsigned a1:1;
unsigned a2:1;
unsigned a3:1;
unsigned a4:1;
unsigned a5:1;
unsigned a6:1;
unsigned a7:1;
}
struct {
unsigned ax:8;
}
}myport;

myport A;

A.ax = 0b00001111;



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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam