Trích:
Nguyên văn bởi sit_alone76816
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,