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