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