G
gimme
Guest
Ľutujem, ale kluka jsem sám,
nevím, prečo môj kód nefunguje, mohol niekto pomôcť mne e Chek to, prosím?
Titul "PIC16F73"
list p = 16f73, f = inhx32
#
Include <p16f73.inc>MSGPTR EQU 0x26; Všeobecnej účel registra
BITS EQU 0x27; Všeobecnej účel registra
CNTMSEC EQU 0x28; Všeobecnej účel registra
ZEROBIT EQU 0x02; Zero bit Stav
RegDELAY1_VAL1 EQU 0x21
DELAY1_VAL1_TEMP EQU 0x22
DELAY2_VAL1 EQU 0x23
DELAY2_VAL1_TEMP EQU 0x24
TMR0_TEMP EQU 0x25; Used pre skladovanie počas prerušenia TMR0
W_TEMP EQU 0x29; Používa sa pre ukladanie W pri prerušení
SPBRG_VAL EQU 0x30; nastaviť rýchlosť 9600 pre 4MHz hodín
PAUSE_DELAY EQU 0x31
CBLOCK 0x020
Vlajky, byte na uloženie ukazovateľ flag
ENDC
ORG 0x00; reset vektora
Choď Štart
ORG 0x08; pôvodu pre vonkajšie RA0/INTDELAY1 MOVLW 0xB2;
No
vonkajšieho smyček je 0xFF-val
MOVWF DELAY1_VAL1;
LOOP2 MOVLW 0x01;
No
vnútornej slučky je 0xFF-val
MOVWF TMR0
BANKSEL OPTION_REG;
MOVLW B'11000111 '; prescaler nastavený na 256
MOVWF OPTION_REG;
BANKSEL PORTA
LOOP1
MOVF TMR0, 0; ovplyvňuje Z trochu ŠTATÚT
BTFSS ŠTATÚTU, ZEROBIT; Uvidíme, jestli Z bit je nastavený
Choď LOOP1; No,
pozrite sa znovu
INCF DELAY1_VAL1, 1, áno, vr DELAY1_VAL1 vplyv Z bit
BTFSS ŠTATÚTU, ZEROBIT; používa aby sa zistilo, či je nulový DELAY1_VAL1
Choď LOOP2; NO - start vnútornej slučku znova
RETLW 0; ÁNO - návrat z DELAY1
DELAY2 MOVLW 0xFE;
No
vonkajšieho smyček je 0xFF-val
MOVWF DELAY2_VAL1;
LOOP4 MOVLW 0x01;
No
vnútornej slučky je 0xFF-val
MOVWF TMR0
MOVLW B'11000111 '; prescaler nastavený na 256
BANKSEL OPTION_REG;
MOVWF OPTION_REG;
BANKSEL PORTA
LOOP3
MOVF TMR0, 0; ovplyvňuje Z trochu ŠTATÚT
BTFSS ŠTATÚTU, ZEROBIT; Uvidíme, jestli Z bit je nastavený
Choď LOOP3; No,
pozrite sa znovu
INCF DELAY2_VAL1, 1, áno, vr DELAY1_VAL1 vplyv Z bit
BTFSS ŠTATÚTU, ZEROBIT; používa aby sa zistilo, či je nulový DELAY1_VAL1
Choď LOOP4; NO - start vnútornej slučku znova
RETLW 0; ÁNO - návrat z DELAY1Začať
; Přeruąovací Inicializácia
MOVLW B'00000000 '; Sady GIE a PORTB int.
MOVWF INTCON; umožňuje prerušiť, ktoré majú byť použité na PORTB <7:4>
; PRÍSTAVY Inicializácia
BANKSEL PORTA; vybrať banku PORTA
CLRF PORTA;
CLRF PORTB; Port konfigurácia
BANKSEL TRIS
MOVLW 0xFF; Konfigurácia Port A
MOVWF TRIS; za vstupy
MOVLW B'00000000 '; Konfigurácia Port B
MOVWF TRISB; Výstupy = 0,1,2,3,4,5,6,7
MOVLW B'00000000 '
MOVWF smietke; Nakonfigurujte PORTC ako výstup
BANKSEL PORTA; Vybrať banka PORTA
MOVLW B'00000000 '; Všetky PORTC produkcie = 0
MOVWF PORTC;
; TX UART initialilsation
BANKSEL TRIS; vybrať banku 1
MOVLW 0xC0; set tris bitov pre TX a RX
MOVLW SPBRG_VAL; nastaviť rýchlosť
MOVWF SPBRG
MOVLW 0x24; umožňujú prenos a vysoká prenosová rýchlosť
MOVWF TXSTA
BANKSEL PORTA; vybrať banku 0
MOVLW 0x90; povoliť sériový port a recepcia
MOVWF RCSTA
; Nastavte adresu
OUTMSG MOVWF MSGPTR; klásť 'Z' do správy ukazovadlo
MSGLOOP MOVF MSGPTR, W; dal kompenzáciu 'W'
CALL MSGTXT; vracia ASCII znak 'W'
MOVWF PORTC;
ADDLW 0; nastaví nula vlajkou, ak W = 0
BTFSC STATUS, 2; preskočiť ak Nula bit suchý
VRÁTENIA; hotové, ak W = 0
CALL OUTCH; výstup znakov
INCF MSGPTR, f; bodu na nasledujúcej
Choď MSGLOOP; viac znakov
MSGTXT
ADDWF PCL, F; kompenzovať pridaný do PCL
RETLW d'1 '; 1
RETLW d'84 ', 84
RETLW 0x63, 'c'
RETLW 0x6F; 'o'
RETLW 0x6E; 'n'
RETLW 0x20; 'namiesto'
RETLW 0x30,'0 '
RETLW 0x30,'0 '
RETLW 0x3A, ':'
RETLW 0x30,'0 '
RETLW 0x43, 'C'
RETLW 0x3A, ':'
RETLW 0x38,'8 '
RETLW 0x34,'4 '
RETLW 0x3A, ':'
RETLW 0x30,'0 '
RETLW 0x30,'0 '
RETLW 0x3A, ':'
RETLW 0x30,'0 '
RETLW 0x45, 'E'
RETLW 0x3A, ':'
RETLW 0x44, 'D'
RETLW 0x34,'4 '
RETLW 0x00; konca seding rutinné (pôsobí ako stop bity)
OUTCH MOVWF TXREG; klásť Z postúpi do registra
MOVLW 8 ôsmich bitov dát
MOVWF BITS; počítať bitov
; BSF PORTA, 1; start bit RA1 Chek ////////////////////////
TXLOOP MOVLW 0x31; 49 desatinných, meškanie
CALL MICRO4; čakať 49 x 4 = 196 mikrosekund
RRF TXREG, f; otočiť vpravo väčšine bit do carry
BTFSC STATUS, 0, 0, ak so sebou chcete nastaviť bit, (nízka)
Choď CLRBIT; ešte jasné bit, (vysoká)
; BSF PORTA, 1; 5 V na pin 1 (RA1) Chek //////////////////
Choď TESTDONE; konci znak?
CLRBIT; BCF PORTA, 1; 0V na pin 1 (RA1) Chek /////////////////
NOP; aby obe varianty 12 micosec (ylp-"NOP")
TESTDONE DECFSZ BITS, f, 1 menšia data bit, preskočiť pri nulovej
Choď TXLOOP; viac bitov doľava, meškania pre tento
MOVLW 0x34; plnej 208 microsec túto chvíľu
CALL MICRO4; omeškania za posledný data bit
; BCF PORTA, 1; 0V, (vysoké) za stop bity Chek /////////////////
MOVLW 0x68; desatinné 104 zdržaním 2 stop bity
CALL MICRO4
NÁVRATNOSŤ
NMSEC MOVWF CNTMSEC; Z msek počítať sa zaregistrovať
MSECLOOP MOVLW 0xF8; 8 microsec nadzemné
CALL MICRO4; 248 * 4 2 = 994 tu
NOP; kompletnú meškanie (ylp-"NOP")
NOP;
DECFSZ CNTMSEC, f; dekrementační počítať, keď preskočí nulu
Choď MSECLOOP; slučky
NÁVRATNOSŤ
MSEC1 MOVLW 0xF9; 4 microsec nadzemné
NOP; (2 pre CALL) (ylp-"NOP")
MICRO4 ADDLW 0xFF; odpočítaniu 1 od W
BTFSS STATUS, 2; preskočiť pri nulovej
Choď MICRO4; slučky
NÁVRATNOSŤ
BANKSEL PORTA
BSF PORTB, 4
CLRF TXREG
, A / D initialsation (A / D nepoužíva)
BANKSEL ADCON1; Nakonfigurujte A / D portov, vľavo odôvodnených
MOVLW B'00000100 '; RA0 = analógový vstup
MOVWF ADCON1; Oddychové ako Digital I / O
BANKSEL ADCON0
MOVLW B'10000000 '; Fosc/32
MOVWF ADCON0
; Zopne A / D
BANKSEL ADCON0
BSF ADCON0, 0; Sitch na A / D
CALL DELAY2
ATOD
BSF PORTB, 0
BSF ADCON0, 2; Štart A / D konverzie
ATODLOOP
BTFSC ADCON0, 2, skontrolujte, či je prevod hotový
Choď ATODLOOP; NIE
BANKSEL ADRESA
MOVF adresu, 0
; Transmit dáta v WREG keď odovzdá registra je prázdny.
TransmitSerial:
BANKSEL PORTA; vybrať banku 0
BTFSS PIR1, TXIF, skontrolujte, či vysielač obsadené
Choď $ -1; čakať do vysielača nie je obsadené
MOVWF TXREG
NÁVRATNOSŤ
BTFSC W, 7
BTFSC W, 6
CALL DELAY1
CLRF TXREG
Choď ATOD
koniec
Tento program má robiť prenosu prostredníctvom UART komunikácie medzi pic16f73 a eb500.prijíma analógový signál z porta, 0, potom sa po konverzii do digitálnej a poslať ju do tx UART.
druhov ide
nevím, prečo môj kód nefunguje, mohol niekto pomôcť mne e Chek to, prosím?
Titul "PIC16F73"
list p = 16f73, f = inhx32
#
Include <p16f73.inc>MSGPTR EQU 0x26; Všeobecnej účel registra
BITS EQU 0x27; Všeobecnej účel registra
CNTMSEC EQU 0x28; Všeobecnej účel registra
ZEROBIT EQU 0x02; Zero bit Stav
RegDELAY1_VAL1 EQU 0x21
DELAY1_VAL1_TEMP EQU 0x22
DELAY2_VAL1 EQU 0x23
DELAY2_VAL1_TEMP EQU 0x24
TMR0_TEMP EQU 0x25; Used pre skladovanie počas prerušenia TMR0
W_TEMP EQU 0x29; Používa sa pre ukladanie W pri prerušení
SPBRG_VAL EQU 0x30; nastaviť rýchlosť 9600 pre 4MHz hodín
PAUSE_DELAY EQU 0x31
CBLOCK 0x020
Vlajky, byte na uloženie ukazovateľ flag
ENDC
ORG 0x00; reset vektora
Choď Štart
ORG 0x08; pôvodu pre vonkajšie RA0/INTDELAY1 MOVLW 0xB2;
No
vonkajšieho smyček je 0xFF-val
MOVWF DELAY1_VAL1;
LOOP2 MOVLW 0x01;
No
vnútornej slučky je 0xFF-val
MOVWF TMR0
BANKSEL OPTION_REG;
MOVLW B'11000111 '; prescaler nastavený na 256
MOVWF OPTION_REG;
BANKSEL PORTA
LOOP1
MOVF TMR0, 0; ovplyvňuje Z trochu ŠTATÚT
BTFSS ŠTATÚTU, ZEROBIT; Uvidíme, jestli Z bit je nastavený
Choď LOOP1; No,
pozrite sa znovu
INCF DELAY1_VAL1, 1, áno, vr DELAY1_VAL1 vplyv Z bit
BTFSS ŠTATÚTU, ZEROBIT; používa aby sa zistilo, či je nulový DELAY1_VAL1
Choď LOOP2; NO - start vnútornej slučku znova
RETLW 0; ÁNO - návrat z DELAY1
DELAY2 MOVLW 0xFE;
No
vonkajšieho smyček je 0xFF-val
MOVWF DELAY2_VAL1;
LOOP4 MOVLW 0x01;
No
vnútornej slučky je 0xFF-val
MOVWF TMR0
MOVLW B'11000111 '; prescaler nastavený na 256
BANKSEL OPTION_REG;
MOVWF OPTION_REG;
BANKSEL PORTA
LOOP3
MOVF TMR0, 0; ovplyvňuje Z trochu ŠTATÚT
BTFSS ŠTATÚTU, ZEROBIT; Uvidíme, jestli Z bit je nastavený
Choď LOOP3; No,
pozrite sa znovu
INCF DELAY2_VAL1, 1, áno, vr DELAY1_VAL1 vplyv Z bit
BTFSS ŠTATÚTU, ZEROBIT; používa aby sa zistilo, či je nulový DELAY1_VAL1
Choď LOOP4; NO - start vnútornej slučku znova
RETLW 0; ÁNO - návrat z DELAY1Začať
; Přeruąovací Inicializácia
MOVLW B'00000000 '; Sady GIE a PORTB int.
MOVWF INTCON; umožňuje prerušiť, ktoré majú byť použité na PORTB <7:4>
; PRÍSTAVY Inicializácia
BANKSEL PORTA; vybrať banku PORTA
CLRF PORTA;
CLRF PORTB; Port konfigurácia
BANKSEL TRIS
MOVLW 0xFF; Konfigurácia Port A
MOVWF TRIS; za vstupy
MOVLW B'00000000 '; Konfigurácia Port B
MOVWF TRISB; Výstupy = 0,1,2,3,4,5,6,7
MOVLW B'00000000 '
MOVWF smietke; Nakonfigurujte PORTC ako výstup
BANKSEL PORTA; Vybrať banka PORTA
MOVLW B'00000000 '; Všetky PORTC produkcie = 0
MOVWF PORTC;
; TX UART initialilsation
BANKSEL TRIS; vybrať banku 1
MOVLW 0xC0; set tris bitov pre TX a RX
MOVLW SPBRG_VAL; nastaviť rýchlosť
MOVWF SPBRG
MOVLW 0x24; umožňujú prenos a vysoká prenosová rýchlosť
MOVWF TXSTA
BANKSEL PORTA; vybrať banku 0
MOVLW 0x90; povoliť sériový port a recepcia
MOVWF RCSTA
; Nastavte adresu
OUTMSG MOVWF MSGPTR; klásť 'Z' do správy ukazovadlo
MSGLOOP MOVF MSGPTR, W; dal kompenzáciu 'W'
CALL MSGTXT; vracia ASCII znak 'W'
MOVWF PORTC;
ADDLW 0; nastaví nula vlajkou, ak W = 0
BTFSC STATUS, 2; preskočiť ak Nula bit suchý
VRÁTENIA; hotové, ak W = 0
CALL OUTCH; výstup znakov
INCF MSGPTR, f; bodu na nasledujúcej
Choď MSGLOOP; viac znakov
MSGTXT
ADDWF PCL, F; kompenzovať pridaný do PCL
RETLW d'1 '; 1
RETLW d'84 ', 84
RETLW 0x63, 'c'
RETLW 0x6F; 'o'
RETLW 0x6E; 'n'
RETLW 0x20; 'namiesto'
RETLW 0x30,'0 '
RETLW 0x30,'0 '
RETLW 0x3A, ':'
RETLW 0x30,'0 '
RETLW 0x43, 'C'
RETLW 0x3A, ':'
RETLW 0x38,'8 '
RETLW 0x34,'4 '
RETLW 0x3A, ':'
RETLW 0x30,'0 '
RETLW 0x30,'0 '
RETLW 0x3A, ':'
RETLW 0x30,'0 '
RETLW 0x45, 'E'
RETLW 0x3A, ':'
RETLW 0x44, 'D'
RETLW 0x34,'4 '
RETLW 0x00; konca seding rutinné (pôsobí ako stop bity)
OUTCH MOVWF TXREG; klásť Z postúpi do registra
MOVLW 8 ôsmich bitov dát
MOVWF BITS; počítať bitov
; BSF PORTA, 1; start bit RA1 Chek ////////////////////////
TXLOOP MOVLW 0x31; 49 desatinných, meškanie
CALL MICRO4; čakať 49 x 4 = 196 mikrosekund
RRF TXREG, f; otočiť vpravo väčšine bit do carry
BTFSC STATUS, 0, 0, ak so sebou chcete nastaviť bit, (nízka)
Choď CLRBIT; ešte jasné bit, (vysoká)
; BSF PORTA, 1; 5 V na pin 1 (RA1) Chek //////////////////
Choď TESTDONE; konci znak?
CLRBIT; BCF PORTA, 1; 0V na pin 1 (RA1) Chek /////////////////
NOP; aby obe varianty 12 micosec (ylp-"NOP")
TESTDONE DECFSZ BITS, f, 1 menšia data bit, preskočiť pri nulovej
Choď TXLOOP; viac bitov doľava, meškania pre tento
MOVLW 0x34; plnej 208 microsec túto chvíľu
CALL MICRO4; omeškania za posledný data bit
; BCF PORTA, 1; 0V, (vysoké) za stop bity Chek /////////////////
MOVLW 0x68; desatinné 104 zdržaním 2 stop bity
CALL MICRO4
NÁVRATNOSŤ
NMSEC MOVWF CNTMSEC; Z msek počítať sa zaregistrovať
MSECLOOP MOVLW 0xF8; 8 microsec nadzemné
CALL MICRO4; 248 * 4 2 = 994 tu
NOP; kompletnú meškanie (ylp-"NOP")
NOP;
DECFSZ CNTMSEC, f; dekrementační počítať, keď preskočí nulu
Choď MSECLOOP; slučky
NÁVRATNOSŤ
MSEC1 MOVLW 0xF9; 4 microsec nadzemné
NOP; (2 pre CALL) (ylp-"NOP")
MICRO4 ADDLW 0xFF; odpočítaniu 1 od W
BTFSS STATUS, 2; preskočiť pri nulovej
Choď MICRO4; slučky
NÁVRATNOSŤ
BANKSEL PORTA
BSF PORTB, 4
CLRF TXREG
, A / D initialsation (A / D nepoužíva)
BANKSEL ADCON1; Nakonfigurujte A / D portov, vľavo odôvodnených
MOVLW B'00000100 '; RA0 = analógový vstup
MOVWF ADCON1; Oddychové ako Digital I / O
BANKSEL ADCON0
MOVLW B'10000000 '; Fosc/32
MOVWF ADCON0
; Zopne A / D
BANKSEL ADCON0
BSF ADCON0, 0; Sitch na A / D
CALL DELAY2
ATOD
BSF PORTB, 0
BSF ADCON0, 2; Štart A / D konverzie
ATODLOOP
BTFSC ADCON0, 2, skontrolujte, či je prevod hotový
Choď ATODLOOP; NIE
BANKSEL ADRESA
MOVF adresu, 0
; Transmit dáta v WREG keď odovzdá registra je prázdny.
TransmitSerial:
BANKSEL PORTA; vybrať banku 0
BTFSS PIR1, TXIF, skontrolujte, či vysielač obsadené
Choď $ -1; čakať do vysielača nie je obsadené
MOVWF TXREG
NÁVRATNOSŤ
BTFSC W, 7
BTFSC W, 6
CALL DELAY1
CLRF TXREG
Choď ATOD
koniec
Tento program má robiť prenosu prostredníctvom UART komunikácie medzi pic16f73 a eb500.prijíma analógový signál z porta, 0, potom sa po konverzii do digitálnej a poslať ju do tx UART.
druhov ide