jak na user commands PC->PIC
Milan Kratochvíl
milan.krata@quick.cz
Pondělí Červen 7 11:00:49 CEST 2004
>> -----Original Message-----
>> From: Cizek Milan [mailto:cizek.milan@seznam.cz]
>> Sent: Monday, June 07, 2004 12:27 AM
>> To: '[HWnews]'
>> Subject: RE: jak na user commands PC->PIC
>>
>>
>> Ahoj, predem diky za vsechny reakce.
>>
>> > -----Original Message-----
>> > From: hw-list-bounces@mailman.nethouse.cz
>> > On Behalf Of Danhard
>>
>> > 2) Jenourovnovy buffer pevne max. delky, nejjednoduseji pres
>> > neprime adresovani - ukazatel pole, je zapotrebi hlidat aby
>> > nepretekl max. prideleny prostor, po zpracovani zpravy se
>> > nastavi na zacatek, po dobu zpracovani zpravy zablokovat
>> prijem znaku.
>>
>> Na tomhle vlastne stojim, nevim totiz, jak naimplementovat
>> zmineny buffer,
>> jake prikazy pouzit, jak ho adresovat... Nebyl by nejaky
>> ukazkovy prikladek,
>> pripadne odkaz na tuto tematiku?
>>
>> Ja si to predstavuji tak, ze delka prikazu bude promena, kazda zadana
>> sekvence pak bude ukoncena napr. CRLF, cimz se prejde k
>> rozpoznavani. Jedine
>> co bych asi v tuto chvili zvladl je nadefinovat si blok
>> promenych a v kodu
>> vzdy precist znak z portu, dat do W, z W do promene atd.
>> treba 8x po sobe,
>> coz neni prilis efektivni.
>>
>> Z tohoto co popisujete soudim, ze se to da udelat daleko
>> lepe, nastavit
>> nejaky pointer na zacatek v RAM, precist do nej znak a pak
>> ho inkrementovat,
>> stale dokola, osetrit preteceni... Jak se tohle da udelat v asm?
Neco jsem napsal pro 16f877 cca pred pul rokem ale je to dost narocne na
pamet.
Prog.. je psán pro 19200br na RS485 a pokud skonci prijem zacne
vysilat.(timeout "timer0")
Trochu jsem ten kod procistil od casti netykajici se ser.buff.
Promenne v bance 0 jsem ponechal kvůli umisteni promene bool01 a
nasledujicich...
Buff. lze udelat libovolne velikosti ale musi byt jen v jedne bance
jinak jak je vydet tak buff. jsou 2. Pro TX a pro RX.
preruseni nevadi ale pozor na peclive ulozeni vsech menicich-se promennych!
Pripadnou kritiku prosim primo na muj mail protoze jsem pouze zacatecnik ale
rad se poucim abych nedelal dalsi chyby!
Ahoj Milan
;*****************************************************************
;* BY MILAN KRATOCHVÍL ML. *
;*****************************************************************
list p=16f877, R=DEC
include "p16f877.inc"
__CONFIG _CP_OFF & _PWRTE_ON & _BODEN_ON & _WDT_OFF & _HS_OSC & _LVP_OFF;
& _WRTE_OFF
cblock 20h ; definice proměnných v bance 0
TIMEOUT ; TimeOut Sériového portu
BLIK_W ; proměnné pro blikání
BLIK_WW ; proměnné pro blikání
CRC_RX ; crc pro příjem
CRC_TX ; crc pro vysílání
N1 ; jednotky při zobrazení a také pomocná
N10 ; desítky při zobrazení a také pomocná
N100 ; stovky při zobrazení a také pomocná
KOLIK ; výmluvná pomocná proměnná
AKCE_485_RX ; akce kterou má dělat nebo dělá program
; při volání příjmu ser. portu
AKCE_485_TX ; akce kterou má dělat nebo dělá program
; při volání příjmu ser. portu
AKCE_IDF ; akce kterou má dělat nebo dělá program
; při porovnávání identifikace
;BUDE_AKCE_485_TX ; příští akce kterou požaduji udělat jako odpověď na
příští dotaz
RX_485_ADRESA ; adresa se kterou chce komunikovat pc
RX_485_PRIKAZ ; příkaz který posílá
RX_485_KOLIK ; počet bytů které ještě pošle
CAS_IN1 ; čas proti rušení na vstupu od favorita
CAS_IN2 ; čas proti rušení na vstupu od favorita
CAS_IN3 ; čas proti rušení na vstupu od favorita
IDF_NUM ; znak přijatý od identifikace
IDF_RX ; znak právě přijímaný od identifikace
IDF_BIT ; počet bitů pro příjem znaku identifikace
; buff pro zapamatování poslední identifikace
IDF_KOLIK_RX ; počet bytů pro příjem identifikace
IDF_KOLIK ; ukazuje kam se má uložit přijatý byt (po malé úpravě to
ukazuje i IDF_KOLIK_RX)
IDF_BYT_HI ; HI část přijatého bytu
IDF_BYT_TMP ; LO+pracovní část přijatého bytu
IDF_POCET ; počet uložených identifikací
IDF_POCET_POR ; počet uložených identifikací pro kontrolování
TX_485_BUF ; počet znaků v bufferu
TX_485_TMP ; znak pro zápis do bufferu
TX_485_POC ; míso kde se bude číst
TX_485_POZ ; míso kam se bude zapisovat
TX_485_BUF_00
TX_485_BUF_01
TX_485_BUF_02
TX_485_BUF_03
TX_485_BUF_04
TX_485_BUF_05
TX_485_BUF_06
TX_485_BUF_07
TX_485_BUF_08
TX_485_BUF_09
TX_485_BUF_10
TX_485_BUF_11
TX_485_BUF_12
TX_485_BUF_13
TX_485_BUF_14
TX_485_BUF_15
TX_485_BUF_16
TX_485_BUF_17
TX_485_BUF_18
TX_485_BUF_19
RX_485_BUF ; počet znaků v bufferu
RX_485_TMP ; znak pro zápis do bufferu
RX_485_POC ; míso kde se bude číst
RX_485_POZ ; míso kam se bude zapisovat
RX_485_BUF_00
RX_485_BUF_01
RX_485_BUF_02
RX_485_BUF_03
RX_485_BUF_04
RX_485_BUF_05
RX_485_BUF_06
RX_485_BUF_07
RX_485_BUF_08
RX_485_BUF_09
RX_485_BUF_10
RX_485_BUF_11
RX_485_BUF_12
RX_485_BUF_13
RX_485_BUF_14
RX_485_BUF_15
RX_485_BUF_16
RX_485_BUF_17
RX_485_BUF_18
RX_485_BUF_19
nic_79
nic_80
nic_81
nic_82
nic_83
; Následující proměnné jsou přístupné ve všech bankách
bool01 ; registr pro proměnné typu boolean
bool02 ; registr pro proměnné typu boolean
bool03 ; registr pro proměnné typu boolean
;bool04 ; registr pro proměnné typu boolean
;bool05 ; registr pro proměnné typu boolean
;bool06 ; registr pro proměnné typu boolean
;boolN1 ; registr pro proměnné typu boolean pro nastavovací parametry
branky
nic_84
nic_85
nic_86
nic_87
nic_88
nic_89
nic_90
nic_91
nic_92
TMP_PCLATH ; pomocný registr pro uchování dat při přerušení
TMP_S ; pomocný registr pro uchování dat při přerušení
TMP_FSR ; pomocný registr pro uchování dat při přerušení
TMP_W ; pomocný registr pro uchování dat při přerušení
endc
;intstop macro
; bcf BYL_INT_GIE ; nuluj ...
; btfsc INTCON,GIE ; pokud není povolené přerušení poskoč
; bsf BYL_INT_GIE ; nastav ...
; bcf INTCON,GIE ; zakaž přerušení
; endm
;
;intgo macro
; btfsc BYL_INT_GIE ; pokud bylo přerušení zakázáno tak poskoč
; bsf INTCON,GIE
; endm
bank0 macro
bcf STATUS,RP0
bcf STATUS,RP1
endm
bank0to1 macro
bsf STATUS,RP0
endm
bank1to0 macro
bcf STATUS,RP0
endm
bank1to3 macro
bsf STATUS,RP1
endm
bank1 macro
bcf STATUS,RP1
bsf STATUS,RP0
endm
bank2 macro
bcf STATUS,RP0
bsf STATUS,RP1
endm
bank3 macro
bsf STATUS,RP1
bsf STATUS,RP0
endm
NASTAV_VYSILANI macro
bsf SMER_485_PC ; přepni na 485-ce
bcf RCSTA,CREN ; zakazuji příjem
errorlevel -302 ; suppress message 302 from list file
bank0to1
bsf TXSTA,TXEN ; povoluji vysílání
bank1to0
errorlevel +302 ; suppress message 302 from list file
endm
NASTAV_PRIJEM macro
bcf SMER_485_PC ; přepni na 485-ce
errorlevel -302 ; suppress message 302 from list file
bank0to1
movlw H_TXSTA ; zakazuji vysílání
movwf TXSTA ; OK
errorlevel +302 ; suppress message 302 from list file
bank1to0
movlw H_RCSTA ; povoluji příjem
movwf RCSTA ; OK
endm
; přepínání pro ukazatele ve FSR
FSR_HI macro
bsf STATUS,IRP
endm
FSR_LO macro
bcf STATUS,IRP
endm
#define VEL_BUFF_485 d'20' ; velikost ser. buferu
#define TX_485_FULL bool01,0 ; ukazatel že je plný buffer pro TX Ser. portu
#define RX_485_FULL bool01,1 ; ukazatel že je plný buffer pro RX Ser. portu
#define TX_485_CHAR bool01,2 ; ukazatel že je znak v buffer pro TX Ser.
portu
#define RX_485_CHAR bool01,3 ; ukazatel že je znak v buffer pro RX Ser.
portu
#define VYSILA_485 bool01,4 ; Ukazatel že právě maká ser port
#define ANO_NE bool01,7 ;
#define SMER_485_PC PORTA,0 ; řídí směr posílání dat
; 0 povoluje příjem zakazuje vysílání
; 1 zakazuje příjem povoluje vysílání
#define START_ZNAK_PAKETU 0xFD ; znak ktrým začínáme komunikační paket s PC
#define TIMER0 INTCON,T0IE ; přerušení pro časovač TMR0
#define IDF_PRERUS INTCON,INTE ; přerušení pro časovač drát
#define TIMER1 PIE1,TMR1IE ; přerušení pro časovač TMR1
#define H_INTCON b'01011000' ; konfigurace přerušení
#define H_PIE1 b'00110000' ; konfigurace přerušeí
#define H_PIE2 b'00000000' ; konfigurace přerušení
#define H_T1CON b'00000101' ; KONFIG.ČASOVAČE
#define H_T2CON b'00000110' ; KONFIG.ČASOVAČE
#define H_SSPCON b'00000000' ; konfigurace SSPCON
#define H_CCP1CON b'00000000' ; konfigurace SSPCON
#define H_RCSTA b'10010000' ; konfigurace RCsta (RX)
#define H_CCP2CON b'00000000' ; konfigurace SSPCON
#define H_ADCON0 b'11000001' ; AD převodník
#define H_OPTION_REG b'10000111'
#define H_TIMEOUT d'200'
#define H_TRISA b'11111011' ; portA 4-0, vstupu, vystupu
#define H_TRISB b'00100001' ; portB 7-0, 2vstupu, 6vystupu
#define H_TRISC b'10111111' ; portC 7-0, 7vstupu, 1vystupu
#define H_TRISD b'00000000' ; portD 7-0, 0vstupu, 8vystupu
#define H_TRISE b'00000000' ; portE 7-0, 0vstupu, 3vystupu
#define H_SSPADD b'00000000' ; konfigurace SSPSTAT
#define H_SSPSTAT b'00000000' ; konfigurace SSPSTAT
#define H_TXSTA b'00000100' ; konfigurace TXsta
#define H_SPBRG d'64' ; konfigurace SPBRG = rychlost přenosu na 19200
#define H_ADCON1 b'00001110' ; AD převodník
#define H_EECON1 b'00000000'
;******************** Reset procesoru ********************
RESET org 0x00 ; zacatek programu
clrf PCLATH ; vymaž ukazatel programové adresy
bsf PCLATH,3 ; nastav na PAGE 3 protože jdeš tak daleko
bsf PCLATH,4 ; OK
errorlevel -306 ; suppress message 302 from list file
goto INIT ; skok na pocatecni inicializaci
errorlevel +306 ; suppress message 302 from list file
org 0x04 ; adresa preruseni
movwf TMP_W ; ulozit W
movf STATUS,W ; ulozit STATUS a přepnout na banku 0
bank0 ; |
movwf TMP_S ; OK
movfw PCLATH ; ulož pclath
movwf TMP_PCLATH ; OK
clrf PCLATH ; nuluj pclath
movfw FSR ; ulož FSR
movwf TMP_FSR ; OK
bcf STATUS,IRP ; nuluj stav ukazatele pro FSR obnoví se při obnovování
STATUS registru
goto PRERUS ; uložení hotovo tak jdi na provedení programů.
; ------------------------
; ------------------------
;******************** skoky závislé na hodnotách *****************
; ------------------------
;********************* Začátek programu ********************
;******************** tělo programu ********************
Start
....... program
Start01 btfsc RX_485_CHAR ; pokud NENÍ nic v buff poskoč
goto .... výběr a obsloužení znaku z buff
Start02 btfss TX_485_FULL ; pokud JE buff plný poskoč
goto ... zápis znaků do buff.
....... program
goto Start
;******************** konec těla programu *******************
;******************** těla podprogramů ********************
Dej_485_RX btfss RX_485_CHAR ; test zda je nějaký znak v buferu
return ; není tak se vrať
; intstop ; zakáže přerušení
bcf RX_485_FULL ; nuluj příznak plného bufferu
banksel RX_485_POZ
movlw RX_485_POZ ; ulož adresučtení-1 registru do FSR
movwf FSR ; OK
movf RX_485_POC,W ; přičti pozici kde se čte
addwf FSR,F ; do FSR OK
decfsz RX_485_POC,F ; odečti na ukazateli a poskoč pokud je nulový
goto D_485_R_01
movlw VEL_BUFF_485 ; zapiš velikost bufferu do
movwf RX_485_POC ; OK
D_485_R_01 decf RX_485_BUF,F ; odečti na počtu znaků
skpnz ; a poskoč pokud není 0
bcf RX_485_CHAR ; nuluj příznak znaků v buferu
FSR_HI
movf INDF,W ; čti místo a pošli ho ve W zpět
FSR_LO
bank0
; intgo ; povolí přerušení
return ; návrat
Dej_485_TX btfss TX_485_CHAR ; test zda je nějaký znak v buferu
return ; není tak se vrať
; intstop ; zakáže přerušení
bcf TX_485_FULL ; nuluj příznak plného bufferu
banksel TX_485_POZ
movlw TX_485_POZ ; ulož adresučtení-1 registru do FSR
movwf FSR ; OK
movf TX_485_POC,W ; přičti pozici kde se čte
addwf FSR,F ; do FSR OK
decfsz TX_485_POC,F ; odečti na ukazateli a poskoč pokud je nulový
goto D_485_T_01
movlw VEL_BUFF_485 ; zapiš velikost bufferu do
movwf TX_485_POC ; OK
D_485_T_01 decf TX_485_BUF,F ; odečti na počtu znaků
skpnz ; a poskoč pokud NENí 0
bcf TX_485_CHAR ; nuluj příznak znaků v buferu
FSR_HI
movf INDF,W ; čti místo a pošli ho ve W zpět
FSR_LO
bank0
; intgo ; povolí přerušení
return
Uloz_485_TX ; intstop ; zakáže přerušení
banksel TX_485_TMP
movwf TX_485_TMP ; ulož do tmp pozice
movlw TX_485_POZ ; ulož adresuzápisu-1 registru do FSR
movwf FSR ; OK
movf TX_485_POZ,W ; přičti pozici kde se zapisuje
addwf FSR,F ; do FSR OK
movf TX_485_TMP,W ; ulož znak
FSR_HI
movwf INDF ; OK
FSR_LO
decfsz TX_485_POZ,F ; odečti na ukazateli a poskoč pokud je nulový
goto U_485_T_01
movlw VEL_BUFF_485 ; zapiš velikost bufferu do
movwf TX_485_POZ ; OK
U_485_T_01 incf TX_485_BUF,F ; přičti na počtu znaků
movf TX_485_BUF,W ; test zda je buff. plný FULL
banksel bool01 ; přepne na banku 0
xorlw VEL_BUFF_485 ; xor w a konstanty velikosti bufferu
skpnz ; pokud se w a ... rovnají je vísledkem 0 když ne poskoč
bsf TX_485_FULL ; nastavuji příznak plného buff.
bsf TX_485_CHAR ; nastav příznak znaků v buferu
; intgo ; povolí přerušení
btfsc TIMER0 ; pokud není timer poskoč
return ; je ... tak skoč
btfsc VYSILA_485 ; pokud nevysila ser port poskoč
return ; je ... tak skoč
banksel TX_485_BUF
movfw TX_485_BUF
bank0
sublw d'1'
skpnc
return
U_485_T_03 bcf INTCON,GIE
call Dej_485_TX ; dej mi znak
NASTAV_VYSILANI
movwf TXREG ; dej ho do ...
bsf VYSILA_485
bsf INTCON,GIE
return
;******************** konec těl podprogramů ********************
;******************** Přerusení ********************
PRERUS ; zálohování se provádí na začátku
; testy které přeušení to bylo
btfsc PIR1,RCIF ; test ser RX portu
goto Byl_485_RX
btfsc PIR1,TXIF ; test ser TX portu
goto Byl_485_TX
;... případně nějaká další přerušení
btfss TIMER0 ; pokud je povolen časovač poskoč
goto PRERUSERR ; protože není povolen timer0 přeskoč ho
btfsc INTCON,T0IF ; test na timer
goto Byl_TMR0
PRERUSERR ; btfsc PIR1,ADIF ; test na AD prev.
; goto Byl_AD
; protože jsi došel sem tak je nějaké nepoužité přerušení tak smaž všechny a
pokračuj
clrf PIR1
clrf PIR2
movlw H_INTCON
movwf BLIK_W
bcf BLIK_W,7
movf BLIK_W,W
movwf INTCON
; zakončovasí procedura pro ukončení přerušení
INT_END bank0
movfw TMP_PCLATH
movwf PCLATH
movfw TMP_FSR
movwf FSR
movfw TMP_S ; obnova STATUS
movwf STATUS ; OK
swapf TMP_W,F ; obnova W
swapf TMP_W,W ; OK
retfie ; navrat z preruseni
; -------------------------------
Byl_485_RX bcf PIR1,RCIF ; nuluj znak přerušení
movf RCREG,W ; přečti ..
Uloz_485_RX ;
banksel RX_485_TMP
movwf RX_485_TMP ; ulož do tmp pozice
movlw RX_485_POZ ; ulož adresuzápisu-1 registru do FSR
movwf FSR ; OK
movf RX_485_POZ,W ; přičti pozici kde se zapisuje
addwf FSR,F ; do FSR OK
movf RX_485_TMP,W ; ulož znak
FSR_HI
movwf INDF ; OK
FSR_LO
decfsz RX_485_POZ,F ; odečti na ukazateli a poskoč pokud je nulový
goto U_485_R_01
movlw VEL_BUFF_485 ; zapiš velikost bufferu do
movwf RX_485_POZ ; OK
U_485_R_01 incf RX_485_BUF,F ; přičti na počtu znaků
movf RX_485_BUF,W ; test zda je buff. plný FULL
banksel bool01 ; přepne na banku 0
xorlw VEL_BUFF_485 ; xor w a konstanty velikosti bufferu
skpnz ; pokud se w a ... rovnají je vísledkem 0 když ne poskoč
bsf RX_485_FULL ; nastavuji příznak plného buff.
bsf RX_485_CHAR ; nastav příznak znaků v buferu
movlw H_RCSTA ; nuluj případné chyby při přenosu
movwf RCSTA ; OK
movfw TIMEOUT ; nastavení timeoutu do časovače TMR0 (musí být banka 0)
movwf TMR0 ; OK
bcf INTCON,T0IF ; zruš příznak timeoutu (časovače)
bsf TIMER0 ; zapni časovač
goto INT_END
Byl_485_TX bcf PIR1,TXIF ; nuluj znak přerušení
btfss TX_485_CHAR ; test zda je nějaký znak v buferu
goto Byl_485_TX_01 ; není
bsf VYSILA_485 ; nastav příznak
call Dej_485_TX ; dej mi znak
NASTAV_VYSILANI
movwf TXREG ; dej ho do ...
goto INT_END
Byl_485_TX_01 btfsc VYSILA_485
goto Byl_485_TX_02
NASTAV_PRIJEM
goto INT_END
Byl_485_TX_02 bcf VYSILA_485 ; zruš příznak
movlw d'255'
movwf TXREG ; dej ho do ...
goto INT_END
Byl_TMR0 bcf INTCON,T0IF ; zruš příznak
bcf TIMER0 ; vypni časovač
movfw TIMEOUT ; nastavení timeoutu do časovače TMR0 (musí být banka 0)
movwf TMR0 ; OK
btfss TX_485_CHAR ; pokud jsou znaky ve vys. buf tak poskoč
goto INT_END ; nejsou
goto Byl_485_TX ; jsou tak jdi na vysílání
;-------------------------------
;************************************ konec přerušení
********************************
;**************************************************************
ORG 0x1817
;;; tady musí začínat inity ostatních programů
;******************** Inicializace procesoru ********************
errorlevel -302 ; suppress message 302 from list file
INIT bcf STATUS,RP1 ; nastaveni BANKY 0
bcf STATUS,RP0 ; nastaveni BANKY 0
; ------------------------
clrf PORTA ; prednastaveni PORTu A
clrf PORTB ; prednastaveni PORTu B
clrf PORTC ; prednastaveni PORTu C
clrf PORTD ; prednastaveni PORTu D
clrf PORTE ; prednastaveni PORTu E
; ------------------------
bcf INTCON,GIE ; zakaž všechna přerušení
FSR_HI
movlw 0xEF
movwf FSR
movlw d'96'
movwf TMP_W
MAZ_B3 clrf INDF
decf FSR,F
decfsz TMP_W,F
goto MAZ_B3
movlw 0x6F
movwf FSR
movlw d'96'
movwf TMP_W
MAZ_B2 clrf INDF
decf FSR,F
decfsz TMP_W,F
goto MAZ_B2
FSR_LO
movlw 0xEF
movwf FSR
movlw d'80'
movwf TMP_W
MAZ_B1 clrf INDF
decf FSR,F
decfsz TMP_W,F
goto MAZ_B1
movlw 0x7E
movwf FSR
movlw d'95' ; 95 protože je 96-tý vynulován chodem programu
movwf TMP_W
MAZ_B0 clrf INDF
decf FSR,F
decfsz TMP_W,F
goto MAZ_B0
bank0to1 ; nastaveni BANKY 1
movlw H_TRISA
movwf TRISA
movlw H_TRISB
movwf TRISB
movlw H_TRISC
movwf TRISC
movlw H_TRISD
movwf TRISD
movlw H_TRISE
movwf TRISE
movlw H_ADCON1
movwf ADCON1
movlw H_PIE1
movwf PIE1
movlw H_PIE2
movwf PIE2
movlw H_OPTION_REG
movwf OPTION_REG
movlw H_TXSTA
movwf TXSTA
movlw H_SPBRG
movwf SPBRG
movlw H_SSPSTAT
movwf SSPSTAT
movlw H_SSPADD
movwf SSPADD
clrf PR2 ; nuluj počet při kterém vyvolá přerušení tmr2
; ------------------------
bank1to3
movlw H_EECON1
movwf EECON1
banksel TX_485_POC
movlw VEL_BUFF_485 ; zapiš velikost bufferu do
movwf TX_485_POC ; míso kde se bude číst
movwf TX_485_POZ ; míso kam se bude zapisovat
movwf RX_485_POC ; míso kde se bude číst
movwf RX_485_POZ ; míso kam se bude zapisovat
; vynuluj
bank0 ; !!!!!!!!!!!!!!!!!!!!!!!! BANK0 !!!
movlw H_TIMEOUT
movwf TIMEOUT ; nastavení timeoutu do časovače TMR0 (musí být banka 0)
movwf TMR0 ; OK
movlw H_T1CON
movwf T1CON
movlw H_T2CON
movwf T2CON
movlw H_SSPCON
movwf SSPCON
movlw H_CCP1CON
movwf CCP1CON
movlw H_CCP2CON
movwf CCP2CON
movlw H_ADCON0
movwf ADCON0
movlw H_RCSTA
movwf RCSTA
clrf PORTA ; prednastaveni PORTu A
clrf PORTB ; prednastaveni PORTu B
clrf PORTC ; prednastaveni PORTu C
clrf PORTD ; prednastaveni PORTu D
clrf PORTE ; prednastaveni PORTu E
; NASTAV_PRIJEM macro
bcf SMER_485_PC ; přepni na 485-ce
bank0to1
movlw H_TXSTA ; zakazuji vysílání
movwf TXSTA ; OK
bank1to0
movlw H_RCSTA ; povoluji příjem
movwf RCSTA ; OK
movlw H_485_TX_START_AKCE
movwf AKCE_485_TX
movlw H_485_RX_START_AKCE
movwf AKCE_485_RX
clrf PIR1
clrf PIR2
movlw H_INTCON
movwf INTCON
bsf INTCON,GIE
errorlevel +302 ; suppress message 302 from list file
clrf PCLATH
errorlevel -306 ; suppress message 302 from list file
goto Start
errorlevel +306 ; suppress message 302 from list file
;******************** konec INITu
*****************************************
;*****************************************************************
;* BY MILAN KRATOCHVÍL ML. *
;*****************************************************************
end
Další informace o konferenci Hw-list