Antworten

Einschränkungen: 8 pro Beitrag (8 verbleibend), maximale Gesamtgröße 8,79 MB, maximale Individualgröße 1 MB
Entfernen Sie den Haken der Dateianhänge, die gelöscht werden sollen
Klicken Sie hier oder ziehen Sie Dateien hierher, um sie anzuhängen.
Anhänge und andere Optionen
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

Zusammenfassung

Autor vloki
 - Heute um 14:03:54 CET
Ich schau mir grad Lesson 4 an, wie das in PIC-AS mit dem Q41 aussehen würde.
Meine Meinung, ganz ehrlich - kann man sicher machen, aber ob das wirklich noch sinnvoll ist?

Der ADC von den Q-Typen hat mehr als 20 Register, die konfiguriert werden können.
Wird wohl langsam Zeit sich mit dem MPLAB Code Configurator (MCC) anzufreunden ;-)

Damit klickt man sich die Konfiguration zusammen und das Ding spuckt den Code (in C) aus.
Autor vloki
 - Heute um 09:43:15 CET
Zitat von: pic18 in 17.11.2025, 19:41:30 CETVielleicht sehe ich das Problem falsch...

Der Code sollte so identisch wie möglich mit der Lesson 3 im Low Pin Count Demo Board User's Guide bleiben.
Nur das was unbedingt nötig ist für den neueren Assembler und PIC wurde geändert.

Das vermeintliche "left shift" (lsrf) war eigentlich ein "logical shift right"
und das unterscheidet sich vom rotate right. (nix Rotation)
Autor picass
 - Gestern um 19:14:20 CET
Zitat von: vloki date=1763390927Ansonsten könnte Lesson 3 so aussehen:

So sieht es in der hatten Realität aus: Sie rotieren, die 4 LEDs ! Nicht wirklich, aber ihr Leuchten !

Der Debugger hat nix zu meckern und morgen mache ich mich dran, zu verstehen, warum das klappt! Heute steckte ich noch mit beiden Armen tief und lange im Rollladenkasten, aber wenn morgen der voll krasse Durchblick erreicht werden sollte, dann......, dann passiert leider nix: sitze z.Z. auf dem Trockenen, nix mit "auf den Erfolg machen wir erst mal einen und einen zweiten und den dritten sowieso usw.  .......drauf".
Grüße, picass
rotieren.jpg
rotieren.jpg

Autor Ottmar
 - Gestern um 12:24:02 CET
Grrr... Falscher Finger!

...und entsprechend gibt es daselbe für shift left:
RLCF
RLNCF
Autor Ottmar
 - Gestern um 12:09:16 CET
Zitat Vloki: 
[Das shift left gibt es bei den PIC18 nicht. Kommt wohl von den neuen PIC16]
Doch: 
RRCF rotate left through CARRY
RRNCF rotate left no carry
Mit CARRY ist 'STATUS,C' gemeint.
Autor pic18
 - 17.11.2025, 20:20:33 CET
muss movwf,LATC,A heißen, ich habe es nochmal zusammengeschrieben:
init0:
clrf    TRISC,A         ;make all of PORTC an output
init1:
movlw 0x08;
movwf LATC,A; setzt Bit 3 und löscht alle anderen Bits
Mainloop:
OndelayLoop:
    decfsz  Delay1,f,A      ;Waste time.
    goto    OndelayLoop     ;The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
    decfsz  Delay2,f,A      ;The outer loop takes an additional 3 instructions per lap * 256 loops
    goto    OndelayLoop     ;(768+3) * 256 = 197376 instructions / 250K instructions per second = 0.79 sec.
Rotate:
    bcf     STATUS,0,A        ;clear the carry
    rrcf    LATC,F,A        ;shift the LEDs and turn on the next LED to the right
    bnc     MainLoop      ;
    bra     init1        ;repeat this program forever
Autor pic18
 - 17.11.2025, 19:41:30 CET
Vielleicht sehe ich das Problem falsch. Ich würde es so programmieren. Wobei hier LATC,7 immer durch die Rotation gelöscht wird. Besser wäre auch anstatt:
bsf     LATC,3,A

movlw 0x08;
movwf LATC,F,A; setzt Bit 3 und löscht alle anderen Bits

Rotate:
    bcf        STATUS,0,A        ;clear the carry
    rrcf    LATC,F,A        ;shift the LEDs and turn on the next LED to the right
    bnc   MainLoop      ;
    bsf     LATC,3,A        ;yes, it did and now start the sequence over again by turning on DS4
    bra    MainLoop        ;repeat this program forever

Zitat von: vloki in 17.11.2025, 15:48:47 CETDas shift left gibt es bei den PIC18 nicht
RLCF f, d, a Rotate Left f through Carry
Autor vloki
 - 17.11.2025, 15:48:47 CET
Zitat von: picass in 17.11.2025, 09:55:05 CETAuch das Shift-Left und die Prüfung des geschobenen Carry-Bits wird angemeckert: wäre keine korrekte Syntax.
Für das Carry finde ich irgendwie auch keinen gültigen Namen. Muss man evtl. selber definieren.
Das shift left gibt es bei den PIC18 nicht. Kommt wohl von den neuen PIC16.

Ansonsten könnte Lesson 3 so aussehen:
; PICkit 3 Starter Kit
; Assembly Lesson 3
;
; VSK @THU 17.11.2025
; MPLABX v6.20 / pic-as v3.10
; Board: PICkit 3 Low Pin Count Demo Board
; *******************************************************************
; * See Low Pin Count Demo Board User's Guide for Lesson Information*
; *******************************************************************

; config statements in Config_18F1xQ41.s
; cpu clock speed is set to 1MHz in the configuration bits
    
#include <xc.inc>

GLOBAL Delay1,Delay2;make them global -> watchable when debugging

PSECT udata_acs     ;shared memory location that is accessible from all banks
Delay1:
    DS      1       ;reserve 1 byte for Delay1
Delay2:
    DS      1       ;reserve 1 byte for Delay2

    ; -------------------LATC-----------------
    ; Bit#:  -7---6---5---4---3---2---1---0---
    ; LED:   ---------------|DS4|DS3|DS2|DS1|-
    ; ----------------------------------------

PSECT resetVec,class=CODE,reloc=2   ; define "-presetVec=0h" in custom linker options
resetVec:
;cpu clock speed is set to 1MHz in the configuration bits
    clrf    TRISC,A         ;make all of PORTC an output
    movlw   00001000B       ;start the rotation by setting DS4 ON
    movwf   LATC,A          ;write contents of the working register to the latch
MainLoop:
OndelayLoop:
    decfsz  Delay1,f,A      ;Waste time.
    goto    OndelayLoop     ;The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
    decfsz  Delay2,f,A      ;The outer loop takes an additional 3 instructions per lap * 256 loops
    goto    OndelayLoop     ;(768+3) * 256 = 197376 instructions / 250K instructions per second = 0.79 sec.

Rotate:
    rrcf    LATC,F,A        ;shift the LEDs and turn on the next LED to the right
    btfss   STATUS,0,A      ;did the bit rotate into the carry (i.e. was DS1 just lit?)
    goto    MainLoop	    ;nope, repeat this program forever
    bsf     LATC,3,A        ;yes, it did and now start the sequence over again by turning on DS4
    bcf	    STATUS,0,A	    ;clear the carry
    goto    MainLoop        ;repeat this program forever

    END     resetVec
  CONFIG  RSTOSC = HFINTOSC_1MHZ; Reset Oscillator Selection (HFINTOSC with HFFRQ = 4 MHz and CDIV = 4:1)
Autor vloki
 - 17.11.2025, 10:44:50 CET
Zitat von: picass in 17.11.2025, 09:55:05 CETÜbers Wochenende lief leider nicht viel, was u.a. daran lag, dass ab der Lesson3 nichts mehr ging.
Jo, wie erwähnt war ich nie über Lesson 2 hinaus gekommen ;-)
Autor picass
 - 17.11.2025, 09:55:05 CET
Übers Wochenende lief leider nicht viel, was u.a. daran lag, dass ab der Lesson3 nichts mehr ging. Die Lesson2 hatte ich allerdings nach Raus-Löschen der zwischenzeitlichen Änderungen wieder zu einwandfreier Funktion gebracht. Allerdings lief die CPU nach dem Außerkraftsetzen der angemeckerten Oszillator-Einstellungen wohl mit 4 MHz: das Blinken erfolgt mit geschätzt 4 bis 5 mal pro Sek..
Bei L3 wird alles angemeckert: jedwede Speicher-Zuweisung, Variable,..... Da ist nun Grundlagenarbeit erforderlich und die wird aktuell auch ausgebremst, weil heute morgen sich einer der Rollladenpanzer in unserem Haus beim Hochziehen mit Knall verabschiedet hat. Sobald wieder Zeit ist, muss unbedingt versucht werden zu klären, wie man die Zuweisung des Programms in den Speicherraum hinbekommt. Nachdem die ORG 0x00h nicht mehr funktionieren soll, ist das im Nebel. Auch das Shift-Left und die Prüfung des geschobenen Carry-Bits wird angemeckert: wäre keine korrekte Syntax.
Grüße, picass
🡱 🡳