View Single Post
Old 28-06-2010, 08:31 AM   #5
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
Trích:
Nguyên văn bởi sit_alone76816 View Post
Cảm ơn anh Nam!

Tất nhiên là khi em dùng timer1 thì em phải khai báo header của nó chứ ạ: include"timers.h"

Em chưa hiểu phần LATA là như thế nào, khi mình khai báo giả sử như là LATA=0 thì có khác gì so với câu khai báo PORTA=0 không vậy anh ? Em chỉ biết với câu PORTA=0:

- với PortA là ouput thì tất cả 8 pins của PORTA sẽ là mức 0, vậy lúc này giả sử em dùng câu lệnh : x=PORTAbits.RA0 + 1; nó có ok không anh ?

- Với PORTA là input: thì câu lệnh PORTA=0; có ý nghĩa gì không anh ?



Vậy ví dụ như em khai báo như sau :

unsigned int x;

rồi em cho : y = xbits.x1; ( y là bit 1 của x) câu lệnh này có được không anh, hay là em tự chế ra nhỉ ? Vậy có cách nào làm được câu lệnh đó ( y = xbits.x1; ), em phải thay thế biến x bằng thanh ghi nào cho thích hợp, để em có thể lấy từng bit của nó 1 cách dễ dàng hơn, linh động hơn. Giả sử em gọi thanh ghi đó là h (thanh ghi 16 bits) , và em muốn thực hiện dòng lệnh sau :

h ++;
x = hbits.h1;
z = hbits.h10;
PORTCbits.RC0 = hbits.h15;

Anh giúp em chuyển thành chương trinh trong C18 nha anh.

Chân thành cảm ơn anh !
Về phần LATA và PORTA, đã có nhiều bài viết trên diễn đàn (việc dùng LATx trong các PIC18 là để khắc phục hiện tượng read-modify-write, đã được nói đến nhiều lần trên diễn đàn, bạn hãy dùng công cụ tìm kiếm của diễn đàn).

Để truy xuất từng bit của một biến 16-bit, bạn hãy dùng kết hợp struct và union. Bạn có thể đọc chương 6 của tài liệu đính kèm trong luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=3151

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