Hallo,
Ik zoek een zeer eenvoudig, werkend stukje code voor een PIC 24EP. Ik heb het volgende gevonden voor een HJ, maar ik krijd dit niet werkend op een P24EP64GP202. Ik heb de include regel aangepast. Aan de configs heb ik niets gedaan. Zonder daar aandacht aan te besteden draait dit stukje code op een PIC24HJ128GP502.
.title " Sample dsPIC Assembler Source Code"
.sbttl " LED Toggle"
.include "P24HJ128GP502.inc"
.text
.global __reset
__reset:
mov #0x0a00,W8
mov W8,SPLIM
mov #0x0980,W15
mov #0xfc,W4
mov W4,TRISB
mloop: mov #0x02,W5
mov W5,PORTB
call delay
mov #0x01,W5
mov W5,PORTB
call delay
bra mloop
delay: mov #0x7fff,W6
dloop: dec W6,W6
cp0 W6
bra NZ,dloop
return
.end
theove
Take care to get what you like or you will be forced to like what you get
Ja, heb ik en wordt ook gevonden. Deze code werkt gewoon op een HJ.
Als ik die regel verander, door een willekeurige letter in de naam van het bestandje te typen (.include "P24HJ128GxP502.inc"), dan krijg ik een foutmelding dat dat bestand niet gevonden wordt. Als ik die letter weer verwijder, dan wordt he bestandje weer gevonden.
Dat INC-bestand past bij de P24HJ. Heb je ook het INC-bestand voor de EP gevonden en de .INCLUDE aangepast? Heb je in de configuratie van je project de juiste PIC gekozen en het juiste linkerscript?
Hoe ziet de nieuwe code eruit en wordt die foutloos gecompileerd?
[Bericht gewijzigd door BenZ op (15%)]
Dit is de nieuwe code.
.include "P24EP64GP202.inc"
.text
.global __reset
__reset:
mov #0x0a00,W8
mov W8,SPLIM
mov #0x0980,W15
mov #0xfc,W4
mov W4,TRISB
mloop: mov #0x02,W5
mov W5,PORTB
call delay
mov #0x01,W5
mov W5,PORTB
call delay
bra mloop
delay: mov #0x7fff,W6
dloop: dec W6,W6
cp0 W6
bra NZ,dloop
return
.end
BUILD SUCCESSFUL (total time: 255ms)
Loading code from C:/Users/../MPLABXProjects/PIC24EP64GP202/dist/default/production/PIC24EP64GP202.production.hex...
Loading symbols from C:/Users/../MPLABXProjects/PIC24EP64GP202/dist/default/production/PIC24EP64GP202.production.cof...
Loading completed
Connecting to programmer...
Programming target...
Programming completed
Running target...
Waar worden de configuratiebits gedefinieerd? In het workspace-menu? Zijn de configuraties van beide PIC's wel over en weer te gebruiken?
Simulatie geprobeerd?
Edit: Ik kan niet zien of de juiste PIC is geselecteerd en het juiste linkerscript is gekozen.
[Bericht gewijzigd door BenZ op (23%)]
Niet. De HJ werkt zonder aandacht te besteden aan de config bits.
Dus de HJ werkt door deze code te 'builden' en naar de PIC te sturen. Dat is alles.
http://imageshack.us/photo/my-images/109/screenpg.png/
http://img109.imageshack.us/img109/5991/screenpg.png
[Bericht gewijzigd door aanuit op (31%)]
Vlgs de screenshots wordt de configuratie niet geprogrammeerd. Dus de defaultwaarden van Microchip staan erin. Deugen die?
[Bericht gewijzigd door BenZ op (68%)]
Kan je de configuratie zoals die in de PIC staat zien met je PICKIT3?
In de datasheet staat de configuratie in het hoofdstuk "Special features".
Edit: voorlopig geen reactie.
Edit2: In de code staan absolute waarden voor de stackinitiatie. Dat is riskant. Ik gebruik
mov #__SP_init, w15
mov #__SPLIM_init, W0
mov W0, SPLIM
nop
[Bericht gewijzigd door BenZ op (14%)]
Toevallig de juist A/D configuraties ingesteld? Ik ben niet bekend met de PIC24EP series, maar bij andere series staan A/D pinnen stnadaard als analog ingesteld. Die moet je eerst op digital zetten. ANSELx registers lijken dat te doen, zoek eens de datasheet naar 11.2 Configuring analog & digital pins.
Port B heeft deels analoge pinnen, toevallig waar je LEDs op blinked. Standaard zijn die analoog, niet digitaal.
Had ik ook al naar gekeken, zal er nog eens naar kijken.
In het voorbeeld valt echter wel op dat daar ook geen aandacht aan besteed wordt, maar dat het wel wertk. Volgens mij zijn pinnen zo goed als altijd als analogg ingesteld.
Als er iemand een simpel stukje, werkende ASM code heeft voor een willekeurige pic24 dan zou ik dat graag bekijken.
Ik heb in mijn geval (PIC24FJ64GB004) setm.w AD1PCFGL aan het begin van de code staan om alle poorten op digitaal te zetten. Het gegeven programmaatje lijkt me prima om te testen.
[Bericht gewijzigd door BenZ op (21%)]
Inmiddels werkt het volgende op een p24EP128MC202.
Bedankt voor de hulp.
.include "p24EP128MC202.inc"
.text
.global __reset
__reset:
mov #__SP_init,w15
mov #__SPLIM_init,w0
mov w0,SPLIM
mov #0x0000,W1
mov W1,TRISA
mainLoop:
mov #0x0001,W5
mov W5,PORTA
call delay
mov #0x0002,W5
mov W5,PORTA
call delay
bra mainLoop
delay:
mov #0xf000,W6
dloop:
dec W6,W6
cp0 W6
bra NZ,dloop
return
.end
Voor geïnteresseerden in de PIC24 en daarbij passende assemblerprogramma's heb ik een setje in het uploadarchief gezet (USB, interrupt, etc.).
Waar kan ik het uploadarchief vinden?
Onderstaand stukje code laat PORTB aan en uit gaan. Waarom PORTA niet aan en uit gaat, snap ik niet.
.include "p24EP64GP202.inc"
.text
.global __reset
__reset:
mov #__SP_init,w15
mov #__SPLIM_init,w0
mov w0,SPLIM
nop
;TRISA
mov #0x0000, W1
mov W1, TRISA
;TRISB
mov #0x0000, W1
mov W1, TRISB
;ANSELA
mov #0x0000, W1
mov W1, ANSELA
;ANSELB
mov #0x0000, W1
mov W1, ANSELB
mainLoop:
mov #0x0000, W1
mov W1, PORTA
mov #0x0000, W1
mov W1, PORTB
call delay1
mov #0xffff, W1
mov W1, PORTA
mov #0xffff, W1
mov W1, PORTB
call delay1
bra mainLoop
delay1:
mov #0xffff,W6
dloop1:
call delay2
dec W6,W6
cp0 W6
bra NZ,dloop1
return
delay2:
mov #0x4,W7
dloop2:
dec W7,W7
cp0 W7
bra NZ,dloop2
return
.end
EDIT:
Ik denk dat ik er uit ben. De adressen in de linker file komen niet overeen met de adressen in de datasheet. Zie ook deze discussie bij Microchip.
EDIT2:
Linker file verwijdert en code aangepast. EQU regels toegevoegd. Nu knipperen zowel PORTA als PORTB. Fout zit dus echt in het linker script.
.equ TRISA, 0x0E00
.equ PORTA, 0x0E02
.equ LATA, 0x0E04
.equ ODCA, 0x0E06
.equ CNENA, 0x0E08
.equ CNPUA, 0x0E0A
.equ CNPDA, 0x0E0C
.equ ANSELA, 0x0E0E
.equ TRISB, 0x0E10
.equ PORTB, 0x0E12
.equ LATB, 0x0E14
.equ ODCB, 0x0E16
.equ CNENB, 0x0E18
.equ CNPUB, 0x0E1A
.equ CNPDB, 0x0E1C
.equ ANSELB, 0x0E1E
.include "p24EP64GP202.inc"
.text
.global __reset
__reset:
mov #__SP_init,w15
mov #__SPLIM_init,w0
mov w0,SPLIM
nop
;TRISA
mov #0x0000, W1
mov W1, TRISA
;TRISB
mov #0x0000, W1
mov W1, TRISB
;ANSELA
mov #0x0000, W1
mov W1, ANSELA
;ANSELB
mov #0x0000, W1
mov W1, ANSELB
;ODCA
mov #0x0000, W1
mov W1, ODCA
mainLoop:
bset LATA, #0
call delay1
mov #0x0000, W1
mov W1, PORTA
mov #0x0000, W1
mov W1, PORTB
call delay1
mov #0xffff, W1
mov W1, PORTA
mov #0xffff, W1
mov W1, PORTB
call delay1
bra mainLoop
delay1:
mov #0xffff,W6
dloop1:
call delay2
dec W6,W6
cp0 W6
bra NZ,dloop1
return
delay2:
mov #0x4,W7
dloop2:
dec W7,W7
cp0 W7
bra NZ,dloop2
return
.end
EDIT3:
Reactie Microchip:
Thank you for reporting this issue to us.
I assume you are using the XC16 v1.10 compiler.
I will attach the gld file of this device from XC16 v1.00, which does not seem to have this issue. You can try to merge the two linker script files by using a merging tool like WinMerge or KDiff3 and use it in your projects.
I will report this issue to the XC16 division and they will probably fix it by the next release of compiler.
Mooi dat je eruit gekomen bent. Microchip maakt het je soms erg moeilijk....
Mijn files:
http://www.uploadarchief.net/overview.html;jsessionid=D1188A30FEAB516A…
(ik werk met ASM30/C30).