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...
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
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?
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
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
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!
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
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 