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 ?

bialy
-
-
Posty:1
Rejestracja:28 maja 2003, o 14:46
Kontaktowanie:
Kto mi poradzi cos ?

Postautor: bialy » 28 maja 2003, o 14:48

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

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 11 gości