dsPIC Tutorial 2-Các kỹ thuật cơ bản
2 Attachment(s)
Tutorial 2 cho dsPIC, viết trong ASM30. Bà con đừng nôn nóng nhé, sẽ có các tutorial viết bằng C30. Những vấn đề cơ bản về dsPIC nên được viết bằng ASM30, để hiểu rõ hơn cấu trúc của chip.
Tutorial này chỉ có các ví dụ về LED, nhưng có nhiều kỹ thuật cơ bản và khá nhiều lệnh cơ bản được đề cập, do đó các bạn đừng bỏ qua nó. Tôi sẽ dựa vào những kỹ thuật và lệnh cơ bản này để viết tiếp các tutorial khác. Các tập tin nguồn và .hex nằm trong tập tin .zip nhé. Chúc thành công nhé! Thân, |
Như đã thông báo, dưới đây là link để download các mã nguồn viết trong C30 (và các tập tin .hex đã được dịch ra) cho các ví dụ của tutorial này. Các mã nguồn C30 được chuyển đổi từ các mã nguồn ASM30, với chú thích khá chi tiết, do đó tôi sẽ không viết tutorial cho phiên bản C30.
http://picvietnam.com/download/uploa...n/Vidu2C30.zip Chúc thành công! Thân, |
1 Attachment(s)
Của em đây!
Thân, |
Chào bác nam.trước em có làm với pic6F877A,bây giờ em chuyển sang học về DSPIC.
Bác có thể nói rõ hơn về thanh ghi LATX được ko bác. Con 877A ko có thanh ghi này và em đọc trong datasheet thì ko hiểu lắm. Thanh ghi TrisX thì vẫn giống 877A,để định ngiã cổng vào/ra Còn thanh ghi PortX trong 877A để xuất dữ liệu ra là mức cao hay thấp. Còn trong các ví dụ của bác,em chưa thấy được vai trò của PortX Và dường như bác toàn sử dụng LatX. Bác nói rõ hơn cho em được ko Thanks bác |
Trích:
Kể từ dòng PIC cấp cao (PIC18), Microchip đã sử dụng hai thanh ghi đệm cho các thao tác xuất nhập, là LATx và PORTx. Như vậy, khi ghi ra các ngõ ra, chúng ta sẽ thao tác thanh ghi LATx, còn khi đọc vào từ các ngõ vào, chúng ta sẽ thao tác thanh ghi PORTx, và sẽ tránh được các rắc rối liên quan đến hiệu ứng read-modify-write. Bạn có thể thấy tôi sử dụng các thanh ghi PORTx ở tutorial 3, khi đọc trạng thái của các switch. Thân, |
ah,thì ra là vậy,cảm ơn bác.
Bác cho em hỏi câu nữa,nếu bác có thời gian. Nếu 1 cổng định nghĩa là lối vào(như RE0) chẳng hạn thì nó ở trạng thái trở kháng cao phải ko bác( tức là ko phải mức 0 mà cũng chả phải mức 1). |
Trích:
Thân, |
Code:
//Chuong trinh con khoi tao Timer 1, tran sau moi 1 giay o muc xung 8 Mips |
T1CON<5:4> = '11' sẽ cho prescale là 1:256 (nghĩa là 256 chu kỳ máy thì timer 1 mới đếm thêm 1 đơn vị), và T1CON<15> = '1' để bật timer. Vậy T1CON = 1000 0000 0011 0000 = 0x8030.
PR1 = 0x7A12 = 31250. Với tần số thực thi lệnh (Fosc/4) = 8 MIPS = 8000000, thời gian để timer 1 tràn là 8000000/(256*31250) = 1 (giây). Thân, |
Chào anh namqn!
Trong tài liệu của anh đưa, em có thấy sử dụng chương trình mô phỏng dsPIC30F4012. Anh có thể cho biết đó là chương trình mô phỏng gì và share chương trình đó được kô. Thanks hoanf |
Trích:
Thân, |
Code:
// Timer 1 initialize: Internal Cycle Clock, với period_value = 16000, internal cycle là 16MIPs |
Trích:
Thân, |
mình đã config cho dsPIC chạy ở chế độ 16 MPIs như sau:
Code:
_FOSCSEL(FNOSC_FRC); // Select Internal FRC at POR Nhưng bạn thấy trên phần init_Timer1 của mình intialize như vậy thì đúng là nếu như dsPIC chạy ở 16 MIPs thì timer sẽ interrupt ở 1ms chứ? Hơn nữa, đây là intterupt trong timer1 để mình kiểm tra: Code:
// Timer 1 Interrupt Routine |
Bạn thử comment các hàm home_it() và line2() xem. Ngắt của bạn xảy ra mỗi ms, không nên để các hàm xuất tín hiệu ra LCD (tôi đoán vậy) vào trình xử lý ngắt.
Thân, |
Múi giờ GMT. Hiện tại là 05:12 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