PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Mọi người kiểm tra giùm em code HT PIC về TIMER0 (http://www.picvietnam.com/forum/showthread.php?t=11678)

halinh12sinh 05-11-2011 09:31 PM

Mọi người kiểm tra giùm em code HT PIC về TIMER0
 
1 Attachment(s)
Em chào cả nhà..em mới chuyển tu CCS sang HT PIC nên còn bỡ ngỡ quá.em đang thử ngiệm chương trình nhấp nháy led ở PORT C với chu kì 500ms,điều khiển bằng timer0.nhưng không hiểu sao mạch mô phỏng chỉ sáng 1 led duy nhất rồi đơ.protues hiển thị dòng chữ cảnh báo : stack over flow rushing return address of interuppts.em nạp thử vào mạch thật cũng bị y như vậy.
em đã post code và file mô phỏng để mong mọi người giúp đỡ.

binhngo 06-11-2011 10:54 AM

Ok!
 
1 Attachment(s)
Trích:

Nguyên văn bởi halinh12sinh (Post 51170)
Em chào cả nhà..em mới chuyển tu CCS sang HT PIC nên còn bỡ ngỡ quá.em đang thử ngiệm chương trình nhấp nháy led ở PORT C với chu kì 500ms,điều khiển bằng timer0.nhưng không hiểu sao mạch mô phỏng chỉ sáng 1 led duy nhất rồi đơ.protues hiển thị dòng chữ cảnh báo : stack over flow rushing return address of interuppts.em nạp thử vào mạch thật cũng bị y như vậy.
em đã post code và file mô phỏng để mong mọi người giúp đỡ.

OK
Em chào cả nhà..em mới chuyển tu CCS sang HT PIC nên còn bỡ ngỡ quá.em đang thử ngiệm chương trình nhấp nháy led ở PORT C với chu kì 500ms,điều khiển bằng timer0.nhưng không hiểu sao mạch mô phỏng chỉ sáng 1 led duy nhất rồi đơ.protues hiển thị dòng chữ cảnh báo : stack over flow rushing return address of interuppts.em nạp thử vào mạch thật cũng bị y như vậy.
em đã post code và file mô phỏng để mong mọi người giúp đỡ.

delta21 21-11-2011 10:24 AM

chào bạn,bạn mới học thì nên steup timer 1 cách tường minh hơn.
code của bạn bị sai phần steup timer0,OPTION = 0B110 =>> bạn clear cả 2 bit T0SE=0,T0CS=0,không biết bạn tính dùng timer hay counter . :(
với lại theo thứ tự thì bạn nên set trisc trước rồi mới tới portc
đây là code tham khảo về setup timer 0
Code:

// MCU  : 16f877a
// XTAL : 4MHz
// Connection: A led is connected to RD0.
// Desctiption: Timer0 has overflowed: the led will blink after every 1 second.

#include <htc.h>

__CONFIG(XT & WDTDIS & LVPDIS & DEBUGDIS);

#define _XTAL_FREQ 4000000               

unsigned char count=0;                       

//Ham main *******************************
void main(void)
{
        ANSEL=0x00;//ADC OFF
        ANSELH=0x00;

        TRISC=0x00;
        PORTC=0x00;

        T0CS=0;                                                //USE INTERNAL CLOCK
       
               
        PSA=0;                                                //USE PRESCALER
        PS2=0; PS1=1; PS0=1;                                //1:16

        T0IF=0;                                                //Clear int flag
        T0IE=1;                                                //Enable tmr0 int
        GIE=1;                                                //Enable glb int
       
        TMR0=0x06;                                        //TMR0 init
       
        while(1){};                                                //Waiting for int, so we dont do anything
}


}


internet.com 23-11-2011 03:52 PM

Chào bạn! Chương trình nháy led port C của bạn có thể như sau, bạn tham khảo:
Code:

// MCU  : 16f887
// XTAL : 4MHz

#include <htc.h>

__CONFIG(XT & WDTDIS & LVPDIS & DEBUGDIS);
__CONFIG(BORV21);

#define _XTAL_FREQ 4000000               

unsigned char count=0;                       

//Ham main *******************************
void main(void){
        ANSEL=0;                                        //ALL PORTS ARE DIGITAL
        ANSELH=0;

        TRISC=0;
        PORTC=0;

        T0CS=0;                                                //USE INTERNAL CLOCK
       
               
        PSA=0;                                                //USE PRESCALER
        PS2=0; PS1=1; PS0=0;                                //1:8

        T0IF=0;                                                //Clear int flag
        T0IE=1;                                                //Enable tmr0 int
        GIE=1;                                                //Enable glb int
       
        TMR0=5;                                                //Timer0 will overflow after: 8*250*1us = 2ms
       
        while(1);                                        //Waiting for int
}

void interrupt isr(){                                        //Do not rename isr ("interrupt isr()")
        if(T0IE && T0IF){
                T0IF = 0;
                TMR0=5;
                ++count;
                if(count == 125){                        //125*2ms = 250ms
                        count = 0;
                        PORTC ^= 0xff;       
                }
        }
}



Múi giờ GMT. Hiện tại là 02:41 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam