Ðề tài: CCS C for PIC16F877A
View Single Post
Old 23-05-2007, 04:38 PM   #203
suongrong17
Nhập môn đệ tử
 
suongrong17's Avatar
 
Tham gia ngày: May 2007
Nơi Cư Ngụ: Ho Chi Minh City
Bài gửi: 4
:
Send a message via Yahoo to suongrong17
Pic18f4450

Trích:
Nguyên văn bởi thaithienanh View Post
Úi code của bạn sai rồi nếu muốn sử dụng được ngắt thì trong hàm main bạn phải thực hiện cho phép ngắt timer_0 và ngắt toàn cục (global) hoạt động, định xung nhịp cho timer, và hàm ngắt() phải được đặt ngay bên dưới chỉ thị #int_timer0 để trình dịch có thể hiểu được đây là hàm phục vụ ngắt, hàm ngắt() này bạn không thể gọi đến giống như một hàm thông thường đuợc mà nó chỉ được máy gọi đến khi có xuất hiện cờ tràn timer_0, mà khi đã sử dụng ngắt timer (tức ngắt định thời) thì bạn không nên dùng delay trong nó (rất dở),vì ngắt timer được tạo ra để thay thế hoàn hảo cho delay, code của bạn mình sửa như sau :
#include<18F4450.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=4000000)
int16 count=0;
int8 a=1;

#int_timer0
void ngat(){
++count;
if(count==2000) {count=0;a=a<<1;} // dich trai a 1bit
if(a==256) {a=1;count=0; }}

void main(){
enable_interrupts(global);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); //xung timer = xung máy/2
while(true) {
output_b(a);
}}

như vậy ở hàm trên ta sẽ thấy sau mỗi lần tràn ngắt timer_0 (sau hai xung máy) biến đếm count sẽ tăng lên 1 đơn vị và cứ thế cho đến khi đạt giá trị 2000 (đây là giá trị mà bạn cần phải tính để chọn đúng thời gian cần làm làm trễ) khi đó biến a sẽ đuợc dịch bit sang trái,....rồi tiếp tục... chắc khúc này bạn hiểu rồi há.
Thật sự cảm ơn sự chỉ giáo của thaithienanh. Mình cũng đang tập tành chơi với PIC thôi. Trước giờ cũng chưa từng đụng đến các loại vi xử lý thành ra không nắm rõ, khi đọc tài liệu cũng cảm thấy khó hiểu ở phần ngắt. Mình đang dự định dùng con PIC này để làm thành Keyboard USB, viết cả driver cho nó. Nhưng bây giờ cơ bản cũng còn chưa biết, chỉ có ý tửong7 thôi. Nhờ bạn chỉ them cho mình với nhé. Thế nhưng khi đưa trình ngắt này cho chạy thử thì vẫn thấy bặt vô âm tín, không hiểu bị sao nữa.
__________________
Già vẫn học. Chọc thì cười.
suongrong17 vẫn chưa có mặt trong diễn đàn