zrobilem sobie cos takiego ale nie chce dzialac bez procka dziala
poprawnie(recznie zatrzaskuje zatrzask)
moze ktos zechce spojzec na to ?
wlaczam zasialnie i nic pilot mam napewno pracujacy w rc5
tylko na 1 pinie jest stan wysoki
procesor zostal zaprogramowany bez ustawien pocztkowych i nie zabezpieczony
schemat jest tu:
www.toya.net.pl/~bialy/sch.png
zamiast r4-r6 sa zwory
program sterujacy :
'Ustawienie częstotliwości zegara taktującego (rezonator kwarcowy)
$regfile = "89c2051.dat"
$crystal = 11059200
Config Rc5 = P3.2
Config Sda = P3.7
Config Scl = P3.3
P1 = 0
Set P1.2
Set P1.1
'---------------------
'Konfiguracja przerwań
'najwyższy priorytet przerwań dla portu szeregowego
Priority Set Serial
'zezwolenie na przerwania z portu szeregowego i Timera1
Reset Tcon.0
On Serial Int_serial
On Int0 Receiverc5
Enable Serial
Enable Timer1
Enable Int0
'ogólne zezwolenie na przerwania
Enable Interrupts
'deklaracja procedury obslugi przerwania z poru szeregowego
'------------------------
'Konfiguracja portu RS232
Scon = &H50
Pcon = Pcon Or 128
'--------------------
'Konfiguracja Timera1
'Port szeregowy taktowany jest przerwaniami pochodzącymi z przepelnienia
'Timera1. Tak więc Timer1 musi być ustawiony jako timer 8-bitowy z
'autoprzeladowaniem i taktowany z wewnętrznego zegara:
Config Timer1 = Timer , Mode = 2 , Gate = Internal
'rejestr, od którego zależy prędkość transmisji.
'Th1 = 253 -> 19200 bps (jest to max. prędkość)
'Th1 = 250 -> 9600 bps
'Th1 = 244 -> 4800 bps
'Th1 = 232 -> 2400 bps
'Th1 = 208 -> 1200 bps
'Th1 = 160 -> 600 bps
'Th1 = 64 -> 300 bps
Th1 = 250
'wyzerowanie timera
Tl1 = 0
'uruchomienie Timera1
Start Timer1
'--------------------------------------------------------------------
'Ustawienie magistrali RS232 w stan wysoki (przygotowanie do przacy).
'--------------------
'Deklaracja zmiennych
Dim Rs_input As Byte , Skubad As Byte 'bufor danych
wejściowych
Dim Rs232 As Byte
Dim Flag As Bit
Dim New As Bit 'flaga
informująca o odebranym bajcie danych
Dim Adres As Byte , Value As Byte
Dim I As Byte , Kom As Byte
Mute Alias P1.0
Vol_up Alias P1.1
Vol_down Alias P1.2
Dim Przek(7) As Byte
Declare Sub Ucz
Declare Sub Ko
Declare Sub Write_eeprom(adres As Byte , Value As Byte)
Declare Sub Read_eeprom(adres As Byte , Value As Byte)
'wyzerowanie flag
New = 0
Flag = 0
'przygotowanie portów
Set P3.0
Set P3.1
Set P1.7
Set P1.6
'------------------------------------------------------------------------
If P1.3 = 1 Then
If P1.4 = 1 Then
If P1.5 = 1 Then
Call Write_eeprom 10 , 13
End If
End If
End If
Call Read_eeprom 10 , Value
If Value <> 133 Then
Call Ucz
End If
Call Ko
Sub Ko
' PROGRAM GLÓWNY
For I = 1 To 7
Call Read_eeprom(i , Przek(i))
Next I
Do
If Flag = 1 Then
Rs232 = Rs_input
Select Case Rs232 'set bit 1 of
port 1
Case 1 : Set P1.7
Reset P1.5 : Reset P1.4 : Reset P1.3
Waitms 10 : Reset P1.7
Case 2 : Set P1.7
Set P1.5 : Reset P1.4 : Reset P1.3
Waitms 10 : Reset P1.7
Case 3 : Set P1.7
Reset P1.5 : Set P1.4 : Reset P1.3
Waitms 10 : Reset P1.7 'a test
requires the IS keyword
Case 4 : Set P1.7
Set P1.5 : Set P1.4 : Reset P1.3
Waitms 10 : Reset P1.7
Case 5 :
Reset P1.2
Waitms 350
Set P1.2
Case 6 :
Reset P1.1
Waitms 350
Set P1.1
Case 7 : P1.0 = Not P1.0
Case 8 : Call Write_eeprom 10 , 13
Case Else
End Select
Flag = 0 'wyzerowanie
flagi
End If
If New = 1 Then
Disable Int0
If Kom < 64 Then
Kom = Kom And &B10111111
End If
If Kom = Przek(1) Then
Set P1.7
Reset P1.5 : Reset P1.4 : Reset P1.3
Waitms 10
Reset P1.7
End If
If Kom = Przek(2) Then
Set P1.7
Set P1.5 : Reset P1.4 : Reset P1.3
Waitms 10
Reset P1.7
End If
If Kom = Przek(3) Then
Set P1.7
Reset P1.5 : Set P1.4 : Reset P1.3
Waitms 10 : Reset P1.7
End If
If Kom = Przek(4) Then
Set P1.7
Set P1.5 : Set P1.4 : Reset P1.3
Waitms 10 : Reset P1.7
End If
If Kom = Przek(5) Then
Set P1.1
Waitms 350
Reset P1.1
End If
If Kom = Przek(6) Then
Set P1.2
Waitms 350
Reset P1.2
End If
If Kom = Przek(7) Then
Mute = Not Mute
End If
New = 0
Enable Int0
End If
If P1.6 = 0 Then
Set P1.7
Waitms 50
Reset P1.7
End If
Loop
End Sub
Sub Ucz
P1 = 0
Set P1.1
Set P1.2
'1 wejscie
Set P1.7
Reset P1.5 : Reset P1.4 : Reset P1.3
Do
If New = 1 Then
Disable Int0
If Kom < 64 Then
Kom = Kom And &B10111111
Call Write_eeprom , 1 , Kom
New = 0
Enable Int0
Exit Do
End If
End If
Loop
'2 wejscie
Set P1.7
Set P1.5 : Reset P1.4 : Reset P1.3
Do
If New = 1 Then
Disable Int0
If Kom < 64 Then
Kom = Kom And &B10111111
Write_eeprom , 2 , Kom
New = 0
Enable Int0
Exit Do
End If
End If
Loop
'3 wyjsciedo
Set P1.7
Reset P1.5 : Set P1.4 : Reset P1.3
Do
If New = 1 Then
Disable Int0
If Kom < 64 Then
Kom = Kom And &B10111111
Write_eeprom , 3 , Kom
New = 0
Enable Int0
Exit Do
End If
End If
Loop
'off
Set P1.7
Set P1.5 : Set P1.4 : Set P1.3
Do
If New = 1 Then
Disable Int0
If Kom < 64 Then
Kom = Kom And &B10111111
Write_eeprom , 4 , Kom
New = 0
Enable Int0
Exit Do
End If
End If
Loop
'mute
Set Mute
Do
If New = 1 Then
Disable Int0
If Kom < 64 Then
Kom = Kom And &B10111111
Write_eeprom , 5 , Kom
New = 0
Enable Int0
Exit Do
End If
End If
Loop
'vol+
'''''P1 = 0
Reset P1.1
Waitms 880
Set P1.1
Do
If New = 1 Then
Disable Int0
If Kom < 64 Then
Kom = Kom And &B10111111
Write_eeprom , 6 , Kom
New = 0
Enable Int0
Exit Do
End If
End If
Loop
'vol-
''''P1 = 0
Reset P1.2
Waitms 880
Set P1.2
Do
If New = 1 Then
Disable Int0
If Kom < 64 Then
Kom = Kom And &B10111111
Write_eeprom , 7 , Kom
New = 0
Enable Int0
Exit Do
End If
End If
Loop
''''P1 = 0
P1 = 0
Set P1.1
Set P1.2
Call Write_eeprom 255 , 133
End Sub
Sub Write_eeprom(adres As Byte , Value As Byte)
I2cstart 'start
condition
I2cwbyte 160 'slave address
I2cwbyte Adres 'asdress of
EEPROM
I2cwbyte Value 'value to
write
I2cstop 'stop
condition
Waitms 10 'wait for 10
milliseconds
End Sub
Sub Read_eeprom(adres As Byte , Value As Byte)
I2cstart 'generate
start
I2cwbyte 160 'slave adsress
I2cwbyte Adres 'address of
EEPROM
I2cstart 'repeated
start
I2cwbyte 161 'slave address
(read)
I2crbyte Value , 9 'read byte
I2cstop 'generate stop
End Sub
Receiverc5:
'Disable Int0
Getrc5(skubad , Kom)
New = 1 'set flag
Return
Int_serial:
If Scon.0 = 1 Then 'bajt danych
zostal odebrany
Rs_input = Sbuf
Flag = 1
End If
If Scon.1 = 1 Then 'bajt danych
zostal wyslany
End If
Scon = Scon And &HFC 'Wyzerowanie
wskaźników przerwania RI i TI
Return
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięKto mi poradzi cos ?
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości