I have a real signal. I think need to change program logicIf you have no real input on RC0 then you may need to pull the signal low when it should be low... Some need to be pulled high use a 10k resistor to either pull high or low.
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
I have a real signal. I think need to change program logicIf you have no real input on RC0 then you may need to pull the signal low when it should be low... Some need to be pulled high use a 10k resistor to either pull high or low.
If you have no real input on RC0 then you may need to pull the signal low when it should be low... Some need to be pulled high use a 10k resistor to either pull high or low.
// PIC16F877A Configuration Bit Settings
// CONFIG
//MPLAB XC8
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#define _XTAL_FREQ 20000000 //Specify the XTAL crystal FREQ
#include<xc.h>
void main(void)
{
TRISC = 0b00000001; //PORTC R0 pins are used as Input.
TRISD = 0b00000000; //PORTD R4 pins are used as output.
//Loading starting value of counter 65536- 10 = 65426 = FFF6 hexa decimal
TMR1H = 0xFF ; // High byte FF
TMR1L = 0xF6; // Low Byte F6
//Set T1CON Register
TMR1ON = 0; // Stops Timer1
TMR1CS = 1; // Internal clock (FOSC/4)
T1SYNC = 0; // Synchronize external clock input
T1OSCEN = 1; // Oscillator is shut-off
T1CKPS0 = 0; // 1:8 prescale value
T1CKPS1 = 0;
TMR1IE=1; //Enable timer interrupt bit in PIE1 register
GIE=1; //Enable Global Interrupt
PEIE=1; //Enable the Peripheral Interrupt
TMR1ON = 1; //Start Timer1
while(1);
}
void interrupt timer_isr()
{
if(TMR1IF ==1)
{
RD4 = 1; // LED ON
__delay_ms(500); //
RD4 = 0; // LED OFF
TMR1IF=0; // Clear timer interrupt flag
TMR1ON = 0; //Stop Timer1
TMR1H = 0xFF ; // High byte FF
TMR1L = 0xF6; // Low Byte F6
}
}
And?... How many flashes do you want?When I used below code LED flash only one time
flash led when the sensor is a high repeat processAnd?... How many flashes do you want?
// PIC16F877A Configuration Bit Settings
// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disable)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#define _XTAL_FREQ 20000000 //Specify the XTAL crystal FREQ
#include<xc.h>
void main(void)
{
TRISB = 0b00000001; //PORTB R0 pins are used as Input.
TRISC = 0b00000001; //PORTC R0 pins are used as Input.
TRISD = 0b00000000; //PORTD R4 pins are used as output.
//Loading starting value of counter 65536- 10 = 65426 = FFF6 hexa decimal
TMR1H = 0xFF ; // High byte FF
TMR1L = 0xF6; // Low Byte F6
//Set T1CON Register
TMR1ON = 0; // Stops Timer1
TMR1CS = 1; // Internal clock (FOSC/4)
T1SYNC = 0; // Synchronize external clock input
T1OSCEN = 1; // Oscillator is shut-off
T1CKPS0 = 0; // 1:8 prescale value
T1CKPS1 = 0;
TMR1IE=1; //Enable timer interrupt bit in PIE1 register
GIE=1; //Enable Global Interrupt
PEIE=1; //Enable the Peripheral Interrupt
TMR1ON = 1; //Start Timer1
while(1)
{
if (RB0 == 0)
{
TMR1ON = 0; //Start Timer1
}
}
}
void interrupt timer_isr()
{
if(TMR1IF ==1)
{
RD4 = 1; // LED ON
__delay_ms(500); //
RD4 = 0; // LED OFF
TMR1IF=0; // Clear timer interrupt flag
TMR1ON = 0; //Stop Timer1
TMR1H = 0xFF ; // High byte FF
TMR1L = 0xF6; // Low Byte F6
}
}
What am I checking??? I still don't get the gist of the program.. If you explain what you would like it to do, I'll make it so...
At the moment I see 10 counts and the led flashes once to signify 10 counts... What else should it do?
So where does the "count to10" come into it..When object is detected by sensor , load TMR1 with starting value 25535 ( 63BF) so when TMR1 overflow it will generate interrupt so interrupt interrupt service routine will trigger the LED.