![]() |
|
Tài trợ cho PIC Vietnam |
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 |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Sep 2007
Bài gửi: 4
: |
Hỏi bài?
chào cả nhà.Là 1 người mới bắt đầu về Pic nên em cũng có 1 vài câu hỏi,mà tinh thần thì cũng như bạn "anhdk" vậy.Vi e thấy mục này thich hợp nên muốn hỏi 1 câu:
Nếu viết 1 đoạn chương trình delay đơn giản có nội dung Code:
..... ;các lệnh ở trên MOVLW 0x20 ;đưa giá trị 20h vào W MOVWF delay_reg ;gán W cho delay_reg loop DECFSZ delay_reg ;giảm giá trị của delay_reg ;và so sánh với 0 GOTO loop ..... ;các lệnh khác gọi t1 là thời gian của 1 chu kì lệnh thì thời gian của đoạn delay la 3*t1*(N+1)(ở đây N=20) tại sao lại là N+1 mà không phải N,e đếm thử mà thấy chưa hợp lí? Nhờ mọi người giải thich tường minh cho e đoạn này ,xin cảm ơn thay đổi nội dung bởi: falleaf, 15-01-2008 lúc 08:13 AM. |
![]() |
![]() |
![]() |
#2 |
Nhập môn đệ tử
Tham gia ngày: Sep 2007
Bài gửi: 4
: |
vẫn chưa có ai chú ý tới câu hỏi chắc nó dễ quá! hôm qua e đã đọc được 1 đoạn viết rằng khi giá trị của 1 thanh ghi giảm về 0 sẽ có 1 chu kì lệnh được phát sinh,có lẽ đó là nguyên nhân làm cho vòng lặp quay lại thêm 1 lần nữa...
đây cũng chỉ là suy nghĩ chủ quan vậy, ai có ý kiến khác thì cùng nhau bàn bạc nha.Tạm thời về câu này như thế đã.E muốn hỏi 1 câu khác trong lệnh _CONFIG (thiết lập các bit điều khiển các khối chức năng của PIC),nếu viết: _CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF &_PWRTE_ON & _XT_OSC &_WRT_OFF & _LVP_OFF & _CPD_OFF e mới chỉ hiểu khai báo _LVP_OFF là để ngắt chức năng nạp của chân RB3 để nó có thể hoạt động như 1 pin I/O bình thường,vì rằng ở đây có 8 khai báo nên có thể hiểu là 1 khai báo tương ứng với sự làm việc bình thường của các pin dược không?và ý nghĩa cụ thể của từng khai báo là gì?(ví như là khai báo _WDT_OFF sẽ là tắt bộ WDT? và nó liên quan đến pin nào của POST B?) Mong được phản hồi từ anh em! |
![]() |
![]() |
![]() |
#3 |
Đệ tử 2 túi
Tham gia ngày: Jun 2007
Bài gửi: 43
: |
1.WDT là "chó giữ nhà" (Watchdog Timer). Bộ phận này có nhiệm vụ reset lại PIC sau một khoảng thời gian định trước. WDT sẽ reset vi điều khiển khi bộ đếm của WDT bị tràn. Mục đích của nó là tránh trường hợp vi điều khiển bị "treo" khi phải hoạt động liên tục trong một khoảng thời gian lâu dài.
Thời gian định trước này phụ thuộc vào tần số loại thạch anh sử dụng và bộ chia tần số trước (prescaler) của WDT. 2.XT ,HS,RC,LP là khai báo các tần số dao động thạch sử dụng cho vi điều khiển.Thường XT cỡ 4MHZ,HS là tần số cao cỡ 15_20 MHz, RC là dùng clock (điện trở _tụ điện).Cài này thì về điện tử cơ bản bạn đã học tần số dao động của mạch RC rồi 3.Code protection(CP) có thể ngăn chặn những dòng lệnh bị lỗi của vi điều khiển khi hồi về phần lập trình của vi điều khiển. 4. BODEn có nghĩa là khi nó được set ,nó sẽ giữ nguồn cho VDK trong một thời gian ngắn khi nguôn VDK bị lỗi 5.PWRTE (power up timer ):khi PWRTE được set ,nó sẽ làm cho thời gian ổn định của VDK khi nạp nguồn và dao động thạch anh có thể ngắn và phù hợp Bạn nên vễ xem lại những kiến thức cơ bản "chip configuration word" trong chương đầu PIC.Chúc vui |
![]() |
![]() |
![]() |
#4 | |
Trưởng lão PIC bang
|
Trích:
1. WDT dùng để reset PIC khi PIC bị treo vì một lý do gì đó. Khi dùng WDT thì trong các vòng lặp người ta thường có lệnh xóa thanh ghi đếm của bộ WDT để tránh bị reset khi chương trình chạy bình thường. 2. XT thường dùng cho tần số thạch anh từ vài trăm kHz đến 4 MHz, còn HS thường dùng cho tần số thạch anh từ 4 MHz đến tần số tối đa của chip. LP là chế độ công suất thấp của bộ dao động, thường dùng với thạch anh đồng hồ tần số 32768 Hz. 3. Code protection là chế độ bảo vệ mã chương trình, tức là không cho phép đọc code từ bộ nhớ chương trình của PIC ra bên ngoài. Thường dùng cho mục đích chống sao chép chương trình trên chip. 4. BODEN là cho phép phát hiện sự cố suy giảm nguồn (brown-out detection). Brown-out là muốn nói đến việc nguồn của chip bị suy giảm nhưng không mất hẳn, tuy nhiên, việc chạy chương trình ở điện áp suy giảm này có thể không an toàn (theo đánh giá của người thiết kế), do đó người thiết kế có thể bật tính năng này nếu không muốn chip làm việc ở điều kiện brown-out. 5. PWRTE là cho phép bộ định thời khi bật nguồn hoạt động. Bộ định thời này sẽ thêm vào một khoảng thời gian giữ chip ở trạng thái reset, như vậy điện áp nguồn và tần số của bộ dao động sẽ được ổn định hơn. 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 |
|
![]() |
![]() |
![]() |
#5 | |
Nhập môn đệ tử
Tham gia ngày: Oct 2006
Bài gửi: 2
: |
Trích:
Như vậy tổng số chu kỳ thực hiện sẽ là 3*19 + 2 chứ đâu phải là 3*(20+1) như bài viết. Như vậy công thức 3*(N+1)*t1 là không đúng. Ngay cả 3*N*t1 cũng không đúng vì ở vòng lặp cuối, lệnh sau DECFSZ sẽ được bỏ qua và thay bằng NOP. Mọi người có thể giải thích rõ chỗ này không ạ ? |
|
![]() |
![]() |
![]() |
#6 |
Trưởng lão PIC bang
|
Trả lời cho hai bạn wicamb và angel_eyes, cùng những bạn khác đã và sẽ có thắc mắc về cách tính thời gian trễ (trì hoãn) này. Với đoạn code dưới đây:
Code:
movlw D'20' movwf cnt wait decfsz cnt goto wait Tổng quát, nếu bạn thay 20 bằng N (0 < N <= 255), thời gian thực thi của đoạn code trên sẽ là (2 + (N-1)*3 + 2) chu kỳ máy. Viết gọn lại là (3*N + 1). Tutorial của Chính tính không chính xác, và thời gian đó tôi đã không kiểm tra code trong tutorial. 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 |
![]() |
![]() |
![]() |
|
|