Návrch programu pro PIC16F628
Milan Cizek
Cizek.Milan@seznam.cz
Středa Červen 2 13:45:44 CEST 2004
Ahoj,
zacinam se ucit na procesoru PIC16F84, ke kteremu mam pripojene 2xLED (RA2,RA3), 2xVentilator (RA0,RA1 pro rizeni a RB4,RB5 pro kontrolu otaceni) a 1x DS18B20 cidlo (RB0). PIC USART je pak propojeny s PC. Predem upozornuji, ze jsem v tomto oboru docela laik, nevim tedy jestli je muj navrh spravny... BANK0/1 jsou makra.
#DEFINE DSWIRE PORTB,0 ; DS sensors 1-Wire Bus
;-----/ Inicializace procesoru /--------------------------------------
INIT movlw b'00000111' ; vypnout komparátory
movwf CMCON ; W -> CMCON
BANK1
movlw b'01111' ; zápis do reg. W (RA4-0)
movwf TRISA ; W -> TRISA
movlw b'00000000' ; zápis do reg. W (RA7-0)
movwf TRISB ; W -> TRISB
movlw .25 ; 9600 Bd pri 4.000 MHz XTAL
movwf SPBRG ; W -> SPBRG
bsf TXSTA,BRGH ; nasatvit High speed
bsf TXSTA,TXEN ; transmit enabled
BANK0
bsf RCSTA,SPEN ; serial port enabled
bsf RCSTA,CREN ; continuous receive
movlw b'00110000' ; povolit vybraná přerušení
movwf PIE1 ; W -> PIE1
movlw b'11011011' ; povolit vybraná přerušení
movwf INTCON ; W -> INTCON
bsf DSWIRE ; 1-Wire Bus, neaktivní v H
Problem mam s tim, ze jakmile se tento blok dokonci, zacne se provadet preruseni a stále dokola, takze se mi samotny program ani nezacne provadet. Když se to pokusim krokovat, tak se mi zavola IH_DS, ale jen 1x, protože v tele podprogramu ten priznak vynuluji. GIE je v te době také 0. Proc se mi to cykli? Nemelo by to z preruseni vypadnout a pokracovat?
;-----/ Obsluha přerušení /-------------------------------------------
org 4
movwf TEMP_W ; záloha reg. W
swapf STATUS,W ; registr STATUS -> W
movwf TEMP_S ; záloha reg. STATUS
; vlastní kód přerušeni
BANK0
movlw PORTB ; aktualní PORTB -> W
btfsc INTCON,INTF ; RB0/INT
call IH_DS
btfsc PIR1,RCIF ; USART RX
call IH_USART_RX
btfsc PIR1,TXIF ; USART TX
call IH_USART_TX
btfss INTCON,RBIF ; RB7..RB4
goto $+5
btfsc W,4 ; FANCTRL1
call IH_FANCTRL1 ; prozatím neimplementováno
btfsc W,5 ; FANCTRL2
call IH_FANCTRL2 ; prozatím neimplementováno
swapf TEMP_S,W ; původní STATUS -> W
movwf STATUS ; navrácení STATUS
swapf TEMP_W,f
swapf TEMP_W,W ; návrat původního W
retfie
Diky za pomoc. Jen doufam, ze nejsem uplne mimo.
Milan
____________________________________________________________
Příjemný design. Příjemnější cena! SonyEricsson T105 již od 577 Kč. www.oskar.cz
http://ad.seznam.cz/clickthru?spotId=74856
Další informace o konferenci Hw-list