Ik ben net begonnen met het in assembleertaal programmeren van een PIC16F73 via MPLAB. Omdat mijn blink-a-LED programma'tje het steeds maar niet deed, heb ik het inmiddels gereduceerd tot een doe-LED-aan:


;*****Set up the Constants**** 

STATUS	equ		03h		;Address of the STATUS register
TRISA	equ		85h		;Address of the tristate register for port A
PORTA	equ		05h		;Address of Port A
ADCON1	equ		9fh		;ADC conf register

;****Set up the port**** 

	bsf		STATUS,5	;Switch to Bank 1
	movlw	        06h		;configure all pins
	movwf		ADCON1		;as digital I/O
	movlw		00h		;Set the Port A pins
	movwf		TRISA		;to output.
	bcf		STATUS,5	;Switch back to Bank 0

;****Turn the LED on**** 

   	movlw		00h		;Turn the LED on by first putting 
	movwf		PORTA		;it into the w register and then
					;on the port
	end			

Veel simpeler dan dit kan niet toch? Maar toch blijft pin RA0 op 5V en de LED dus uit. De hardware is in orde, ik kan Voti's blink-a-LED zo inladen, waarna de LED netjes knippert (ik gebruik Voti's Blink-a-LED schema). Ik heb het gevoel dat ik iets heel simpels over het hoofd zie, maar ik weet dus niet wat...

Je code heeft geen main loop die uitgevoerd wordt. Ik heb hem aangepast. Tevens de losse equates verwijderd. Gebruik daar liever de daarvoor bedoelde include file...


#include <p16F73.inc>  

            radix       dec        ;Default radix
            errorlevel  -302       ;No warnings

;****Set up the port**** 

            bsf         STATUS,RP0 ;Switch to Bank 1
            movlw       06h        ;configure all pins
            movwf       ADCON1     ;as digital I/O
            movlw       00h        ;Set the Port A pins
            movwf       TRISA      ;to output.
            bcf         STATUS,RP0 ;Back to Bank 0

;****Turn the LED on**** 

            movlw       00h        ;Turn the LED on by first putting 
            movwf       PORTA      ;it into the w register and then
                                   ;on the port
mylabel:    goto        mylabel    :Wait forever
            end

Bedankt voor de suggesties, die include-file had ik nog niet gevonden. Alleen doet hij het nog steeds niet, pin RA0 (pin 2) blijft nog steeds op 5V. In de simulator/debugger van MPLAB doet deze code het prima (net als mijn eerste versie trouwens), in register PORTA komt netjes 0x00 te staan. Dat zou toch moeten betekenen dat de betreffende pinnen allemaal nul volt geven?

Hoe heb je de PIC geconfigureerd? Geef eens de complete code.

Dit is de complete code. De configuration bits heb ik in het programma ingesteld als:

-Oscillator HS (ik heb een 20 MHz kristal)
-Watchdog timer OFF
-Power up timer ON (stond OFF maar dacht dat het daar misschien aan lag)
-Code protect OFF
-Brownout detect ON

Weerstand aan MCLR is aanwezig?
100nF tussen Vcc - Vss ook?

Ja. Over de hardware ben ik vrij zeker, aangezien Voti's blink-a-LED-programma'tjes het wel doen.

Beter om de configuratie in de sourcefile te zetten:


            __CONFIG    _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC

Hij doet het! De configuratiebits zet hij blijkbaar niet in de HEX-file als je ze alleen in het menu instelt... In de HEX-file staat nu namelijk ineens dat er twee bytes op 2007 moeten.

Vraag ik me alleen af wat voor zin het heeft om de configuratiebits in het menu in te stellen, als die dan niet in de code terechtkomen... In elk geval bedankt voor de hulp, ik kan eindelijk verder!

Het is nooit verstandig de configuratie in de programmer of het menu te zetten om diverse redenen:

- Als je de source aan iemand geeft (of post) weet hij de juiste instellingen niet omdat de CONFIG ontbreekt.
- Als jij zelf over een jaar de code opnieuw wilt gebruiken weet je het (waarschijnlijk) ook niet meer :)