perduoti duomenis usart uosto pic16f877 į Asame kodas

C

ceibawx

Guest
Hi everyone.Kaip jūsų viskas?
Man reikia jūsų pagalbos pakeisti surinkimo kodą duomenų perdavimo usart uosto pic16f877.
Prieš perduoda 2 baitų duomenis į TXREG, reikia patikrinti TXIF vertė?
Pirmą kartą, TXIF pati yra tuščias.
o antrą kartą, PATIKRINKITE TXIF reikia, tiesa?
Ir mano klausimas yra apie TSR statuso.
Reikia patikrinti TRMT prieš perduoda duomenis į TXREG?
Taip pat reikia nustatyti TXIE prieš perduodama duomenis?

Dabar aš noriu perduoti 2bytes duomenis c6, tada vėlavimo 20us, tada pakartokite 2byte duomenimis, tai vėlavimas 20us vėl.bet mano kodas neveikia.Ir aš nežinau, kas tai yra klaida.
Jūsų patirtis ir žinios yra vertinama.

Kodas:

w_temp EQU 0x7D; kintamasis naudojamas kontekste taupymas

status_temp EQU 0x7E; kintamasis naudojamas kontekste taupymas

pclath_temp EQU 0x7F; kintamasis naudojamas kontekste taupymas

ByteCounter EQU 0xBD; adresas naudojamas baitų skaitiklis;************************************************* *********************

ORG 0x000; procesorius reset vektorius

goto Pagrindinis; pereiti prie pradžios programa

;************************************************* *********************

; Isr kodą galite rasti čia arba būti kaip skambinti Daiktavardis kiturORG 0x004; Pertraukties vektoriaus vietą

movwf w_temp; išgelbėti nuo dabartinės W registro turinį

movf STATUSĄ, m; perkelti Registras būklės į W registrą

movwf status_temp; išsaugoti išjungti turinio Statusas registre

movf PCLATH, m; perkelti pclath užsiregistruoti į w registrą

movwf pclath_temp; išsaugoti išjungti turinio PCLATH registremovf pclath_temp, m; gauti kopiją PCLATH registre

movwf PCLATH; atkurti anksto isr PCLATH registre turinį

movf status_temp, m; gauti kopiją Statusas registre

movwf Statusas; atkurti anksto isr Statusas registre turinį

swapf w_temp, f

swapf w_temp, m; atkurti anksto isr W registro turinį

retfie; grįžti iš pertrauktiAtsakingas komitetas:

banksel TRISC

bcf TRISC, 6, c6 = 0 kaip produkcija

BSF TRISC, 0; c0 = 1 įvedimas

BSF TRISC, 1; c1 = 1 įvedimas

; UART modulio konfigūraciją

banksel SPBRG

movlw 15; rs232 Baud kaip 57.6k 15

movwf SPBRG; Įjungti SPBRG registre Baud Ratebanksel TXSTA; Pasirinkite atminties banko TXSTA SFRbcf TXSTA, TX9; 8 bitų perdavimo

BSF TXSTA, TXEN; Įjungti Perdavimas

bcf TXSTA, SYNC; asinchroninius būdas

BSF TXSTA, BRGH; aukšto Baud Ratebanksel RCSTA

bcf RCSTA, SPEN; Išjungti Serial port.
Aš naudoju usart tx funkcija

BSF RCSTA, CREN; Įjungti GavėjasBANKSEL PIE1

BCF PIE1, TXIE

; ******************* Išsaugoti duomenis pic ************************** *****

SaveData

BSF STATUSĄ, RP0; banko 1

movlw 0x42

movwf 0xBF

movlw 0x24

movwf 0xC0

; movlw 0x00

; movwf 0xC1

; movlw 0x00

; movwf 0xC2

; movlw 0x00

; movwf 0xC3

; movlw 0x00

; movwf 0xC4

;********************* perduoti duomenis naujų ************************* *****

MOVLW 0x02

MOVWF ByteCounter

TestTxreg

banksel PIR1

btfss PIR1, TXIF; TXIF = 1, tuščias, pereikite

goto TestTxreg

TransData:

MOVLW 0xBF

MOVWF MR; SU RAM

; CLRF TXREG

GoOnTransData:

banksel TXREG

MOVF INDF, 0

MOVWF TXREG; Perkelti duomenis į perduoda registre

INCF FSR, 1; INDF adresas numeris juda šalia

Wait0:

banksel PIR1

btfss PIR1, TXIF

goto Wait0

clrf TXREG

BSF STATUSĄ, RP0

DECFSZ ByteCounter, 1; ChannelCounter-1

goto GoOnTransData; eiti

Wait1:

banksel TXSTA

MOVLW 0x02

MOVWF ByteCounter

Delay:

BANKSEL RCSTA

MOVLW 0x02; 20MHz = 50ns = 0.05us

MOVWF 0x20; 0,05 * 4 = 0.2us

LOOP2:

MOVLW 0x03; E5 = 120us; C5 = 80us; 85 = 75u; 35 = 45 = 55 = 0

MOVWF 0x21; 03H = 16us

LOOP1:

DECFSZ 0x21 F

GOTO LOOP1

DECFSZ 0x20 F

GOTO LOOP2

GOTO TransData

; goto FinishDataFinishData:

movlw 0x00

movwf TXREG

goto FinishData

PABAIGA

;********************* perduoti duomenis baigti ************************* *****
 
Labas.

Viskas ko jums reikia tai nustatyti usart, šis kodas yra 9600bps.
Prieš arba po siųsti užsiregistruoti txreg turite patikrinti TMRT bitų, taip pat galite çjungti rx pertrūkių arba priėmimo grandinių į pagrindinę.

BSF STATUSĄ, RP0; BANK1
MOVLW ,25
MOVWF SPBRG
MOVLW 0x24
MOVWF TXSTA
BCF STATUSĄ, RP0; Bank0
MOVLW 0x90
MOVWF RCSTA

 
Labas.Aš peržiūrėti savo kodą, ir jį labai panašus į ką aš naudoju.I'd just rekomenduojame pridėti nedidelis vėlavimas po įsteigtas serijos uosto ir prieš perduodant jūsų pirmasis baitas.Tarsi tai padaryti:

clrf delay1
atidėti
decfsz delay1
goto vėlavimą

Jei negalite pateikti kokių nors atotrūkis tarp įkurti uoste ir perduoti, yra didelė tikimybė, kad uosto nebus darbą visiems.

Be to, atsakydamas į jūsų klausimus:"Sveiki visi. Kaip yra viskas?"

Gerai, ačiū.

"Prieš perduoda 2 baitų duomenis į TXREG, reikia patikrinti TXIF vertė?
Pirmą kartą, TXIF pati yra tuščias.
o antrą kartą, PATIKRINKITE TXIF reikia, tiesa?"

Taip, TXIF šiek tiek jums, jei transmitt buferis tuščias.Jūs turite jį išsiųsti savo duomenis.TXIF yra 1, jei buferis tuščias, 0, jei ji visa."O mano klausimas yra apie TSR statuso.
Reikia patikrinti TRMT prieš perduoda duomenis į TXREG?
Taip pat reikia nustatyti TXIE prieš perduodama duomenis?"Ne, TRMT tikrina statusą, keliami Shift registro.Iš esmės, ši vėliava pasakys jums, kai jūsų baitas buvo perduotas, bet nereikia, kad procesas būtų baigtas įkelti kitą dėl TXREG, reikia tik patikrinti TXIF pamatyti jeigu keliami buferio pasirengęs.

No, you dont reikia naudoti pertraukinėja naudoti šį uostą.

Hope this helps.Jei reikia pavyzdžio ASM programa, aš po jo, tik leiskite man žinoti, kad aš komentarus į ją.

 

Welcome to EDABoard.com

Sponsor

Back
Top