Beste co'ers

Ik wou eens wat in asm gaan programmeren. Dus ik wat tuts en datasheets gelezen. En ik wil dt programma gebruiken om een ledje op porta.1 aan te zetten. En hij werkt niet. Hoe kan dat. Ik heb de adressen en bits van de trisa en porta overgenomen uit een tut over een 16f84. Maar in de datsheet zie ik geen verschil


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

	bsf	0x03,5		;Switch to Bank 1
	movlw	0x00		;Set the Port A pins
	movwf	0x85		;to output.
	bcf	0x03,5		;Switch back to Bank 0 

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

Start	movlw	0x01		;Turn the LED on by first putting
	movwf	0x05		;it into the w register and then 

Reken 85 hexadecimaal is om naar binair.

Je schrijft nu het getal '1' naar de poort, dan wordt dus A0 geset.

Het leest een stuk makkelijker als je de namen van de registers gebruikt i.p.v. de adressen.
Je moet dan wel even in je progje verwijzen naar de include-file.

Maar a0 doet het ook niet. Ik heb op alles ledjes

Oeps edit sorry

[Bericht gewijzigd door pientertje op (16%)]

Deze tutorial is verschrikkelijk goed: http://www.gooligum.com.au/tutorials.html

succes ermee!

je mist een stukje code?
En maak eens gebruik van symbolen ipv hex waardes. Dat leest een stuk duidelijker.

Wat moet ik dan in config zetten?

De fuses van de pic. Wat voor xtal je gebruik, of je mclr gebruik, WDT, POR etc.

Zoals in picbasic

DEVICE 16F877A
CONFIG CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_ON, PWRTE_OFF, WDT_OFF, HS_OSC

Door niet zo lui te zijn en een tutorial te lezen. Er is al een link gegeven in dit topic. Kom op, beetje zelf wat doen.

Lui, Lui, gelijk zo'n groot woord ;)
Ik ben wel degelijk bezig gewesst met de functie config bits in mplab. maar ik weet niet op wat ik oscillator moet zetten voor de interne oscillator.

Je moet de config bits niet in mplab instellen maar gewoon in je code. Dan is altijd duidelijk wat je hebt ingesteld want het zit in je code.

Bij de interne osc kan je niks instellen volgens mij. Je kan alleen verschillende osc's kiezen, intern of extern. Extern kan je opdelen in LP, XT, HS en nog meer bij sommige pic's.

In die link die iemand boven mij geeft staat een asm cursus. Open deel 1 en wat staat boven in?


    list        p=12F509      
    #include    <p12F509.inc>

                ; ext reset, no code protect, no watchdog, 4Mhz int clock
    __CONFIG    _MCLRE_ON & _CP_OFF & _WDT_OFF & _IntRC_OSC

Gebruikte pic = 12f509
Bjpassend include om het leven makkelijker te maken.
Config instellingen

[Bericht gewijzigd door Bas Smit op (39%)]

Ik lijk lui maar dan krijg ik toch echt dit:


Debug build of project `C:\Documents and Settings\willem\Mijn documenten\pic\l1.mcp' started.
Preprocessor symbol `__DEBUG' is defined.
Fri Dec 05 18:11:38 2008
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F628A "1.asm" /l"1.lst" /e"1.err" /d__DEBUG=1
Warning[205] C:\DOCUMENTS AND SETTINGS\WILLEM\MIJN DOCUMENTEN\1.ASM 1 : Found directive in column 1. (list)
Warning[205] C:\DOCUMENTS AND SETTINGS\WILLEM\MIJN DOCUMENTEN\1.ASM 3 : Found directive in column 1. (__CONFIG)
Error[113]   C:\DOCUMENTS AND SETTINGS\WILLEM\MIJN DOCUMENTEN\1.ASM 3 : Symbol not previously defined (_IntRC_OSC)
Error[149]   C:\DOCUMENTS AND SETTINGS\WILLEM\MIJN DOCUMENTEN\1.ASM 5 : Directive only allowed when generating an object file
Error[149]   C:\DOCUMENTS AND SETTINGS\WILLEM\MIJN DOCUMENTEN\1.ASM 8 : Directive only allowed when generating an object file
Error[113]   C:\DOCUMENTS AND SETTINGS\WILLEM\MIJN DOCUMENTEN\1.ASM 9 : Symbol not previously defined (OSCCAL)
Warning[224] C:\DOCUMENTS AND SETTINGS\WILLEM\MIJN DOCUMENTEN\1.ASM 14 : Use of this instruction is not recommended.
Error[113]   C:\DOCUMENTS AND SETTINGS\WILLEM\MIJN DOCUMENTEN\1.ASM 14 : Symbol not previously defined (GPIO)
Error[126]   C:\DOCUMENTS AND SETTINGS\WILLEM\MIJN DOCUMENTEN\1.ASM 14 : Argument out of range (0000 not between 0005 and 0007)
Error[113]   C:\DOCUMENTS AND SETTINGS\WILLEM\MIJN DOCUMENTEN\1.ASM 16 : Symbol not previously defined (GPIO)
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `C:\Documents and Settings\willem\Mijn documenten\pic\l1.mcp' failed.
Preprocessor symbol `__DEBUG' is defined.
Fri Dec 05 18:11:38 2008
----------------------------------------------------------------------
BUILD FAILED

Dat is heel duidelijk, gebruik je wel een include?

Ik vind die errors niet zo vreemd. De 16F628A heeft geen OSCCAL of GPIO registers... :+
(_IntRC_OSC fuse bestaat ook niet trouwens)

[Bericht gewijzigd door Arco op (21%)]

Nou wordt ie mooi ;) Zeggen z eerst dat ik lui ben en dat ik het uit die tut moet kopiëren en dan is het nog niet goed. Er zit wel degelijk een include. En de include is ook toegevoegd aan het project.

Heb je wel gelezen wat ik heb geschreven?...

Het ledje gaat nu aan met deze config. Maar hij moet ook nog uit. Wat is er fout?


	__config 0x3D1C			;sets the configuration settings 
					;(oscillator type etc.)

	org	0x0000			;org sets the origin, 0x0000 for the 16F628,
					;this is where the program starts running	


;*****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
COUNT1        equ       08h                 ;First counter for our delay loops
COUNT2        equ       09h                 ;Second counter for our delay loops 

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

                        bsf                   STATUS,5       ;Switch to Bank 1
                        movlw              00h                    ;Set the Port A pins
                        movwf              TRISA              ;to output.
                        bcf                   STATUS,5       ;Switch back to Bank 0 

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

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

;****Start of the delay loop 1**** 

Loop1          		decfsz              COUNT1,1       ;Subtract 1 from 255
                     goto                  Loop1              ;If COUNT is zero, carry on.
                     decfsz             COUNT2,1        ;Subtract 1 from 255
                     goto                 Loop1                ;Go back to the start of our loop.
;This delay counts down from                                                                           
;255 to zero, 255 times

;****Delay finished, now turn the LED off**** 

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

;****Add another delay**** 

Loop2        decfsz             COUNT1,1           ;This second loop keeps the
                   goto                 Loop2                   ;LED turned off long enough for
                   decfsz             COUNT2,1           ;us to see it turned off
                   goto                 Loop2                   ; 

;****Now go back to the start of the program

                   goto                 Start                       ;go back to Start and turn LED
;on again 

;****End of the program**** 

end                                                                   ;Needed by some compilers
;and also just in case we miss                                                  ;the goto instruction.

Sorry voor de slechte opmaak. Kijk hier voor een betere:
http://www.mstracey.btinternet.co.uk/pictutorial/progtut4.htm

Los van de gaande discussie:

Op 5 december 2008 17:26:27 schreef pientertje:
85 hex=133 dec = 10000101

Sla gerust de moeilijke stap naar DEC over... ;)

85
8 = 1000
5 = 0101

dus 1000 0101

Niet dat je het fout had, maar je leek het heel omlachtig te doen. :p

We zullen de gebruikelijke dingen maar weer eens afgaan...

- Gebruik geen losse equate voor de SFR's, maar gewoon de include file voor de processor
- Niet rommelen met status register maar banksel gebruiken
- Geen hex notation van het config word. (Want dat begrijpt geen hond; gebruik de equates uit de include file)

De eigenlijke fout is COUNT1 & 2. Memory locations 0x08 en 0x09 bestaan niet. Begint bij 0x20. Zie datasheet.