Kod: Zaznacz cały
$regfile = "attiny26.dat"
$crystal = 4000000
Dim Togbit As Byte , Command As Byte , Address As Byte
Command = 12
Togbit = 0
Address = 0
Do
Waitms 500
Rc5send Togbit , Address , Command
Loop
Kod: Zaznacz cały
$regfile = "attiny26.dat"
$crystal = 4000000
Dim Togbit As Byte , Command As Byte , Address As Byte
Command = 12
Togbit = 0
Address = 0
Do
Waitms 500
Rc5send Togbit , Address , Command
Loop
Po prostu w definicji specjalnych zmiennych w kompilatorze dla procesora ATTiny26 nie ma zdefiniowanej specjalnej zmiennej typu Word: COMPARE1A (czyli odniesienia do rejestrów OCR1AH+OCR1AL w 2313). I trudno będzie taką definicję zbudować "na zewnątrz".Jasam pisze:Przy kompilacji programu wystąpił błąd: Error 46 Assingment error [COMPARE1A:0 55:112]. Nie wiem co to znaczy.
Kod: Zaznacz cały
Dim COMPARE1A As Byte At &H4D Kod: Zaznacz cały
'- procedury RC5
Sub Sentrc5(byval Rc5_address As Byte , Byval Rc5_command As Byte , Byval Rc5_togglebit As Byte)
Local Rc5_bit_nr As Byte
'---[ transmit Address and Command as 14 bit RC-5 code ]------------------------
Ddrb.1 = 1 'set OC1 (Pb.1) = IR carrier output
Logic_1 'first start bit
Logic_1 'second start bit
If Rc5_ToggleBit = 0 Then Logic_0 Else Logic_1 'toggle bit
For Rc5_bit_nr = 4 To 0 STEP -1 '5 bit address, msb first
If Rc5_address.rc5_bit_nr = 0 Then Logic_0 Else Logic_1
Next
For Rc5_bit_nr = 5 To 0 STEP -1 '6 bit command, msb first
If Rc5_command.rc5_bit_nr = 0 Then Logic_0 Else Logic_1
Next
Tccr1a = Carrier_off
Waitms 87 'frame gap delay
End SubKod: Zaznacz cały
$regfile = "attiny26.dat"
$crystal = 8000000
$hwstack = 32 'default use 32 for the hardware stack
$swstack = 10 'default use 10 for the SW stack
$framesize = 40 'default use 40 for the frame space
'liczby skracające licznika Timer1 dla generacji sygnału 36KHz
#if _xtal = 4000000
Const T_oc1 = 55 'wartosć dla 4MHz
#endif
#if _xtal = 8000000
Const T_oc1 = 110 'wartość dla 8MHz
#endif
#if _xtal = 10000000
Const T_oc1 = 138 'wartość dla 10MHz
#endif
Const Carrier_on = &B01000000 'włączona nośna IR 36kHz
Const Carrier_off = &B11000000 'wyłączona nośna IR 36kHz
Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1 'licznik jako generator sygnału prostąkątnego
Timer1 = 0 'zeruj licznik
Ocr1a = T_oc1 'załaduj rejestr porównawczy
Tccr1a = Carrier_off 'wyłącz nośną
Declare Sub Sentrc5(byval Rc5_address As Byte , Byval Rc5_command As Byte , Byval Rc5_togglebit As Byte)
Declare Sub Logic_0
Declare Sub Logic_1
' - ( program główny ) - - - - - - - - - - - - - - - - - - -
Do
Sentrc5 0 , 12 , 0 'wysyła komendę o nr.12 do urządzenia o adresie 0 (TV) bez sterowania ToggleBit
Wait 1
Sentrc5 0 , 0 , 0
Wait 1
Loop
' - ( procedury RC5 ) - - - - - - - - - - - - - - - - - - - -
Sub Sentrc5(byval Rc5_address As Byte , Byval Rc5_command As Byte , Byval Rc5_togglebit As Byte)
'-[ transmituje Address oraz Command jako 14 bitowy kod RC-5 ]-
Local Rc5_bit_nr As Byte
Ddrb.1 = 1 'ustaw OC1 (Pb.1) jako wyjście IR
Logic_1 'pierwszy bit start
Logic_1 'drugi bit start
If Rc5_togglebit = 0 Then Logic_0 Else Logic_1 'sterowanie ToggleBit
For Rc5_bit_nr = 4 To 0 Step -1 '5 bitów adresu, msb najpierw
If Rc5_address.rc5_bit_nr = 0 Then Logic_0 Else Logic_1
Next
For Rc5_bit_nr = 5 To 0 Step -1 '6 bitów rozkazu, msb najpierw
If Rc5_command.rc5_bit_nr = 0 Then Logic_0 Else Logic_1
Next
Tccr1a = Carrier_off
Waitms 87 'wyagana przerwa pomiędzy ramkami
End Sub
Sub Logic_0
Tccr1a = Carrier_on
Waitus 883
Tccr1a = Carrier_off
Waitus 884
End Sub
Sub Logic_1
Tccr1a = Carrier_off
Waitus 883
Tccr1a = Carrier_on
Waitus 884
End Sub