Thông báo

Collapse
No announcement yet.

Dùng ngắt để điều khiển timer!!!!!! Mọi người giúp mình với

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Dùng ngắt để điều khiển timer!!!!!! Mọi người giúp mình với

    Mình có một chương trình như thế này. dùng cho ATmega8, Mình dùng INT0 và INT1 để điều khiển chạy dừng cho timer1, khi cho dừng thì mình cho CS12=0, CS11=0, CS10=0(nghĩa là mình ngắt nguồn clock), còn khi cho timer1 chạy thì mình đat CS12=0, CS11=1, CS10=0 lấy nguồn clok là 1,5Mhz sử dụng thạch anh 12Mhz. Nhưng khi mình cho chạy thì chương trình lai không chạy theo yêu cầu. Ở đây tại sao mình set 2 chân pb4 và pb5 lên cao rồi sau đó khi xuống thấp thì nó hoàn toàn không phản ứng gì. Các bạn xem mình bị lỗi ở đâu gúp mình với. thank
    Code:
    //Info:
    //Chip:ATmega8
    //Clock:12MHz
    //Author: 
    //Company:
    //Date: 20//3/2012
    //Tools:AVRstudio5.1
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/iom8.h>
    #define pulse_width 150 
    //**********************************************************************************************
    //Cac bien toan cuc
    unsigned int time_open=0x3A98;//bien dung tinh toan do tre nap vao OCR1A
    unsigned char led=0,led1=0xB1,led2=0xD8,led3=0xE0;//Cac bien su dung de hien thi led
    unsigned char half_cycle=0;//Bien dung de xac dinh chu ki duong hay am gay ra ngat
    
    int main(void)
    {
    	//####################################################################################
    	//THIET LAP THONG SO CAC PORT VAO RA
    	//PORTB:Phat tin hieu den ban phim, phat tin hieu dieu khien, lay xung tu bo dao dong thach anh
    	//Dieu huong:PB0=out PB1=out PB2=out PB3=out PB4=out PB5=out PB6=in PB7=in
    	//Trang thai:PB0=1 PB1=1 PB2=1 PB3=1 PB4=1 PB5=1 PB6=0 PB7=0
    	DDRB=0x3F;
    	PORTB=0x3F;
    	//PORTC:Quet 3 led 7 doan
    	//Dieu huong:PC0=out PC1=out PC2=out PC3=out PC4=out PC5=out PC6=out 
    	//Trang thai:PC0=1 PC1=1 PC2=1 PC3=1 PC4=1 PC5=1 PC6=1
    	DDRC=0xFF;
    	PORTC=0xFF;
    	//PORTD:Bao cac trang thai loi, nhap du lieu, doc du lieu tu ban phim, loi vao cua ngat
    	//Dieu huong:PD0=out PD1=out PD2=in PD3=in PD4=in PD5=in PD6=in PD7=in
    	//Trang thai:PD0=1 PD1=1 PD2=1 PD3=1 PD4=1 PD5=1 PD6=1 PD7=1 PD8=1
    	DDRD=0x03;
    	PORTD=0xFF;
    	//####################################################################################
    	//THIET LAP CAC CHO CAC TIMER
    	//TIMER0:Ho tro viec quet led 7 seg, moi lan hien thi 1led trong khoang 2ms
    	//Clock:46875Hz(256 xung cua mach dao dong thi TCNT0 moi tang 1 don vi) - luon hoat dong
    	//Timer0 Interrupt:on
    	TCCR0=0x04;
    	TCNT0=0xA1;
    	TIMSK|=(1<<TOIE0);
    	//TIMER1:Tao thoi gian tre cua goc mo, tao do rong xung cua goc mo
    	//Clock:1,5Mhz(8 xung cua mach dao dong thi TCNT1 mooi tang 1 don vi) - Chi hoat dong khi co ngat INT0 va INT1
    	//Timer1 compare match A interrupt:on
    	//Timer1 compare match B interrupt:on
    	TCNT1=0x0000;
    	OCR1A=0x0A98;
    	OCR1B=OCR1A+pulse_width;
    	TCCR1A=0x00;
    	TCCR1B=0x00;//Khong cho phep timer chay tu dong
    	TIMSK|=((1<<TOIE1)|(1<<OCIE1A)|(1<<OCIE1B));
    	//##################################################################################
    	//THIET LAP CHO NGAT NGOAI
    	//INT0:Lay qua 0 cua chu ki duong
    	//INT1:Lay qua 0 cua chu ki am
    	//Interrupt falling of INT0:on
    	//Interrupt falling of INT1:on
    	MCUCR|=((1<<ISC11)|(1<<ISC01));
    	GICR|=((1<<INT0)|(1<<INT1));
    	//##################################################################################
    	//CHO PHEP NGAT TOAN CUC
    	sei();		
    	while(1)
        {
            //TODO:: Please write your application code 
        }
    }
    ISR(INT0_vect)
    {
    	half_cycle=0;
    	TCNT1=0x0000;//Nap lai gia tri cho timer1
    	TCCR1A=0x00;
    	TCCR1B=0x02;//Cho phep timer1 bat dau hoat dong
    	}
    ISR(INT1_vect)
    {
    	half_cycle=1;
    	TCNT1=0x0000;//Nap lai gia tri cho time1
    	TCCR1A=0x00;
    	TCCR1B=0x02;//Cho phep time1 bat dau hoat dong
    	}
    ISR(TIMER0_OVF_vect)
    {
    	TCNT0 = 0xA1;//Nap lai gia tri cho timer0
    	led++;
    	if(led==1) PORTC=led1;
    	if(led==2) PORTC=led2;
    	if(led==3) PORTC=led3;
    	if(led==4) led=0;
    	}
    ISR(TIMER1_COMPA_vect)
    {
    	if(half_cycle==0) PORTB|=(1<<PB4);//Neu do ngat 0 thi dua chan PB4 len muc cao
    	if(half_cycle==1) PORTB|=(1<<PB5);//Neu do ngat 1 thi dua chan PB5 len muc cao
    	}
    ISR(TIMER1_COMPB_vect)
    {
    	if(half_cycle==0) PORTB&=(~(1<<PB4));//neu do ngat 0 thi dua chan PB4 xuong muc thap
    	if(half_cycle==1) PORTB&=(~(1<<PB5));//Neu do ngat 1 thi dua chan PB5 xuong muc thap
    	TCCR1A=0x00;
    	TCCR1B=0x00;//Dung timer1
    }

Về tác giả

Collapse

congbinh1989 Tìm hiểu thêm về congbinh1989

Bài viết mới nhất

Collapse

Đang tải...
X