Forum: Mikrocontroller und Digitale Elektronik Frage zu einem kleinen PIC-ASS-Programm


von misax (Gast)


Lesenswert?

hallo;
ich habe folgendes kleine PIC-ASS-Programm:
1
    PROCESSOR 16F15313
2
    #include <pic16f15313.inc>
3
4
    PSECT psect1
5
    org    0x00
6
    goto   main
7
    
8
    PSECT psect2
9
    main:
10
    movlw 0b11111011
11
    movwf TRISA
12
    movlw 0b00000100
13
    movwf PORTA
14
    end
Das Programm soll eine LED, die am PIN 5 eines PIC16F15313 angeschlossen 
ist, zum Leuchten bringen.
Warum tut sie das nicht ? Hat das Programm einen Fehler oder ist das 
Programm so richtig und ich muss den Fehler woanders suchen ?

von FOp (Gast)


Lesenswert?

Pin 5 ist PA2 stimmt soweit schonmal.
TRIS auf 0 für Ausgang passt auch.

Und jetzt die Frage : wo ist der andere Pin der Led hin verbunden ?
An den Vorwiderstand wirst Du ja gedacht haben, oder ?
Ist die Led nicht verpolt ?
Kannst ja in Zeile 12 mal 0 ins W Register laden und schauen, ob die Led 
leuchtet, wenn der Pin low ist.

von Michael S. (misax)


Lesenswert?

0 in Zeile 12 hat (erwartungsgemäß) nichts gebracht. Klar Vorwiderstand 
ist dabei und verpolt ist sie auch nicht, habe mit direktem 5V-Anschluß 
getestet.

von Teo D. (teoderix)


Lesenswert?

Passt die restliche Config....
Mach mal eine Endlosschleife vor end.

von Christian M. (christian_m280)


Lesenswert?

CLRF ANSELA

Gruss Chregu

von Toxic (Gast)


Angehängte Dateien:

Lesenswert?

Christian M. schrieb:
> CLRF ANSELA

Datenblatt gibt in der Regel umfassendere Informationen...

Microchip hat einige Videos fuer Beginner.
Frueher waren die auf YouTube sind jetzt aber scheinbar ausgelagert auf 
eine andere Platform.
https://www.microchip.com/webinars.microchip.com/WebinarDetails.aspx?dDocName=en556253

https://vimeo.com/369426557

von Hans (Gast)


Lesenswert?

Versuch mal:

    movlw 0b00000100

    movwf LATA

von Michael S. (misax)


Lesenswert?

also ich hab jetzt alles Hinweise von euch ins Programm eingebaut. dann 
hab ich ein kleines C-Programm geschrieben, das funktioniert. dann hab 
ich die configs aus dem C-Programm ins Assemblerprogramm übernommen. 
aber es geht immer noch nicht. so sieht das Programm jetzt aus:
1
    PROCESSOR 16F15313
2
    #include <pic16f15313.inc>
3
    
4
// PIC16F15313 Configuration Bit Settings
5
6
// CONFIG1
7
 config FEXTOSC = OFF
8
 config RSTOSC = EXT1X
9
 config CLKOUTEN = OFF
10
 config CSWEN = ON
11
 config FCMEN = ON
12
// CONFIG2
13
 config MCLRE = OFF
14
 config PWRTE = OFF
15
 config LPBOREN = OFF
16
 config BOREN = ON
17
 config BORV = LO
18
 config ZCD = OFF
19
 config PPS1WAY = ON
20
 config STVREN = ON
21
22
// CONFIG3
23
 config WDTCPS = WDTCPS_31
24
 config WDTE = OFF
25
 config WDTCWS = WDTCWS_7
26
 config WDTCCS = SC
27
28
// CONFIG4
29
 config BBSIZE = BB512
30
 config BBEN = OFF
31
 config SAFEN = OFF
32
 config WRTAPP = OFF
33
 config WRTB = OFF
34
 config WRTC = OFF
35
 config WRTSAF = OFF
36
 config LVP = OFF
37
38
// CONFIG5
39
 config CP = OFF
40
41
#include <xc.h>
42
    
43
    PSECT psect1
44
    org    0x00
45
    goto   main
46
    
47
    PSECT psect2
48
    
49
    main:
50
    banksel PORTA
51
    clrf    PORTA
52
    banksel LATA
53
    clrf    LATA
54
    banksel ANSELA
55
    clrf    ANSELA
56
    
57
    banksel TRISA
58
    movlw   0b11111011
59
    movwf   TRISA
60
    
61
    banksel PORTA
62
    movlw   0b00000100
63
    movwf   PORTA
64
    
65
    loop:
66
    goto   loop
67
    end

von Michael S. (misax)


Lesenswert?

die Zeilen 61 bis 63 habe ich jetzt ersetzt durch
    banksel LATA
    movlw   0b00000100
    movwf   LATA
aber es geht immer noch nicht.

von Teo D. (teoderix)


Lesenswert?

Michael S. schrieb:
> banksel TRISA
>     movlw   0b11111011
>     movwf   TRISA
>
>     banksel PORTA
>     movlw   0b00000100
>     movwf   PORTA

Hmmm, wie schnell kannst du eigentlich gucken?

von Michael S. (misax)


Lesenswert?

wie meinst du das ? ich mache sie doch an und dann gehe ich in einen 
ewigen Loop. dann bleibt sie doch an. Oder ?

von Teo D. (teoderix)


Lesenswert?

Michael S. schrieb:
> wie meinst du das ?

Me Culpa, hab das weiter oben eingeführte LATA, irgend wie auf TRISA 
"gemappt". Sorry

Wie viel Strom zieht den die LED?

von Michael S. (misax)


Lesenswert?

wie gesagt, wenn ich ein C-Programm lade, geht die LED einwandfrei.

welcher Assembler ist denn jetzt der neuere ? MPASM pder pic-ass ?

: Bearbeitet durch User
von Michael S. (misax)


Lesenswert?

Kann es sein dass die meisten hier im Forum noch den MPASM haben und 
ich, da ich die Version 6 von der MPLAB IDE habe, den pic-ass und es 
zwischen den beiden Unterschiede gibt, wie ein Programm aufzubauen ist ?

von H. H. (Gast)


Lesenswert?


von Toxic (Gast)


Angehängte Dateien:

Lesenswert?

Michael S. schrieb:
> welcher Assembler ist denn jetzt der neuere ? MPASM pder pic-ass ?

https://www.microchip.com/forums/m1150682.aspx

"pic-as is a brand new eco-system that has been first released with 
MPLABX 5.40, and is still having the bugs and limitations ironed out of 
it. It is NOT something I would recommend for learning on."

Ich habe bisher nur nur mit dem C-Compiler und MPASM-Assembler 
gearbeitet.
Pic-As ist mir neu - erstelle ja nicht jeden Tag ein neues Progamm....
Mit Sicherheit wuerde ich mein naechstes Assemblerpr0gramm wieder mit 
dem MPASM erstellen - wenn ueberhaupt !
Ich verwende fast nur noch den C-Compiler selbst fuer kleinste und 
ziemlich alte PICs.

Habe eben meine MPLAB-IDE gestartet - und tatsaechlich - MPASM ist nicht 
mehr verfuegbar.So ein Mist.Zum Glueck habe ich alle alten 
Assemblerprogramme schon laengst in C konvertiert.
Aber nun werden ich mich wohl mit Pic-As anfreunden muessen.....
==================================
Du weisst ja,das du den Simulator verwenden kannst?
Das habe ich eben getan und wie es aussieht gibt es Probleme mit der 
Konfiguration - der Main-Code wird erst gar nicht durchgefuehrt.
Im uebrigen:
xc.h ersetzt normalerweise alle pic-header files in der C-Umgebung.
Du verwendest 2 mal die include-Anweisung fuer den PIC :#include <xc.h> 
und
#include <pic16f15313.inc>
Den Pic-As schaue ich mir vorlaeufig nicht an....kein Bedarf im Moment

von ... (Gast)


Lesenswert?

> RTFM

Der kann nicht lesen.
Ist das noch nicht allgemein bekannt?

Und mit FLAs kann er auch nichts anfangen.

Vermutlich bindet ihm Mutti auch noch die Schuhe zu.

von Hans (Gast)


Lesenswert?

Psect1 u. Psect2 würde ich mal versuchshalber weglassen, jedenfalls 
wurde dies früher bei kleinen Pics nicht gebraucht oder aber eher in C 
bei grösseren Pics.
Hast du ein template von MPLABX verwendet, oder wie bist du auf Psect 
gekommen?

von Hans (Gast)


Lesenswert?

Schon seit längerem haben offenbar auch andere Probleme mit Pic as.

https://www.microchip.com/forums/m1150682.aspx

von ... (Gast)


Lesenswert?

> haben offenbar auch andere Probleme mit Pic as

Wenn man in C und Assembler schreibt, war der XC8-Assembler,
darum handelt es bei "PICAS" ja wohl, schon beim alten
MPLAB 8.92 nach der XC8-Installation mit an Bord.
Das ist nun kein "Einfach-Absolut-Assembler" wie MPASM.
Man muss das Handbuch lesen wenn man ihn benutzen will.
Bei Unklarheiten kann es auch hilfreich sein, sich
den vom Compiler generierten Assemblercode anzusehen.

Dann schafft man es sogar, z.B. eine Interruptroutine in
Assembler seinem (C-)Projekt hinzuzufuegen.
Die ist nun bzgl. der Attribute etwas komplexer.

Notorische Nichthandbuchleser werden mit dem nicht viel
Freude haben.
Der ist halt nicht fuer Weicheier die nur Code kopieren koennen.

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

... statt hier rumhängen, vielleicht erstmal das user guide pic-as 
lesen!
1
#include <xc.inc>
2
processor 16F15313
3
4
// PIC16F15313 Configuration Bit Settings
5
// CONFIG1
6
config FEXTOSC = OFF
7
config RSTOSC = EXT1X
8
config CLKOUTEN = OFF
9
config CSWEN = ON
10
config FCMEN = ON
11
// CONFIG2
12
config MCLRE = OFF
13
config PWRTE = OFF
14
config LPBOREN = OFF
15
config BOREN = ON
16
config BORV = LO
17
config ZCD = OFF
18
config PPS1WAY = ON
19
config STVREN = ON
20
// CONFIG3
21
config WDTCPS = WDTCPS_31
22
config WDTE = OFF
23
config WDTCWS = WDTCWS_7
24
config WDTCCS = SC
25
// CONFIG4
26
config BBSIZE = BB512
27
config BBEN = OFF
28
config SAFEN = OFF
29
config WRTAPP = OFF
30
config WRTB = OFF
31
config WRTC = OFF
32
config WRTSAF = OFF
33
config LVP = OFF
34
// CONFIG5
35
config CP = OFF
36
37
38
psect ResetVec, global, class=CODE, abs, ovrld, delta=2
39
ResetVec:
40
   goto  main
41
42
   org  0x20
43
main:
44
   banksel  PORTA
45
   clrf  PORTA
46
   banksel  LATA
47
   clrf  LATA
48
   banksel  ANSELA
49
   clrf  ANSELA
50
51
   banksel  TRISA
52
   movlw  11111011B
53
   movwf  TRISA
54
55
   banksel  PORTA
56
   movlw  00000100B
57
   movwf  PORTA
58
59
loop:
60
   goto  loop
61
   end

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

... die absolute "org" Anweisung würde ich nur in Ausnahmefall benutzen, 
weil dann viele Linker Infos wegfallen!

Besser benutzen "psect ResetVec, class=CODE, delta=2"
und im Project unter Linker die -pResetVec Option nutzen!
Dann ist die org Adresse relative im Segment definiert

: Bearbeitet durch User
von Toxic (Gast)


Angehängte Dateien:

Lesenswert?

Apollo M. schrieb:
> Besser benutzen "psect ResetVec, class=CODE, delta=2"

Wie dem auch sei - dein Code funktioniert...

Beim Debuggen gibt aber eine Warnmeldung:
:0:: warning: (528) no start record; entry point defaults to zero

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

Toxic schrieb:
> :0:: warning: (528) no start record; entry point defaults to zero

Wenn Linker Option -p genutzt wird, dann "end ResetVec" und die Warnung 
ist weg!

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

Toxic schrieb:
> :0:: warning: (528) no start record; entry point defaults to zero

Mit absolute org ... im psect "ovrld" weg lassen und dann wieder "end 
ResetVec" !

: Bearbeitet durch User
von Toxic (Gast)


Lesenswert?

Apollo M. schrieb:
> Mit absolute org ... im psect "ovrld" weg lassen und dann wieder "end
> ResetVec" !

Ich hab seit einiger Zeit nichts mehr mit dm Assembler gemacht(MPASM) 
und vom Pic As habe ich heute erstmals gehoert.
Bin zur Zeit nicht mehr auf dem Laufenden - manchmal lohnt es sich 
mitzulesen...
Aber Dank deiner Initiative kann der TO nun endlich die Led zum Leuchten 
bringen.Jetzt steht der Weg zur PWM-Steuerung eines Tesla Motors mit 
einem Encoder rechts neben dem Lenkrad nichts mehr im Wege...😉

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.