Frage zu einem kleinen PIC-ASS-Programm

Begonnen von misax, 17.11.2022, 11:52:27 CET

⏪ vorheriges - nächstes ⏩

misax

hallo;
ich habe folgendes kleine PIC-ASS-Programm:
    PROCESSOR 16F15313
    #include <pic16f15313.inc>
    PSECT psect1
    org    0x00
    goto   main
   
    PSECT psect2
    main:
    movlw 0b11111011
    movwf TRISA
    movlw 0b00000100
    movwf PORTA
    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 ?

misax

mittlerweile sieht das Programm so aus aber es funktioniert immer noch nicht:

    PROCESSOR 16F15313
    #include <pic16f15313.inc>
   
// PIC16F15313 Configuration Bit Settings

// CONFIG1
 config FEXTOSC = OFF
 config RSTOSC = EXT1X
 config CLKOUTEN = OFF
 config CSWEN = ON
 config FCMEN = ON
// CONFIG2
 config MCLRE = OFF
 config PWRTE = OFF
 config LPBOREN = OFF
 config BOREN = ON
 config BORV = LO
 config ZCD = OFF
 config PPS1WAY = ON
 config STVREN = ON

// CONFIG3
 config WDTCPS = WDTCPS_31
 config WDTE = OFF
 config WDTCWS = WDTCWS_7
 config WDTCCS = SC

// CONFIG4
 config BBSIZE = BB512
 config BBEN = OFF
 config SAFEN = OFF
 config WRTAPP = OFF
 config WRTB = OFF
 config WRTC = OFF
 config WRTSAF = OFF
 config LVP = OFF

// CONFIG5
 config CP = OFF

#include <xc.h>
   
    PSECT psect1
    org    0x00
    goto   main
   
    PSECT psect2
   
    main:
    banksel PORTA
    clrf    PORTA
    banksel LATA
    clrf    LATA
    banksel ANSELA
    clrf    ANSELA
   
    banksel TRISA
    movlw   0b11111011
    movwf   TRISA
   
    banksel PORTA
    movlw   0b00000100
    movwf   PORTA
   
    loop:
    goto   loop
    end

picass

#2
Wenn du deine PICs - so wie bisher - mit 10 MHz betreibst, wird es auch nicht möglich, da irgendwas zu beobachten, zumal auch keine Zeitschleife eingebaut ist.
Die Initialisierung der Ports gehört nicht in das Hauptprogramm, das muss außerhalb, also vorher stattfinden.
Außerdem läuft laut Programm einmal durch und hängt in der Endlos-Schleife am Ende fest. Wie willst du da irgendwas beobachten?

Hast du schon mal in mein heute eingestelltes Beispiel für ein Blink-Programm geschaut? Falls nicht, tue es.
Grüße, picass

pic18

was ist bei Dir Pin 5?, den Ausgang setzt man mit LATA, PORTA ist Eingang

pic18

Zitat von: picass am 17.11.2022, 16:17:46 CETWenn du deine PICs - so wie bisher - mit 10 MHz betreibst, wird es auch nicht möglich, da irgendwas zu beobachten, zumal auch keine Zeitschleife eingebaut ist.


Er hat am Ende des Programms eine Endlosschleife, dadurch wird nur einmal der Port gesetzt. (wenn richtig programmiert)

misax

die Zeilen 61 bis 63 habe ich jettzt ersetzt durch
    banksel LATA
    movlw   0b00000100
    movwf   LATA
aber es geht immer noch nicht.
Ich will beobachten, dass die LED leuchtet.

misax

das Beispiel-blink-Programm habe ich mir angeschaut, aber das ist mit MPASM erstellt und nicht mit pic-ass. Als ich versuchte, MPASM zu installieren, komme ich auf Hinweise, das sei mit der MPLAB IDE schon integriert, aber ich kann es auf der Übersichtsseite, wo man den Compiler auswählt, nicht sehen.

vloki

Wie zum Henker kommst du auf die Idee mit dem ORG ?
(das ist eigentlich schon Jahrzehnte obsolet)

Nimm doch einfach die Beispiele im User_Guide_for
_Emb... (Kapitel 4 oder 7)
MPLABX  XC8  KiCAD

misax

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

misax

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 ?

picass

Ja, ich benutze noch den Vorgänger des jetzt aktuellen Assemblers. Aber bleibe ruhig beim Neuen, es gibt schon Unterschiede.
Aber so wie ich dein Programm lese, läuft das einmal schnellstens durch mit Ein-u. Ausschalten eines Ports, wobei man bei der irren Geschwindigkeit natürlich nie was beobachten kann, und am Ende läuft es in eine Endlosschleife, in der nichts passiert.

Du hattest doch schonmal einen Programmentwurf mit einer Zeitschleife als Pause. Nur so kannst du beim Blinken zuschauen.
Grüße, lippe1audi

pic18

wie hast du denn den Ausgang beschaltet? Ich habe im Datenblatt gesehen, das der Port auch ein Open-Drain Control Register hat.
Ist der Quarz auch richtig programmiert? was heißen diese Zeilen?
Code: asm
config FEXTOSC = OFF
config RSTOSC = EXT1X

vloki

#12
Zitat von: misax am 17.11.2022, 18:05:56 CETKann 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 ?
Ich glaub die Antwort hier https://www.mikrocontroller.net/topic/546142#7255941
trifft es ganz gut ;-)
Zitat...
Das (der pic-as) ist nun kein "Einfach-Absolut-Assembler" wie MPASM.
Man muss das Handbuch lesen wenn man ihn benutzen will.
...
Mit dem ersten Versuch nur den Code des Beispiels 7. Interrupts and Bits Example For Mid-range Devices zu kopieren, bin ich gleich mal gescheitert.
Das Programm landete irgendwo im Speicher und der IR hat null funktioniert.
(Kann man im Debug-Modus ja sehen, wenn man das Program-Memory anzeigen lässt)

Man muss dann schon wissen, wie das mit den Programsections funktioniert.
Das erfährt man aber in 7.4 Building the Example
Die vier Seiten bis dahin kann man schon mal lesen, aber ist jetzt nicht unbedingt was für blutige Anfänger ;)
MPLABX  XC8  KiCAD

picass

Räusper.... gestern ist mir eine Begriffsverwirrung unterlaufen: das Prog "hallo world" lässt ja nur eine LED aufleuchten. Selbst hatte ich das Folgeprog, also das Blinken einer LED im Sinne, daher traf eine Kommentierung leider daneben. :(

-------------------------------------------------------------------------------
; *******************************************************************
; Lesson 1 - "Hello World"
;
; The LEDs are connected to input-outpins (I/O) RC0 through RC3. First, the I/O pin
; must be configured for an output. In this case, when one of these pins is driven high
; (RC0 =  1 ), the LED will turn on. These two logic levels are derived from the power-
; pins of the PIC MCU. Since the PIC devices power pin (VDD) is connected to 5V
;and the source (VSS) to ground (0V), a 1 is equivalent to 5V, and a 0 is 0V.
;
; This turns on DS1 LED on the Low Pin Count Demo Board.
;
; PIC: 18F14K22
; Compiler: MPASM v5.43
; IDE: MPLABX v1.10
;
; Board: PICkit 3 Low Pin Count Demo Board
; Date: 6.1.2012

; *******************************************************************
; * See Low Pin Count Demo Board User's Guide for Lesson Information*
; *******************************************************************

#include <p18F14K22.inc>

   ;Config settings 
   CONFIG IESO = OFF, PLLEN = OFF, FOSC = IRC, FCMEN = OFF, PCLKEN = OFF
   CONFIG BOREN = SBORDIS, BORV = 19, PWRTEN = OFF, WDTEN = OFF
   CONFIG MCLRE = OFF, HFOFST = OFF, DEBUG = OFF, STVREN = ON
   CONFIG XINST = OFF, BBSIZ = OFF, LVP = OFF
   CONFIG CP0 = OFF, CP1 = OFF
   CONFIG CPD = OFF, CPB = OFF
   CONFIG WRT0 = OFF, WRT1 = OFF
   CONFIG WRTB = OFF, WRTC = OFF, WRTD = OFF
   CONFIG EBTR0 = OFF, EBTR1 = OFF
   CONFIG EBTRB = OFF

   errorlevel -302         ;supress the 'not in bank0' warning

   ORG 0
Start:
    bcf     TRISC,0       ;make IO Pin C0 an output
    clrf    LATC            ;init the LATCH by turning off everything
    bsf     LATC,0        ;turn on LED C0 (DS1)
    goto    $                 ;sit here forever!

   End
----------------------------------------------------------------------------------------------------------------
Habe mir mal erlaubt, die erste der genannten 13 Lektionen im Microchip Original einzustellen. Dafür braucht man natürlich eine MPLAB X IDE bis Vers. 5.35. Aber wie erfrischend kurz dies Programm ausfällt, kann man ja im Vergleich sehen. Dagegen ist das PIC As-Prog eines für Stotterer und mehr als doppelt solang.

Die ORG-Anweisung..... wie ich dazu komme, die immer noch....? Ist u.a. eine Frage, auf welchem Wege man in das Selbst-Erlernen von Assembler einstieg. Bei mir lief das immer über funktionierende Beispiele. So war das ganz früher mit der Z80-CPU, beim  PIC gelang das mithilfe der 13 Lektionen von Microchip. Und da mir für meine Steuerprogramme der PIC18F14K22 immer noch mehr als genügt – davon habe ich ca. 20 Stück noch im Vorratsfach - , werde ich auch beim MPASM bleiben. Das Stotterer-Prog dient ausreichend als abschreckendes Beispiel für ,,Angesagtes."

Mir reicht es, wenn ein Programm funktioniert und wenn da Jahrzehnte Altes dazu beiträgt, kann ich auf neue Stotterübungen und Komplizierungen bestens verzichten.
Grüße, picass

Schnellantwort

Name:
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau