mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C-Programmierer braucht kleine Assembler-Hilfe


Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich muss einen Assembler-Code an einen anderen PIC anpassen. Ich habe 
bis jetzt nur in C programmiert. Habe aber leider quasi keine Ahnung von 
Assembler.
Hier der Code für den PIC24FJ128GA010. Handelt sich übrigens um einen 
Ausschnitt aus einem Bootloader. Alles andere bis auf diese 
UART-Pin-Zuweisung war einfach umzuschreiben.
Beim PIC24FJ128GA010 sind RX und TX fest auf zwei PINs gelegt. Beim dem 
PCI auf den ich das ganze anpassen muss, gibt es Peripheral Pin Select.
Hier erstmal der Assembler-Code:
;----------------------------------------------------------------------
; UART pps config
;----------------------------------------------------------------------
.ifdef HAS_PPS
  .error "UART pps is not configured. Read datasheet and configure pps."      ;xxx remove this line      
  
  ; ** IMPORTANT **
  ;
  ; THIS CODE IS JUST A TEMPLATE AND WILL MOST LIKELY NOT WORK FOR YOU, 
  ; READ THE DATASHEET AND ALTER LINES MARKED WITH XXX
  ;
  ; ** IMPORTANT **
      
  ; Backup, these are restored in exit code at end of file
  ; Changes needs to be done in exit, search for xxx
  mov    RPINR18, WPPSTEMP1    ;xxx
  mov    RPOR3, WPPSTEMP2      ;xxx

  ; Receive, map pin to uart
  bclr  RPINR18, #U1RXR0    ;xxx
  bclr  RPINR18, #U1RXR1    ;xxx
  bclr  RPINR18, #U1RXR2    ;xxx
  bclr  RPINR18, #U1RXR3    ;xxx
  bclr  RPINR18, #U1RXR4    ;xxx
  bclr  RPINR18, #U1RXR5    ;xxx
  
  ; Transmit, map uart to pin
  bset  RPOR3, #RP7R0      ;xxx
  bset  RPOR3, #RP7R1      ;xxx
  bclr  RPOR3, #RP7R2      ;xxx
  bclr  RPOR3, #RP7R3      ;xxx
  bclr  RPOR3, #RP7R4      ;xxx    
  bclr  RPOR3, #RP7R5      ;xxx
.endif  

;------------------------------------------------------------------------------
; Register usage
;------------------------------------------------------------------------------
    .equ  WPPSTEMP1,  W6    ;used to restore pps register
    .equ  WPPSTEMP2,  W7    ;used to restore pps register




Hier die PIN-Zuweisung in C für meinen PIC24FJ128GA106 mit Peripheral 
Pin Select.
//U1RX = RP22
RPINR18bits.U1RXR = 22;

//RP25 = U1TX_IO   
RPOR12bits.RP25R = U1TX_IO;    

Wie muss ich den Assemble-Code für den PIC24FJ128GA106 anpassen?

Gruß
Dieter

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>//U1RX = RP22
>RPINR18bits.U1RXR = 22;

22 ist binär 010110, demnach sind die Einzelbits U1RXR0 bis U1RXR5 von 
RPINR18 entsprechend zu setzen oder zu löschen:

  bclr  RPINR18, #U1RXR0    ;0
  bset  RPINR18, #U1RXR1    ;1
  bset  RPINR18, #U1RXR2    ;1
  bclr  RPINR18, #U1RXR3    ;0
  bset  RPINR18, #U1RXR4    ;1
  bclr  RPINR18, #U1RXR5    ;0

Für RPOR12 entsprechend eben genauso vorgehen, nur mit den anderen Bit- 
und Registernamen.

Grüße,

Peter

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

vielen Dank, ich hat's gestern dann doch selber hin bekommen, nur nichts 
hier rein geschrieben, weil ich dachte, der Thread wäre schon in den 
Weiten des Forums verloren gegangen. ;)

Gruß
Dieter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.