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


von Dieter (Gast)


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:
1
;----------------------------------------------------------------------
2
; UART pps config
3
;----------------------------------------------------------------------
4
.ifdef HAS_PPS
5
  .error "UART pps is not configured. Read datasheet and configure pps."      ;xxx remove this line      
6
  
7
  ; ** IMPORTANT **
8
  ;
9
  ; THIS CODE IS JUST A TEMPLATE AND WILL MOST LIKELY NOT WORK FOR YOU, 
10
  ; READ THE DATASHEET AND ALTER LINES MARKED WITH XXX
11
  ;
12
  ; ** IMPORTANT **
13
      
14
  ; Backup, these are restored in exit code at end of file
15
  ; Changes needs to be done in exit, search for xxx
16
  mov    RPINR18, WPPSTEMP1    ;xxx
17
  mov    RPOR3, WPPSTEMP2      ;xxx
18
19
  ; Receive, map pin to uart
20
  bclr  RPINR18, #U1RXR0    ;xxx
21
  bclr  RPINR18, #U1RXR1    ;xxx
22
  bclr  RPINR18, #U1RXR2    ;xxx
23
  bclr  RPINR18, #U1RXR3    ;xxx
24
  bclr  RPINR18, #U1RXR4    ;xxx
25
  bclr  RPINR18, #U1RXR5    ;xxx
26
  
27
  ; Transmit, map uart to pin
28
  bset  RPOR3, #RP7R0      ;xxx
29
  bset  RPOR3, #RP7R1      ;xxx
30
  bclr  RPOR3, #RP7R2      ;xxx
31
  bclr  RPOR3, #RP7R3      ;xxx
32
  bclr  RPOR3, #RP7R4      ;xxx    
33
  bclr  RPOR3, #RP7R5      ;xxx
34
.endif

1
;------------------------------------------------------------------------------
2
; Register usage
3
;------------------------------------------------------------------------------
4
    .equ  WPPSTEMP1,  W6    ;used to restore pps register
5
    .equ  WPPSTEMP2,  W7    ;used to restore pps register




Hier die PIN-Zuweisung in C für meinen PIC24FJ128GA106 mit Peripheral 
Pin Select.
1
//U1RX = RP22
2
RPINR18bits.U1RXR = 22;
3
4
//RP25 = U1TX_IO   
5
RPOR12bits.RP25R = U1TX_IO;

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

Gruß
Dieter

von Peter D. (pdiener) Benutzerseite


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

von Dieter (Gast)


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

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.