Hallo,
ich experementiere gerade mit dem MPLAB PIC Simulator und einem
Assembler Programm das später auf einem PIC18F46K80 mit einem 64MHz
externen Oscillator laufen soll.
Nun wollte ich mich mit USART auseinander setzten und versuchen ein paar
Bytes zu senden aber dabei sind mir ein paar Verhaltensweisen vom
Simulator aufgefallen die nach meinem Verständnis nicht ganz richtig
sind.
1 | 00. start:
|
2 |
|
3 | 01. MOVLW H'1'
|
4 | 02. MOVWF TX1REG,0
|
5 | 03. NOP
|
6 |
|
7 | 04. MOVLW h'2'
|
8 | 05. MOVWF TX1REG,0
|
9 | 06. NOP
|
10 |
|
11 | 07. loop:
|
12 |
|
13 | 08. BTFSS PIR1,TX1IF
|
14 | 09. BRA $-h'3'
|
15 |
|
16 | 10. MOVLW h'22'
|
17 | 11. MOVWF TX1REG,0
|
18 | 12. NOP
|
19 |
|
20 | 13. BRA loop
|
Laut Datenblatt dauert die Übertragung vom TX1REG ins TSR sowie die
Aktualisierung der TX1IF ein Instruction Cycle.
Sprich die TX1IF ist erst ein Instruction Cycle nach dem Laden des
TX1REG gültig.
Wenn ich nun die Zeilen [0;4] ausführe bleibt TX1IF gesetzt und es
ändert sich nichts.
Aber nachdem die Zeile 5 ausgeführt wurde wird die TX1IF sofort
gelöscht, dabei sollte das doch eigentlich erst passieren wenn ich noch
ein Instruction Cycle warte sprich Zeile 6 mit dem NOP ausgeführt habe.
Desweiteren bis die Bedienung in Zeile 8 dann erfüllt wird vergehen
140540 Takte was in etwa 8,78 ms entspricht bei meiner Baudrate von 8192
sollten aber ca. 1 ms vergehen.
Das USART Modul habe ich vollgendermaßen konfiguriert:
1 | MOVLW H'E7'
|
2 | MOVWF SPBRG1,0
|
3 |
|
4 | MOVLW H'01'
|
5 | MOVWF SPBRGH1,0
|
6 |
|
7 | MOVLW B'00001000'
|
8 | MOVWF BAUDCON1,0
|
9 |
|
10 | MOVLW B'00100000'
|
11 | MOVWF TXSTA1,0
|
12 |
|
13 | MOVLW B'10010000'
|
14 | MOVWF RCSTA1,0
|
Habe ich was falsch gemacht oder stimmt da was mit dem Simulator nicht?
Die USART Asugaben werden mir aber zumindest vollständig in eine Datei
geschrieben.