problema IF mplab x pic16
buongiorno, ho un problema riguardo ad un codice di prova che ho scritto per un pic16f1773 su mplab x con compilatore XC8, sostanzialmente il programma non funziona, anche se compila senza dare errori e il codice viene correttamente scaricato sul mcu dal pickit 3.
precedentemente ho provato a far blinkare un led e tutto funzionava quindi escluderei che sia un problema hardware o dei registri di configurazione posto qui il codice completo:
il problema sta nella variabile dell if che corrisponde ad un ingresso digitale RA1 collegato ad un encoder ottico non da errori ma non funziona
mentre inserendo 2 dentro le parentesi dell if il led si accende e viceversa inserendo uno 0, quindi mi viene da dire che sbaglio qualcosa nella variabile "encoder"
precedentemente ho provato a far blinkare un led e tutto funzionava quindi escluderei che sia un problema hardware o dei registri di configurazione posto qui il codice completo:
- Codice: Seleziona tutto
#pragma config FOSC = HS // Oscillator Selection Bits (HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = ON // Clock Out Enable (CLKOUT function is enabled on the CLKOUT pin)
#pragma config IESO = ON // Internal/External Switchover Mode (Internal/External Switchover Mode is enabled)
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PPS1WAY = ON // Peripheral Pin Select one-way control (The PPSLOCK bit cannot be cleared once it is set by software)
#pragma config ZCD = OFF // Zero-cross detect disable (Zero-cross detect circuit is disabled at POR)
#pragma config PLLEN = OFF // Phase Lock Loop enable (4x PLL is always enabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled)
#pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)
#include <xc.h>
#define _XTAL_FREQ 20000000
#define led PORTCbits.RC4
#define encoder PORTAbits.RA1
void main() {
TRISC = 0b00000000;
TRISA = 0b11111111;
led = 0;
while(1) {
if(encoder)
{
led=1;
}
}
}
il problema sta nella variabile dell if che corrisponde ad un ingresso digitale RA1 collegato ad un encoder ottico non da errori ma non funziona
mentre inserendo 2 dentro le parentesi dell if il led si accende e viceversa inserendo uno 0, quindi mi viene da dire che sbaglio qualcosa nella variabile "encoder"