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 03-10-2009, 01:23 AM   #1
leduy
Nhập môn đệ tử
 
Tham gia ngày: Nov 2008
Bài gửi: 6
:
Giúp đỡ về ngắt TMR1 pic 16F877A dùng CCS

Mình đang viết bài điều khiển đèn giao thông, sử dụng Ngắt TMR1. Tức là khi đủ 1s thì T1 ngắt để phục vụ cho chương trình của mình. Mình đã viết xong, chạy tốt, khá đúng 1s thì LED7 đoạn giảm 1s như đèn giao thông bình thường.
Nhưng vấn đề ở chổ là làm mình tính toán được thời gian ngắt của T1 là 1s (trong chương trình là mình thế giá trị hoài dến khi dược thì thôi^^). Rắc rối của mình là BỘ CHIA PRESCALER của T1. Mình bó tay với nó luôn. Vì mình phải báo cáo nên cần biết vê lý thuyết tại sao lại là 1s.

Bác nào rành về cái này giúp mình với.
Đây là chương trình :
// CHUONG TRINH DEN GIAO THONG SU DUNG PIC16F877A
// PHAN KHAI BAO
#INCLUDE<16F877A.H>
#FUSES XT,NOWDT,NOPROTECT,NOLVP,PUT,HS // DAT CAU HINH CHO PIC
#USE DELAY(CLOCK=4000000) // XUNG CLOCK 4MHZ
#USE FAST_IO(A)
#USE FAST_IO(C)
#USE FAST_IO(D)
#BYTE PORTB =0X06
#BYTE PORTC =0X07
#BYTE PORTD =0X08

INT8 TIME=0;
INT16 COUNT=0;
UNSIGNED INT8 A,B,C,D;
UNSIGNED INT8 CHUC_X1,DVI_X1,CHUC_D2,DVI_D2,CHUC_X2,DVI_X2,CHUC_ D1,DVI_D1;
UNSIGNED INT8 CONST MALED[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0} ;// MA LED 7 DOAN
UNSIGNED INT8 CONST QUETLED[]={0X01,0X02,0X04,0X08}; // MA QUET LED

//xxxxxxxxxxxxxxxx HAM NGAT TIMER1 xxxxxxxxxxxx
#INT_TIMER1
VOID NGAT_TIMER1()
{
SET_TIMER1(0); // cái này mình đoán và nạp vào thôi
COUNT ++; // TANG BIEN DEM

IF (COUNT==4) // cái này mình cũng đoán rồi cho no = 4 thoi
{
COUNT =0; //DU 1 GIAY THI CHO BIEN DEM VE 0
TIME ++; // VA CHO TIME CONG THEM 1
}
IF (TIME==50) // HET 1 CHU KY DEN THI CHO TMME =0
{
TIME =0;
}
}
// xxxxxxxx CAC CHUONG TRINH CON xxxxxxxxxx
VOID HIEN_THI(UNSIGNED CHAR ML , UNSIGNED CHAR L );
VOID GIAIMA();
//xxxxxxxxx CHUONG TRINH CHINH xxxxxxxx

VOID MAIN()
{
SET_TRIS_B(0X00); // PORT A OUT PUT
SET_TRIS_C(0X00); // PORT C OUT PUT
SET_TRIS_D(0X00);

ENABLE_INTERRUPTS(GLOBAL); // CHO PHEP NGAT TOAN CUC
ENABLE_INTERRUPTS(INT_TIMER1); // CHO PHEP NGAT TIMER 1
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_1); // DINH THOI THEO DAO DONG NOI
SET_TIMER1(0);

PORTC= 0x00; // TAT CAC LED
TIME = 0;
WHILE(1)
{ LOOP:
GIAIMA();
IF(TIME<20)
{ PORTB = 0B00100001; // SANG DEN XANH 1,DO 2

HIEN_THI(CHUC_X1,0) ; // HANG CHUC CUA DEN XANH 1
HIEN_THI(DVI_X1,1); //HANG DON VI CHUA DEN XANH1
HIEN_THI(CHUC_D2,2); // HANG CHUC DEN DO2
HIEN_THI(DVI_D2,3); // HANG DON VI DEN DO2
GOTO LOOP ;
}

IF((TIME>=20)&(TIME<25))
{ PORTB = 0B00100010; //SANG DEN VANG 1, DO 2
HIEN_THI(CHUC_D2,0); //HANG CHUC CUA DEN VANG 1
HIEN_THI(DVI_D2,1); //HANG DON VI CUA DEN VANG 1
HIEN_THI(CHUC_D2,2); // HANG CHUC DEN DO
HIEN_THI(DVI_D2,3); // HANG DON VI DEN DO
GOTO LOOP ;
}


IF((TIME>=25)&(TIME<45))
{ PORTB = 0B00001100; //SANG DO 1, XANH 2
HIEN_THI(CHUC_D1,0); //HANG CHUC DEN DO1
HIEN_THI(DVI_D1,1); //HANG DON VI DEN D01
HIEN_THI(CHUC_X2,2); //HANG CHUC DEN XANH2
HIEN_THI(DVI_X2,3); //HANG DON VI XANH2
GOTO LOOP ;
}

IF (TIME>=45)
{ PORTB = 0B00010100;//SANG DO1, VANG 2
HIEN_THI(CHUC_D1,0); //HANG CHUC DEN DO1
HIEN_THI(DVI_D1,1); //HANG DON VI DEN D01
HIEN_THI(CHUC_D1,2); //HANG CHUC DEN VANG 2
HIEN_THI(DVI_D1,3); //HANG DON VI DEN VANG 2

}
}

} //xxxxxxxxx HET 1 CHU KY xxxxxxxxxxxxxxxxxxxx

VOID HIEN_THI(UNSIGNED CHAR ML, UNSIGNED CHAR L)
{
PORTD = MALED[ML]; // XUAT MA LED RA SO
PORTC = QUETLED[L]; // QUET LED
DELAY_US(40);
PORTC =0X00; // CHONG LEM
}
VOID GIAIMA()
{ A= (20-TIME);
CHUC_X1= A/10; // SO HANG CHUC DEN XANH1 20S
DVI_X1 = A%10;// // SO HANG DON VI XANH1
B= (25-TIME);
CHUC_D2= B/10; // SO HANG CHUC DEN DO2 25S
DVI_D2= B%10; // SO HANG DON VI DO2

C= (45-TIME);
CHUC_X2= C/10; //HANG CHUC CUA DE XANH 2
DVI_X2= C%10; //HANG DON VI CUA DEN XANH 2
D= (50-TIME);
CHUC_D1= D/10; //HANG CHUC CUA DEN DO1
DVI_D1= D%10; //HANG DON VI DEN DO1
}
Thanks các bác nhiều!
File Kèm Theo
File Type: rar den giao thong_1 CHE DO.rar (19.7 KB, 194 lần tải)
leduy 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:12 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