Hur man gör en klapp-klapp på / klapp-klapp av växla krets! (5 / 6 steg)
Steg 5: programvara
Jag har gjort mitt bästa att kommentera ut detta program så gott jag kunde. Du ska kunna följa med. Det är inget mästerverk, men igen, jag jobbade med en sämre instruktionsuppsättning. Du kan hämta den. ASM-kod och använda den med din PIC ICD2 programmerare puck, som framgår av bilden. Jag är också glad att svara på eventuella frågor du har programvaran!
ASM koden kan laddas ner här: http://www.electroniclessons.com/10F222TMPO.ASM
*********************************************************************************************
MAIN-KOD 0X000
MOVWF OSCCAL; Uppdatera registret med fabriken cal värde
INITIERA
MOVLW B '0010'; GPIO1 = KOMPARATOR I - GPIO0-RELAY AKTIVERA
TRIS GPIO; INITIERA
CLRF ADCON0; ADC INAKTIVERA
CLRF GPIO; TYDLIG UTGÅNGAR
MOVLW B "00001000"
ALTERNATIV. AKTIVERA GPIO2 AS A DIGITAL PORT
SCAN1:
BTFSS GPIO, 1; KONTROLLERA ATT SE OM HÖGT BULLER (KLAPPA ÄR UPPTÄCKT)
GÅ TILL SCAN1; OM INTE, SCAN IGEN (LOOP)
SE TILL:
BTFSC GPIO, 1; VÅGFORMEN GÅTT FRÅN HÖG TILL LÅG?
GÅ TILL SÄKERSTÄLLA; OM INTE, KOLLA IGEN (LOOP). OM SÅ, GÅ TILL NÄSTA INSTRUKTION
KALLA LOOP1; DRÖJSMÅL
NEDRÄKNING:; COUNTDOWN RUTIN
MOVLW 0XFF; LOAD REFERENSVÄRDET
MOVWF TEMP5; LOAD TIMING REGISTRERA #1 MED REFERENSVÄRDET OVAN
MOVLW 0XFF; LOAD REFERENSVÄRDET
MOVWF TEMP6; LOAD TIMING REGISTER #2 MED REFERENSVÄRDET
COUNTDOWN2:; FAKTISKA DOUNTDOWN RUTIN
BTFSC GPIO, 1; KONTROLLERA ATT SE OM BULLER ÄR UPPENBART.
GÅ TILL RELAYACTIVATE; OM JA, AKTIVERA RELÄ (VÄXLA)
DECFSZ TEMP5; OM INTE, STEGVIS MINSKNING COUNTER #1 OM REG = 0, HOPPA ÖVER NÄSTA STEG
GÅ TILL COUNTDOWN2; GÅ TILLBAKA OCH LETA IGEN EFTER ANDRA HÖGT LJUD
MOVLW 0XFF; LOAD TIMING REGISTER #1 MED FULLA VÄRDET IGEN
MOVWF TEMP5; BELASTNING
DECFSZ TEMP6; DEKREMENT T-REGISTER #2
GÅ TILL COUNTDOWN2; OM TIMING REGISTER #2 INTE Z, ANDRA SKANNA IGEN
GÅ TILL SCAN1; OM TIMING REGISTER #2 VAR 0, GÅ TILLBAKA TILL START
RELAYACTIVATE:
BSF GPIO, 0; AKTIVERA RELÄ
KALLA LOOP1; SERIE 3 FÖRSENINGAR
KALLA LOOP1
KALLA LOOP1
; DENNA NÄSTA SEKVENS ÄR BARA EN MIMICK AV DEN FÖRSTA SEKVENSEN, BARA VI ÄR
; VÄNTAR PÅ ATT VÄXLA RELÄET TILLBAKA TILL DESS URSPRUNGLIGA POTISION.
; JAG HAR LAGT TILL I EN KORT FÖRSENING I BÖRJAN, BETECKNAS MED ***
SCAN2:
KALLA LOOP1; SERIE 3 FÖRSENINGAR
KALLA LOOP1
KALLA LOOP1
BTFSS GPIO, 1
GÅ TILL SCAN2
ENSURE2:
BTFSC GPIO, 1
GÅ TILL ENSURE2
KALLA LOOP1
COUNTDOWN3:
MOVLW 0XFF
MOVWF TEMP5
MOVLW 0XFF
MOVWF TEMP6
COUNTDOWN4:
BTFSC GPIO, 1
GÅ TILL RELAYDEACTIVATE
DECFSZ TEMP5
GÅ TILL COUNTDOWN4
MOVLW 0XFF
MOVWF TEMP5
DECFSZ TEMP6
GÅ TILL COUNTDOWN4
GÅ TILL SCAN2
RELAYDEACTIVATE:
BCF GPIO, 0; INAKTIVERA RELAY
NOLLSTÄLL; ÅTERSTÄLL PROGRAM
LOOP1:
; LOOP RUTIN FUNGERAR SOM DETTA. VI LADDA TIMING REGISTER TEMP1/2 MED 8-BITARS
VÄRDEN OCH IT FUNGERAR I HUVUDSAK RÄKNA NED FÖRSTA REGISTRET, OCH
NÄR DET FÖRSTA REGISTRET ÄR 0, PROGRAM MINSKAR ANDRA TIMING REGISTRET (TEMP2). VID DENNA PUNKT, DETTA HÅLLER PÅ ATT GÖRA SAMMA SAK TILLS TEMP2 REGISTER VÄRDE = 0, VID VILKEN PUNKT, DRÖJSMÅL ÄNDARNA OCH VI GÅ TILLBAKA TILL PROGRAMMET.
MOVLW 0X00
MOVWF TEMP1
MOVLW 0XF0
MOVWF TEMP2
LOOP2:
DECFSZ TEMP1
GÅ TILL LOOP2
DECFSZ TEMP2
GÅ TILL LOOP2
RETURNERA
SLUTET
***********************************************************************************************