DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
;Logische constanten
SYMBOL AAN = 0 ;Aan = 0
SYMBOL EE_Teller = 0 ;EE_Teller = 0
SYMBOL ingang = PORTA.4 ;PORTA.4 = ingang
SYMBOL S1 = PORTB.0 ;PORTB.0 = S1
SYMBOL S2 = PORTB.1 ;PORTB.1 = S2
SYMBOL maxtijd = 5000 ;Maxtijd = 5000
DIM Teller1 AS BYTE ;Teller 255
DIM Teller2 AS BYTE ;Teller 255
; 76543210
PORTA = %00000000 ;PORTA uitgangen bij opstart een laag niveau
TRISA = %11110011 ;PORTA.2 en A.3 zijn uitgangen voor de LED's
TRISB = %11111111 ;Deze regel mag eventueel weggelaten worden
PORTB_PULLUPS ON ;On-chip pull-up weerstanden actief (voor de schakelaars)
CLEAR ;Wis alle RAM geheugen
DELAYMS 500 ;LCD stabilisering
;--------------------------------------------------------------------------------------------------
;hoofdprogramma
CLS ;Clear
Teller2 = 10
WHILE 1 = 1 ;While 1 = 1
DEC Teller2
DELAYMS 1000
PRINT AT 2, 1, "Program? Hold S2"
PRINT AT 1, 8, DEC Teller2
IF Teller2 = 0 THEN GOTO lus1
IF S2 = 0 THEN GOTO lus2
WEND
;--------------------------------------------------------------------------------------------------
lus1:
IF S2 = 1 THEN GOTO lus2
IF S1 = 0 THEN ;Als S1 is laag dan..
CLS ;Clear screen
WHILE 1 = 1 ;While 1 = 1
IF S2 = 0 THEN BREAK ;Als S2 is laag dan uit loop springen
IF S1 = 0 THEN ;Als S1 is laag dan..
Teller1 = EREAD EE_Teller ;Teller heeft gelezen waarde van EE_Teller
PRINT AT 1, 1, DEC3 Teller1 ;Print At 1, 1, Teller waarde
WHILE (PORTB & 3) = 3 : WEND ;Wachten tot er een toets word in gedrukt op poort B
DELAYMS 50 ;Antiedender
ENDIF ;End "if"
WEND ;Einde While lus
ENDIF ;End "if"
END
;--------------------------------------------------------------------------------------------------
lus2:
IF S2 = 0 THEN ;Als S2 = laag dan..
CLS ;Clear screen
WHILE 1 = 1 ;While 1 = 1
PRINT AT 1, 1, "Ingestelde waarde" ;Print At 1, 1, Ingestelde waarde
PRINT AT 2, 1, "bevestig S1"
PRINT AT 2, 13, DEC3 Teller1 ;Print At 2, 1, Tellerwaarde
DELAYMS 250 ;Telsnelheid
WHILE (PORTB & 3) = 3 : WEND ;Wacht hier in deze lus tot een toets wordt ingedrukt
DELAYMS 10 ;Antidender
IF S2 = 0 AND Teller1 < 255 THEN INC Teller1 ;'Teller' met 1 verhogen
IF Teller1 = 255 THEN Teller1 = 0 ;Als teller 255 is dan teller is 0
IF S1 = 0 THEN EWRITE EE_Teller, [Teller1] ;Als S1 is laag dan zet in EE_Teller de waarde die opgegeven is
IF S2 = 1 THEN BREAK ;Als S2 is hoog dan uit loop springen
WEND ;Einde While lus
ENDIF ;End "if"
IF S1 = 1 AND S2 = 1 THEN
CLS
WHILE 1 = 1
IF S2 = 0 THEN BREAK
Teller1 = EREAD EE_Teller
PRINT AT 1, 1, DEC3 Teller1
PRINT AT 2, 1, "Change? Push S2"
WEND
ENDIF
;--------------------------------------------------------------------------------------------------
;while 1 = 1
IF Teller2 = 20 AND ingang = 1 THEN
HIGH PORTA.2
ENDIF
;wendIk heb dit programma nu in mijn pic, 16F628A staan:
Dit programma werkt als volgt,
Als ik mijn programma aanzet dan zie je op mijn display een teller van 10 t/m 0 aflopen waarbij ook nog staat als je dit programma wilt wijzigen klik op S2,
Als je niet binnen deze 10 Seconde op toets S2 klikt dan komt op het display de waarde van de EEProm te staan.
Met als toegevoegde tekst als je op S2 klikt kom je weer bij het begin en kan je het alsnog programmeren.
Dus als je bijvoorbeeld binnen 10 seconde wilt programmere dan kun je het nummer van de 2e teller veranderen tussen 0 en 255,
Als je daarna op S1 klikt schrijft hij dit nummer naar de EEProm en kun je het vervolgens weer uitlezen..
Wat ik nu wil doen is achter een bepaald nummer een poort een bepaalde tijd aanzetten.
Dus bijvoorbeeld ik stel nummer 1 in dan schrijft hij dit naar de EEprom
en als dan "ingang hoog is(5v)" en nummer 1 in de EEprom staat dan moet bijv. PORTA.1 of PORTA.2 aan gaan 2 seconde ( hier komen LED's )
Snappen jullie mijn bedoeling een beetje?
Als dus bij de EEprom dan bijv. een 1 staat en op de ingang staat 5 volt dan wil ik dat mijn PORTA.1 een bepaalde tijd hoog blijft.
Ik krijg dat gedeelte alleen niet geprogrammeerd..
Ik zat te denken aan if teller2 = 1 and ingang = high then high led 1 2000ms then low led..
Alleen weet ik niet hoe ik dit erin moet krijgen..
kan iemand mij helpen?
MVG Roché
"beginner"