elem, ovo je parcence seme sa piconjom 876A koji bi trebao da uskoci u obradu stanja na PORTB kada bilo koji od pinova bude 'priheftan' na masu (RB0/INT bi trebao da otera uC u interapt). E, sad, hardverski sve fonkcionise (bilo koji od Cnt pin-ova kada se povuce na Lo, i RB0/INT ode na Lo, medjutim, PIC ne odlazi u interapt rutinu.
Evo kako izgleda kostur programa (Proton+)
Code:
Device 16F876A
ALL_DIGITAL true
PORTB_PULLUPS false
XTAL 8
on_interrupt GoTo Intrpt
on_hardware_interrupt GoTo Intrpt
Declare LCD_DTPIN PORTC.0
Declare LCD_ENPIN PORTC.4
Declare LCD_RSPIN PORTC.5
Declare LCD_INTERFACE 4
Declare LCD_LINES 2
Declare LCD_TYPE ALPHA
Declare RSIN_TIMEOUT 60000
Declare RSIN_PIN PORTC.7
Declare RSIN_MODE true
Declare SERIAL_BAUD 1200
'****************************************************************
'* Definicije pinova *
'****************************************************************
Symbol Cnt1 PORTB.1
Symbol Cnt2 PORTB.2
Symbol Cnt3 PORTB.3
Symbol Cnt4 PORTB.4
Symbol Cnt5 PORTB.5
Symbol Cnt6 PORTB.6
Symbol BackLight PORTA.5
Symbol Light PORTA.0
Symbol SenseRX PORTB.7
Symbol GIE = INTCON.7
Symbol INTEDG = OPTION_REG.1
Symbol INTF = INTCON.1
Symbol INTE = INTCON.4
'****************************************************************
'* Promenljive *
'****************************************************************
.
.
.
'****************************************************************
'* Konstante *
'****************************************************************
.
.
.
Clear
DelayMS 100
INTEDG = 0
INTF = 0
Enable Interrupt
GoTo Glavni
'****************************************************************
'* Podprogrami *
'****************************************************************
.
.
.
.
'****************************************************************
'* Obrada interapta *
'****************************************************************
Intrpt:
GIE = 0
Promena = 1
ZaUpis = 1
Stanje = PORTB
INTF = 0
GIE = 1
Context Restore
'****************************************************************
'* Glavni program *
'****************************************************************
Glavni:
.
.
.
If Promena = 1 Then
If Stanje.1 = 0 Then
Inc Counter1
Promena = 0
EndIf
If Stanje.2 = 0 Then
Inc Counter2
Promena = 0
EndIf
If Stanje.3 = 0 Then
Inc Counter3
Promena = 0
EndIf
If Stanje.4 = 0 Then
Inc Counter4
Promena = 0
EndIf
If Stanje.5 = 0 Then
Inc Counter5
Promena = 0
EndIf
If Stanje.6 = 0 Then
Inc Counter6
Promena = 0
EndIf
Stanje = $FF
EndIf
Inc Brojac
' Da li je proslo dovoljno vremena da se upisu podaci u EEPROM
If Brojac = $FFFE And ZaUpis = 1 Then
GoSub UpisiEE
EndIf
If Brojac = $FFFE And ZaUpis = 0 Then
Brojac = 0
EndIf
GoTo Petlja
Kraj:
End
Device 16F876A
ALL_DIGITAL true
PORTB_PULLUPS false
XTAL 8
on_interrupt GoTo Intrpt
on_hardware_interrupt GoTo Intrpt
Declare LCD_DTPIN PORTC.0
Declare LCD_ENPIN PORTC.4
Declare LCD_RSPIN PORTC.5
Declare LCD_INTERFACE 4
Declare LCD_LINES 2
Declare LCD_TYPE ALPHA
Declare RSIN_TIMEOUT 60000
Declare RSIN_PIN PORTC.7
Declare RSIN_MODE true
Declare SERIAL_BAUD 1200
'****************************************************************
'* Definicije pinova *
'****************************************************************
Symbol Cnt1 PORTB.1
Symbol Cnt2 PORTB.2
Symbol Cnt3 PORTB.3
Symbol Cnt4 PORTB.4
Symbol Cnt5 PORTB.5
Symbol Cnt6 PORTB.6
Symbol BackLight PORTA.5
Symbol Light PORTA.0
Symbol SenseRX PORTB.7
Symbol GIE = INTCON.7
Symbol INTEDG = OPTION_REG.1
Symbol INTF = INTCON.1
Symbol INTE = INTCON.4
'****************************************************************
'* Promenljive *
'****************************************************************
.
.
.
'****************************************************************
'* Konstante *
'****************************************************************
.
.
.
Clear
DelayMS 100
INTEDG = 0
INTF = 0
Enable Interrupt
GoTo Glavni
'****************************************************************
'* Podprogrami *
'****************************************************************
.
.
.
.
'****************************************************************
'* Obrada interapta *
'****************************************************************
Intrpt:
GIE = 0
Promena = 1
ZaUpis = 1
Stanje = PORTB
INTF = 0
GIE = 1
Context Restore
'****************************************************************
'* Glavni program *
'****************************************************************
Glavni:
.
.
.
If Promena = 1 Then
If Stanje.1 = 0 Then
Inc Counter1
Promena = 0
EndIf
If Stanje.2 = 0 Then
Inc Counter2
Promena = 0
EndIf
If Stanje.3 = 0 Then
Inc Counter3
Promena = 0
EndIf
If Stanje.4 = 0 Then
Inc Counter4
Promena = 0
EndIf
If Stanje.5 = 0 Then
Inc Counter5
Promena = 0
EndIf
If Stanje.6 = 0 Then
Inc Counter6
Promena = 0
EndIf
Stanje = $FF
EndIf
Inc Brojac
' Da li je proslo dovoljno vremena da se upisu podaci u EEPROM
If Brojac = $FFFE And ZaUpis = 1 Then
GoSub UpisiEE
EndIf
If Brojac = $FFFE And ZaUpis = 0 Then
Brojac = 0
EndIf
GoTo Petlja
Kraj:
End
Ehm, jos da prikacim i parce seme, al' to drugi put.