ik probeer sinds 2 dagen een pic16f870 te programeren. Als ik de HEX bestand van voti inlaad dan gaat de led knipperen.
Als ik nu in C zelf een programma schrijf dan werkt het niet.

Ik maak gebruik van CC5X c compiler in combinatie met MPLAB.




#define _8_MHz    /* 8 MHz system clock */

void device_init()
	{

		PORTA = 0x00;	// alle pinnen laag
		PORTB = 0x00;	// alle pinnen laag

		TRISA = 0x00;	//uitgang
		TRISB = 0x00;	//uitgang

		OPTION = 0x80;
		ADCON0 = 0x00;
		ADCON1 = 0x06;

	}


void main(void){
	device_init();

	unsigned int i = 0;

	while(1)
	{
		PORTA = 0x00;
		PORTB = 0x00;
		for( i=0; i < 0xffff; i++);
		PORTA = 0xff;
		PORTB = 0xff;
		for( i=0; i < 0xffff; i++);

	}

}


Dit de ASM die is gegenreerd (ik begrijp geen ASM)




; CC5X Version 3.2A, Copyright (c) B Knudsen Data
; C compiler for the PICmicro family
; ************   2. Feb 2005   9:18  *************

	processor  16F877A
	radix  DEC

PORTA       EQU   0x05
TRISA       EQU   0x85
PORTB       EQU   0x06
TRISB       EQU   0x86
RP0         EQU   5
RP1         EQU   6
OPTION_REG  EQU   0x81
ADCON0      EQU   0x1F
ADCON1      EQU   0x9F
i           EQU   0x20

	GOTO main

  ; FILE joni.c
			;
			;#define _8_MHz    /* 8 MHz system clock */
			;
			;void device_init()
			;	{
device_init
			;
			;		PORTA = 0x00;	// alle pinnen laag
	BCF   0x03,RP0
	BCF   0x03,RP1
	CLRF  PORTA
			;		PORTB = 0x00;	// alle pinnen laag
	CLRF  PORTB
			;
			;		TRISA = 0x00;	//uitgang
	BSF   0x03,RP0
	CLRF  TRISA
			;		TRISB = 0x00;	//uitgang
	CLRF  TRISB
			;
			;		OPTION = 0x80;
	MOVLW .128
	MOVWF OPTION_REG
			;		ADCON0 = 0x00;
	BCF   0x03,RP0
	CLRF  ADCON0
			;		ADCON1 = 0x06;
	MOVLW .6
	BSF   0x03,RP0
	MOVWF ADCON1
			;
			;	}
	RETURN
			;
			;
			;void main(void){
main
			;	device_init();
	CALL  device_init
			;
			;	unsigned int i = 0;
	BCF   0x03,RP0
	BCF   0x03,RP1
	CLRF  i
			;
			;	while(1)
			;	{
			;		PORTA = 0x00;
	BCF   0x03,RP0
	BCF   0x03,RP1
	CLRF  PORTA
			;		PORTB = 0x00;
	CLRF  PORTB
			;		for( i=0; i < 0xffff; i++);
	CLRF  i
m001	BCF   0x03,RP0
	BCF   0x03,RP1
	INCF  i,1
	GOTO  m001
			;		PORTA = 0xff;
	MOVLW .255
	BCF   0x03,RP0
	BCF   0x03,RP1
	MOVWF PORTA
			;		PORTB = 0xff;
	MOVLW .255
	MOVWF PORTB
			;		for( i=0; i < 0xffff; i++);
	CLRF  i
m002	BCF   0x03,RP0
	BCF   0x03,RP1
	INCF  i,1
	GOTO  m002
			;
			;	}

	END


; *** KEY INFO ***

; 0x0001 P0   15 word(s)  0 % : device_init
; 0x0010 P0   24 word(s)  1 % : main

; RAM usage: 1 bytes (1 local), 367 bytes free
; Maximum call level: 1
;  Codepage 0 has   40 word(s) :   1 %
;  Codepage 1 has    0 word(s) :   0 %
;  Codepage 2 has    0 word(s) :   0 %
;  Codepage 3 has    0 word(s) :   0 %
; Total of 40 code words (0 %)

het schema is het zelfde als op voti.nl
WAT DOE IK NOU VERKEERD????

O ja handig om er bij te zetten dat de LED constant brand.

Volgens mij is het probleem dat hij niet tot

PORTA = 0xff;
PORTB = 0xFF;

komt, aangezien het het constant aan staat. Kan het zijn dat de delay te kort of te lang is.
Weet je wat, ik ga staks met een ociloscoop bekijken wat er op de poort staat. Meschien knipperd het wel alleen heel snel.

Nu weet ik het zeker het komt niet daar.

[Bericht gewijzigd door Henk123 op ]

Het lijkt erop dat je compiler die lege "for" statements niet goed genereerd. Ik zie nergens in de ASM code dat er getest wordt of 0xFFFF al is bereikt. Hij blijft altijd terug naar m001 springen. De compiler heeft die "unsigned int" ook maar 1 byte groot gemaakt, de 0xFFFF zal hij nooit halen.

he het werkt alleen de delay was te langzaam.