RE: Návrch programu pro PIC16F628

Milan Cizek Cizek.Milan@seznam.cz
Čtvrtek Červen 3 14:13:08 CEST 2004


Ahoj,
tak jsem to uz asi vyresil. To preruseni, které se vyvolavalo bylo indikovano RBIF, proto jsem myslel, ze jde o vyuzivany RB4 nebo RB5. Jakmile jsem zacal RBIF nulovat nezavisle na pinu, zacalo to fungovat. Chyba byla v:

		movlw	b'11011000'		; povolit vybraná přerušení
		movwf	INTCON		; W -> INTCON

Kde jsem do INTCON cpal 110011011, cimz jsem ten priznak vlastne sam spatne nastavil a další podminky uz pochopitelne selhaly. :) Kod preruseni jsem tedy na rady upravil nasledovne (ejstli mi to pro jistotu zkouknete):

		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
		movf	PORTB,0		; aktualní PORTB -> W 
		movwf	CS_PB

		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

		btfsc	INTCON,T0IF		; TMR0
		call	IH_TIMER

		btfss	INTCON,RBIF		; RB7..RB4
		goto	$+6
		bcf	INTCON,RBIF		; vynulujeme příznak
		btfsc	CS_PB,4		; FANCTRL1
		call	IH_FANCTRL1
		btfsc	CS_PB,5		; FANCTRL2
		call	IH_FANCTRL2


		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

Nulovani flagu provadim jen v IH_DS a IH_TIMER (tam, kde datasheet uvadi "must be cleared in software"). Ok?

Mam také nove dotazy a novy problem... :-)
Chtel bych nejakym zpusobem indikovat aktivitu na RB0 (jedna LED) a USARTu (druha LED). Kam nejlepe umistit prikaz k rozsviceni/zhasnuti aby byla aktivita sledovatelna? Je na to nejaka "strategie" nebo prozte zkusit, pribrzdovani asi nebude to prave, ze? :)

Ciste teoreticky by mne zajimalo, jak regulovat otacky 2 ventilatoru, nezavisle na sobe. Kdysi mne někdo smeroval na PWM, ale vubec jsem to nepochopil. :) Napadlo me vyuzit zbyvajici 2 timery a pokusit se regulovat pomoci impulzu ruzne delky. Tady vidim problem prave v urceni delky... Mate s tim někdo zkusenost? Je mozne neco takoveho zaclenit do programu tak, aby neprestal fungovat? (jaka je narocnost na strojovy cas).

A ted muj novy problem, opet zakousla smycka. ;-)

		movlw	'.'
		call	SEND

SEND		BANK0
		btfss	PIR1,TXIF	; počkáme na TX přerušení (ale nedockam se)
		goto	$-1
		movwf	TXREG		; W -> TXREG
		return

Teprve se v tom stracham, tak třeba na to za chvili prijdu sam. :-)

PS> napada me jeste navazujici dotaz - jde v MPLABu nejak jednoduseji nasimulovat seriovou komunikaci z PC nez zadavat jednotlive impulzy? :-)

Diky vsem za pomoc.
Milan
____________________________________________________________
Internet Expres vám přináší nové možnosti zábavy - filmy, hudbu, hry, sport, to vše si budete na internetu užívat bez čekání, po celý den.
http://ad.seznam.cz/clickthru?spotId=74659



Další informace o konferenci Hw-list