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
;wend

Ik 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"