Schritt 5: SOFTWARE
Ich habe mein Bestes getan, um kommentieren Sie dieses Programm so gut ich konnte. Sie sollten in der Lage zu folgen sein. Es ist kein Meisterwerk, aber wieder, ich arbeite mit einem minderwertigen Befehlssatz. Sie können die. ASM code und verwenden Sie es mit Ihrem PIC ICD2 Programmierer Puck, wie im Bild zu sehen. Ich freue mich auch für alle Fragen rund um die Software!
Die ASM-Code kann hier heruntergeladen werden: http://www.electroniclessons.com/10F222TMPO.ASM
*********************************************************************************************
MAIN-CODE 0X000
MOVWF OSCCAL; Update-Register mit Fabrik-cal-Wert
INITIALISIEREN
MOVLW B '0010'; GPIO1 = KOMPARATOR IN - GPIO0-RELAIS ZU AKTIVIEREN
TRIS GPIO; INITIALISIEREN
CLRF ADCON0; ADC DEAKTIVIEREN
CLRF GPIO; KLARE ERGEBNISSE
MOVLW B "00001000"
OPTION; AKTIVIEREN SIE GPIO2 AS A DIGITAL PORT
SCAN1:
BTFSS GPIO, 1; ÜBERPRÜFEN SIE, OB LAUTE GERÄUSCHE (CLAP WIRD ERKANNT)
GOTO SCAN1; WENN NICHT, SCAN WIEDER (LOOP)
STELLEN SIE SICHER:
BTFSC GPIO, 1; IST DIE WELLENFORM VON HOCH AUF NIEDRIG GEBLIEBEN?
GOTO ZU GEWÄHRLEISTEN; WENN DIES NICHT DER FALL IST, ÜBERPRÜFEN SIE ERNEUT (LOOP). IF SO, NÄCHSTE ANWEISUNG GOTO
RUFEN SIE LOOP1; VERZÖGERUNG
COUNTDOWN:; COUNTDOWN-ROUTINE
MOVLW 0XFF; LAST-REFERENZWERT
MOVWF TEMP5; LAST TIMING REGISTER #1 MIT OBEN GENANNTEN REFERENZWERT
MOVLW 0XFF; LAST-REFERENZWERT
MOVWF TEMP6; LAST TIMING REGISTER #2 MIT REFERENZWERT
COUNTDOWN2:; TATSÄCHLICHEN DOUNTDOWN ROUTINE
BTFSC GPIO, 1; ÜBERPRÜFEN SIE, OB LAUTES GERÄUSCH ERSICHTLICH IST.
GOTO RELAYACTIVATE; WENN JA, AKTIVIEREN SIE RELAY (TOGGLE)
DECFSZ TEMP5; WENN NICHT, DEKREMENTIEREN ZÄHLER #1, WENN REG = 0, NÄCHSTE SCHRITT ÜBERSPRINGEN
GOTO COUNTDOWN2; GEHEN SIE ZURÜCK UND SUCHEN SIE ERNEUT NACH ZWEITEN LAUTES GERÄUSCH
MOVLW 0XFF; LAST TIMING REGISTER #1 MIT VOLLEN WERT WIEDER
MOVWF TEMP5; LAST
DECFSZ TEMP6; DEKREMENT T-REGISTER #2
GOTO COUNTDOWN2; IST TIMING REGISTER #2 NICHT Z, ZWEITER SCAN WIEDER
GOTO SCAN1; WENN TIMING REGISTER #2 0 WAR, ZURÜCK ZUM START
RELAYACTIVATE:
BSF GPIO, 0; RELAIS ZU AKTIVIEREN
RUFEN SIE LOOP1; REIHE VON 3 VERZÖGERUNGEN
RUFEN SIE LOOP1
RUFEN SIE LOOP1
; DIESE NÄCHSTE SEQUENZ IST NUR EINE MIMICK DER ERSTEN SEQUENZ, NUR WIR SIND
; WARTET DARAUF, SCHALTET DAS RELAIS ZURÜCK ZU SEINER URSPRÜNGLICHEN POTISION.
; ICH HABE IN EINER KURZEN VERZÖGERUNG AM ANFANG, GEKENNZEICHNET DURCH ***
SCAN2:
RUFEN SIE LOOP1; REIHE VON 3 VERZÖGERUNGEN
RUFEN SIE LOOP1
RUFEN SIE LOOP1
BTFSS GPIO, 1
GOTO SCAN2
ENSURE2:
BTFSC GPIO, 1
GOTO ENSURE2
RUFEN SIE LOOP1
COUNTDOWN3:
MOVLW 0XFF
MOVWF TEMP5
MOVLW 0XFF
MOVWF TEMP6
COUNTDOWN4:
BTFSC GPIO, 1
GOTO RELAYDEACTIVATE
DECFSZ TEMP5
GOTO COUNTDOWN4
MOVLW 0XFF
MOVWF TEMP5
DECFSZ TEMP6
GOTO COUNTDOWN4
GOTO SCAN2
RELAYDEACTIVATE:
BCF GPIO, 0; RELAIS ZU DEAKTIVIEREN
RESET ; RESET-PROGRAMM
LOOP1:
; DIE SCHLEIFE ROUTINEARBEITEN GEFÄLLT DAS. WIR LADEN TIMING REGISTER TEMP1/2 MIT 8-BIT
WERTE UND ES FUNKTIONIERT IM WESENTLICHEN HERUNTER DAS ERSTE REGISTER GEZÄHLT UND
WANN IST DAS ERSTE REGISTER 0, DIE PROGRAMM NIMMT AB DEM ZWEITEN TIMING-REGISTER (TEMP2). AN DIESER STELLE DIES IMMER AUF DAS GLEICHE TUN BIS TEMP2 REGISTERWERT = 0, AN DEM PUNKT, DIE VERZÖGERUNG ENDET UND WIR DAS PROGRAMM ZURÜCKGESCHALTET.
MOVLW 0 X 00
MOVWF TEMP1
MOVLW 0XF0
MOVWF TEMP2
LOOP2:
DECFSZ TEMP1
GOTO LOOP2
DECFSZ TEMP2
GOTO LOOP2
RÜCKKEHR
ENDE
***********************************************************************************************