Code:
Starten:
'PICProg-Einstellungen
DEFINE OSC 4
INCLUDE "DT_INTS-14.bas" ' Base Interrupt System
INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts
INCLUDE "Elapsed_INT.bas" ' Elapsed Timer Routines
'Initialisierung
INTCON = 0
CMCON = 7
TRISB = %01111000
TRISA = %11111111
'Variablen
Position VAR WORD
TimerZaehler VAR WORD
Lied_Zuende VAR BIT
Zaehler VAR WORD
Zeit VAR WORD
Prozent VAR WORD
Zaehlervariable VAR Word
LiedPausenzeit Var Word
WH Var Word
AePosition Var Word
LED_Lied VAR BIT
'Hardwarezuweisungen
Aufnahme_Taster VAR PORTA.2
Stop_Taster VAR PORTA.3
Abspielen_Taster VAR PORTA.4
LED_Aufnahme VAR PORTB.0
LED_Stop VAR PORTB.1
LED_Start VAR PORTB.2
Lautsprecher VAR PORTB.7
'Konstanten
Ja CON 1
Nein CON 0
Gedrueckt CON 0
Frei CON 1
Aus CON 0
An CON 1
LED CON 0
Lied CON 1
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler TMR0_INT, _LEDAnAus, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
'T1CON = $1 ; Prescaler = 4, TMR0ON
OPTION_REG = $80
Einschalten:
while Ja = Ja
Beginn:
'Warten auf Start, Aufnahme oder Stop
Position = 1
Lied_Zuende = Nein
LED_Lied = LED
if Abspielen_Taster = Gedrueckt then
Pause 500
Zaehler = 1260
Gosub Gleichbleibend
LED_Aufnahme = Aus
GOSUB RedRedWine
else
if Stop_Taster = Gedrueckt then
Pause 500
Zaehler = 180
Gosub Gleichbleibend
LED_Aufnahme = Aus
GOSUB RedRedWine
else
if Aufnahme_Taster = Gedrueckt then
Pause 500
Zaehler = 7200
Gosub Gleichbleibend
LED_Aufnahme = Aus
GOSUB RedRedWine
EndIf
EndIf
EndIf
WenD
END
Inhalt:
Toggle LED_Aufnahme
Timerzaehler = 0
WH = WH - 1
Return
LEDAnAus:
TimerZaehler = TimerZaehler + 1
If Timerzaehler = 781 AND Zeit = 400 Then
Gosub Inhalt
ELSE
If Timerzaehler = 391 AND Zeit = 200 Then
Gosub Inhalt
Else
If Timerzaehler = 195 AND Zeit = 100 Then
Gosub Inhalt
Else
If Timerzaehler = 98 AND Zeit = 50 Then
Gosub Inhalt
EndIf
EndIf
EndIf
EndIf
@ INT_RETURN
Abspielen:
Zaehler = Zaehler * 1000
WH = DIV32 Zeit
WH = WH / 4
TimerZaehler = 0
@ INT_ENABLE TMR0_INT
WHILE WH >= 1
if Abspielen_Taster = Gedrueckt OR Aufnahme_Taster = Gedrueckt OR Stop_Taster = Gedrueckt then
@ INT_DISABLE TMR0_INT
Pause 500
WHILE Abspielen_Taster = Frei AND Aufnahme_Taster = Frei AND Stop_Taster = Frei
WEND
Pause 500
@ INT_ENABLE TMR0_INT
EndIf
Wend
@ INT_DISABLE TMR0_INT
Zaehler = Zaehler / 1000
Return
Liedpause:
Return
RedRedWine:
LED_Lied = Lied
'While Lied_Zuende = Nein And Abspielen_Taster = Frei And Aufnahme_Taster = Frei And Stop_Taster = Frei
While Abspielen_Taster = Frei And Aufnahme_Taster = Frei And Stop_Taster = Frei
Sound Lautsprecher,[0,0,104,44,0,8,109,44,0,8,110,94,0,13,106,94,0,120,112,39,0,0,114,39,0,0,0,26,0,0,114,46,0,0,110,39,0,0,106,114]
Sound Lautsprecher,[0,127,112,33,0,0,114,39,0,0,0,26,0,0,114,39,0,0,110,39,0,0,110,71,0,170,106,39,0,0,104,39,0,0,101,26,0,0,104,39]
Sound Lautsprecher,[0,0,106,12,0,0,104,147]
Wend
High LED_Aufnahme
Pause 1000
PORTB.7 = 0 'LS aus
Low LED_Aufnahme
RETURN
Gleichbleibend:
Zeit = 400
Sound Lautsprecher,[90,74]
GOSUB Abspielen
Zeit = 200
Sound Lautsprecher,[97,74]
GOSUB Abspielen
Zeit = 100
Sound Lautsprecher,[103,74]
GOSUB Abspielen
Zeit = 50
Sound Lautsprecher,[109,74]
GOSUB Abspielen
Return
Bookmarks