|
|
View previous topic :: View next topic |
Author |
Message |
lokeshbhatt
Joined: 16 Mar 2010 Posts: 11
|
PIC16f690 Timer1 not working properly |
Posted: Wed Apr 21, 2010 11:51 pm |
|
|
Hi,
What is the maximum clock can I get using internal oscillator? What is
that noclear in ISR? Is this Timer code right?
Code: |
#include <16f690.h>
//#inlcude "stdio.h"
//#fuses NOWDT,NOPROTECT,CPD,NOMCLR,NOIESO,NOFCMEN // preprocessor directive that defines fuses for the chip
#fuses INTRC_IO,NOWDT,NOPROTECT,CPD,NOMCLR,NOIESO,NOFCMEN
#use delay(clock=8000000)
#priority timer1//#use rs232(baud=9600, xmit=PIN_B7, rcv=PIN_B5) // preprocessor directive that includes the rs232 libraries
#define Square_Pulse PIN_B4
#define LED_Blink PIN_B5
#define test PIN_B6
unsigned char fStartOfPolling;
/*****************************************************
************** TIMER ISR FUNCTION *****************
******************************************************/
#INT_TIMER1 noclear
void my_timer()
{
static int tCountFor20msec,tCountFor1sec,fFor12Sec,CountForLEDBlink;
// disable_interrupts(GLOBAL);
// clear_interrupt(INT_TIMER1);
//SET_TIMER1(25536);
// OUTPUT_TOGGLE(test);
if( tCountFor20msec++ == 50 )
{
// output_toggle( Square_Pulse);
if( CountForLEDBlink == 0)
output_toggle(LED_Blink);
else if (CountForLEDBlink == 5)
OUTPUT_LOW(LED_Blink);
if( tCountFor1sec++ == 12)
{
output_toggle( Square_Pulse);
fStartOfPolling = 1;
tCountFor1sec = 0;
CountForLEDBlink = 5;
}
tCountFor20msec=0;
}
// puts("micro");
//enable_interrupts(GLOBAL);
}
void main()
{
int InputPortValue = 0;
SET_TRIS_C(0b00000000); // 3 OUTPUT
SET_TRIS_A(0b11111111); // 4 INPUT
SET_TRIS_B(0b00000000); // FOR SQUARE WAVE, LED BLINK
//setup_oscillator(OSC_INTRC);
setup_adc_ports(NO_ANALOGS | VSS_VDD);
setup_adc(ADC_OFF);
setup_comparator(NC_NC_NC_NC);
//setup_adc_ports(sAN8 | VSS_VDD);
// for 20msec 40000 count required
//disable_interrupts(INT_TIMER1);
//SET_TIMER1(0);
//clear_interrupt(INT_TIMER1);
SET_TIMER1(25536);
SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_1 );
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
/************ LOW-HIGH-LOW PULSE ON PWRKEY PIN OF GSM */
OUTPUT_C(0x00);
OUTPUT_LOW(Square_Pulse);
OUTPUT_HIGH(LED_Blink);
OUTPUT_HIGH(test);
while(1)
{
if( fStartOfPolling == 1)
{
InputPortValue = INPUT_A();
InputPortValue = (InputPortValue & 0x0F );
if(InputPortValue == 0x08 ) // INPUT 1 IS HIGH
OUTPUT_C(0x04);
else if(InputPortValue == 0x0C )
OUTPUT_C(0x02);
else if(InputPortValue == 0x0E )
OUTPUT_C(0x06);
else if(InputPortValue == 0x0F )
OUTPUT_C(0x01);
}
}
}
|
Thanx in anticipation
Lokesh _________________ Thanks & Regards
Lokesh Bhatt |
|
|
dyeatman
Joined: 06 Sep 2003 Posts: 1934 Location: Norman, OK
|
|
Posted: Thu Apr 22, 2010 5:39 am |
|
|
Answers to your questions:
1. See the data sheet page 48 for the max oscillator speed.
2. See page 116 of the current manual for the meaning of noclear
3. no _________________ Google and Forum Search are some of your best tools!!!! |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19546
|
|
Posted: Thu Apr 22, 2010 9:33 am |
|
|
And, because noclear is used, the code as posted cannot work. It'll hang forever in the timer1 interrupt...
Best Wishes |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|