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

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 14-11-2013, 10:48 AM   #1
shybmt
Nhập môn đệ tử
 
Tham gia ngày: Nov 2013
Bài gửi: 3
:
[thắc mắc] không thực hiện hàm ngắt TIMER0 khi tràn TIMER0.

mình đang viết code cho mạch đếm xung ngoài dùng PIC18F4620, sử dụng TIMER0 để đếm xung ngoài và TIMER1 để định thời.
tuy nhiên trong quá trình viết thì mình mắc phải 1 lỗi mà không hiểu tại sao, đó là khi timer0 tràn rồi nhưng lại không thực hiện hàm ngắt. mọi người xem qua code giúp mình và chỉ cho mình biết mình sai chỗ nào với.

mình mới tập tành với PIC nên kiến thức còn nhiều thiếu sót.

#include <main.h>
#include "lcd_driver.c"
#use FAST_IO(A)

int8 count=0, enable=0, count_t1=0, i=0;
int16 FREQ=0;

#INT_TIMER0 // TIMER0 dem xung ngoai
void TIMER0_isr(void) // Trinh phuc vu ngat tran TIMER0
{
set_timer0(245); // set gia tri ban dau cho TIMER0 (set TIMER0 = 245 de TIMER0 mau tran, test code)
count=count+1; // tang bien dem tran TIMER0
}

#INT_TIMER1 // TIMER 1 dinh thoi 1s
void tao_tre_1s() // Trinh phuc vu ngat tran TIMER1
{
setup_timer_1(T1_DISABLED); // khong cho phep TIMER1 hoat dong
disable_interrupts(GLOBAL); // khong cho phep ngat toan cuc
count_t1++; // tang bien dem len 1
if(count_t1==35) // Tao khoang thoi gian 1s
{
freq= count*255 + get_timer0(); // tinh so xung dem duoc
count = 0; // set bien dem tran vong lap TIMER0 ve 0
count_t1 = 0; // set bien dem tran vong lap TIMER1 ve 0
enable = 1; // set bien cho phep vong lap while hoat dong len 1
}
set_timer1(15536); // set gia tri ban dau cho TMR1
setup_timer_1(T1_INTERNAL|T1_DIV_BY_2); // cho phep TIMER1 hoat dong lai
}

void main()
{
set_tris_a(0b010000); // set RA4 la chan input
set_tris_b(0);
set_tris_c(0b00001111); // set PORTC output
set_tris_d(0); // set PORTD output


setup_timer_0(T0_EXT_L_TO_H); // cau hinh cho TIMER0 nhan xung ngoai
setup_timer_1(T1_INTERNAL|T1_DIV_BY_2); // Cau hinh bo chia cho TIMER1
setup_timer_2(T2_DISABLED,0,1); // khong cho phep TIMER2 hoat dong
enable_interrupts(INT_TIMER0); // cho phep ngat tran TIMER0
enable_interrupts(INT_TIMER1); // cho phep ngat tran TIMER0
enable_interrupts(GLOBAL); // cho phep ngat toan cuc
set_timer0(245); // set gia tri dau cho TIMER0 (set TIMER0 = 245 de TIMER0 mau tran, test code)

lcd_init(); // khoi tao LCD

lcd_gotoxy(1,1);
lcd_putc(" CODE DEM XUNG ");
lcd_gotoxy(1,2);
lcd_putc(" PIC18F4620 ");
delay_ms(500);

while(true) // vong lap luon dung
{
/************************************************** ***********************************/

/* vong lap ben duoi dung de kiem tra ham ngat khi tran TIMER0 co hoat dong khong */

/************************************************** ***********************************/

i=get_timer0(); // cho i = gia tri xung dem duoc
lcd_gotoxy(1,1); // dinh dong xuat LCD
printf(lcd_putc,"so xung = %u ",i); // xuat gia tri xung dang dem (de biet khi nao TIMER0 tran)
lcd_gotoxy(1,2); // dinh dong xuat LCD
printf(lcd_putc,"so lan tran = %u ",count); // xuat bien dem so lan TIMER 0 tran (kiem tra ham ngat khi tran TIMER0 co hoat dong khong)
}
}
File Kèm Theo
File Type: rar thu18.rar (51.0 KB, 5 lần tải)
shybmt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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à 04:18 PM.


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