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 ************************* *****
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 ************************* *****