$regfile = "m8def.dat"
$crystal = 8000000 'szybkość zegara 8MHz
$hwstack = 32
$swstack = 16
$framesize = 40
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Cls
Dim _flaga_10ms As Bit
_flaga_10ms = 0
Config Portd.1 = Output
Config Pind.4 = Input
Set Portd.4
Config Timer1 = Timer , Prescale = 64
Config Debounce = 5
S1 Alias Pind.4
'************************ Definiowanie Zmiennych *******************************
Declare Function Make_manchester(byval Temp As Byte) As Word
Dim Tempword As Word
Dim Nottempword As Word
Dim Synch As Byte
Dim Temp1 As Byte
Dim Temp2 As Byte
Dim Naglowek As Byte
Dim Synchronizacja As Word
Dim Dane1 As Word
Dim Dane2 As Word
Dim Indeks As Byte
Dim Podglad As Byte
Synch = 0
Temp1 = 32
Temp2 = 56
Indeks = 0
Naglowek = &B00001110 '&B00000111
'************************ Kodowanie ********************************************
Synchronizacja = Make_manchester(synch)
Synchronizacja = Not Synchronizacja
Dane1 = Make_manchester(temp1)
Dane1 = Not Dane1
Dane2 = Make_manchester(temp2)
Dane2 = Not Dane2
Cls
On Timer1 Czas
Timer1 = 64286
Enable Interrupts
Enable Timer1
'**************************** Program główny ***********************************
Start Timer1
Do
If _flaga_10ms = 1 Then
Incr Indeks
Portd.1 = Synchronizacja.15
Rotate Synchronizacja , Left , 1
If Indeks = 16 Then Indeks = 0
_flaga_10ms = 0
End If
If S1 = 0 Then Gosub Nadawanie
Loop
End
'********************** Czas ***************************************************
Czas:
Timer1 = 64286 '64285
_flaga_10ms = 1
Return
'*********************** Nadawanie *********************************************
Nadawanie:
Indeks = 0
_flaga_10ms = 0
Do
If _flaga_10ms = 1 Then
If Indeks < 4 Then '1,2,3,4
Portd.1 = Naglowek.3
Rotate Naglowek , Left , 1
Elseif Indeks > 3 And Indeks < 21 Then '5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
Portd.1 = Dane1.15
Rotate Dane1 , Left , 1
Else '21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36
Portd.1 = Dane2.15
Rotate Dane2 , Left , 1
End If
Podglad = Pind.1
Lcd Podglad
Incr Indeks
_flaga_10ms = 0
End If
Loop Until Indeks = 37
Indeks = 0
Return
'*************** Funkcja kodująca Manchester ***********************************
Function Make_manchester(byval Temp As Byte) As Word
Local Bit_number As Byte
Local Manchester As Word
Bit_number = 8
Do
Shift Manchester , Left , 2
Decr Bit_number
If Temp.bit_number = 1 Then
Manchester = Manchester + 1 '01
Else
Manchester = Manchester + 2 '10
End If
Loop Until Bit_number = 0
Make_manchester = Manchester
End Function