Mexendo no compilador XC8 encontrei um bug estranho,veja o código a seguir:
/************************************************************************************************************************************
* Bug no compilador XC8
*
* Compilador : MPlabXC8
* Microcontrolador: 16F648A
* Autor: aguivone
* Versão: 1
* Data : 03/01/2014
*************************************************************************************************************************************/
#include <stdio.h>
#include <string.h> //para usar funçoes de string deve se adicionar este header
#include <stdlib.h>
#define _XTAL_FREQ 4000000 // apesar de não usar cristal devo configurar pois esse define é usado para rotinas de tempo e da serial
#include <xc.h>
/**********************************************************************************************************************************/
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
//#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
/************************************************defines***************************************************************************/
#define A1 RB0
#define B1 RB3
#define C1 RB4
#define D1 RB5
void main(void)
{
TRISB = 0X02;//configura portB B1 (pino RX) como entrada
TRISA = 0X00;//configura portA como saida
PORTB = 0; // limpar as portas que estão configuradas como saidas
PORTA = 0; // limpar as portas que estão configuradas como saidas
CMCON = 7;//desliga modulo comparador
A1=1;
B1=1;
C1=1;
D1=1;
for(;;)
{
A1=1;
B1=1;
C1=1;
D1=1;
}//loop infinito
}
Neste simples codigo eu apenas mando ligar 4 pinos do microcontrolador,mas a saída não é bem assim(rode ele no simulador do proteus), verá que os pinos ficam sequenciando, agora retire do código o laço for e veja o resultado! se ocorrer o mesmo que aconteceu em meu pc vc verá apenas o pino B5 acionado,uma explicação seria que toda vez que vc manda setar um pino da forma como foi feito ele zera a porta e seta apenas aquele pino uma das formas de se resolver é usando a instrução : PORTB=0B00111001; ou PORTB = 0X39; pois assim se escreve direto no "PORTB" do microcontrolador.
Olá Amigo, eu compilei o seu código rodei no Proteus, com o laço, as quatro saída ficam em nível lógico alto. Quando retiro o laço, as saídas ficam piscando de forma instável o que é explicado pelo fato do proteus não conseguir executar o código em tempo de máquina. Imagino que o software tente ficar executando e assim a simulação está correta, pois existe uma linha que limpa o portb e as 4 saídas são setadas logo a seguir.
ResponderExcluirEu vou executar o programa no chip para ver qual o resultado.
Abraço
Olá, Marcos Bica! obrigado pela observação.
Excluir