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.