Ðăng Nhập

View Full Version : Mọi người kiểm tra giùm em code HT PIC về TIMER0


halinh12sinh
05-11-2011, 09:31 PM
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
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
// 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:

// 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;
}
}
}