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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 28-06-2010, 12:15 AM   #1
sit_alone76816
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 38
:
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 ?

Trích:
Nguyên văn bởi namqn View Post
Để dùng một số 16 bit, bạn chỉ việc khai báo một biến có kiểu là unsigned int (hoặc unsigned short), trình dịch sẽ tự động dùng hai thanh ghi (ô nhớ) nằm trong vùng RAM công dụng chung (general purpose) cho biến đó.
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 !
sit_alone76816 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-06-2010, 08:31 AM   #2
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
Old 28-06-2010, 12:24 PM   #3
sit_alone76816
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 38
:
Trích:
Nguyên văn bởi namqn View Post
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,
Chân thành cảm ơn anh ! Nhờ có anh chỉ dạy mà em đã làm đuợc rồi.

Còn vấn đề về LAT đó, thì em tìm rồi, mà cũng chưa hiểu ra sao nữa, em cũng có đọc datasheet của PIC, cũng có nói sơ về vấn đề đó, nhưng mà em vẫn chưa xác định đuợc nó khác với hàm PORT như thế nào cả.

Em thử viết code như sau : Em cho PORTC là output, rồi em so sánh câu lệnh PORTC và LATC bằng cách em cho PORTC=0xf0; sau đó em thay lại bằng LATC=0xf0; Thì kết quả như nhau, không thấy có gì khác cả.

Anh có nói là LAT để khắc phục hiện tượng read-modify-write là như thế nào ? Mong anh phân tích giùm em !!!

Chân thành cảm ơn anh !
sit_alone76816 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


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à 10:45 AM.


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