ik heb geprobeerd een stukje assembly te schrijven die niets anders doet dan met een knopje(1 ingangspin) een led (1 uitgangspin) aan en uit te schakelen.

Men code werkt helaas niet, en ik vind men fout niet. Kan er hem iemand es bekijken?

Ik veronderstel dat dit een veel gebruikte functie is dus als er mensen zijn met een betere code, zou die erg welkom zijn.

#include <p16F690.inc>
	__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
    
	cblock 0x20
Display             		 ; define a variable to hold the display
	endc

	org 0
Start:
	bsf		STATUS,RP0       ; select bank1
	bcf		STATUS,RP1
	clrf	TRISC            ; PortC all output
	movlw	0xFF			 ; PortA all input
	movwf	TRISA          	 
	bcf		STATUS,RP0       ; back to bank0
	bcf		STATUS,RP1

	bcf		STATUS,RP0       ; select bank2
	bsf		STATUS,RP1     
 	movlw	0x00             ; PortA is digital
 	movwf	ANSEL
 	bcf		STATUS,RP0       ; back to bank0
 	bcf		STATUS,RP1
	
	clrf	Display

Werking:
	btfsc	Display,0
	goto	LEDON

LEDOFF:
	btfsc	PORTA,0			 ; check switch
	bsf		Display,0		 ; LED0 on
	goto	Refresh

LEDON:
	btfsc	PORTA,0			 ; check switch
	bcf		Display,0		 ; LED0 off
	goto	Refresh

Refresh:
	movf	Display,w        ; Copy display to LEDs
	movwf	PORTC
	goto	Werking
	end

dergelijke code moet er zo uit zien


1) is de switch laag ?
   - neen -> ga naar 1
   - ja   -> ga naar 2
2) inverteer de led ( led = not ( led ) )
3) is de switch hoog ?
   - neen -> ga naar 3
   - ja   -> ga naar 1

na het detecteren van een toets moet je wachten tot de toets terug losgelaten word.

Maak ook een debouncer in je software... zonder kunnen er ook rare dingen gebeuren