'FHT8i Interface fuer AVR '(C)tommi 2007 'd0 RX 'd1 TX 'B0 load 'B1 CLK 'B2 data 'B3 Busy $regfile = "attiny2313.dat" $crystal = 8000000 $baud = 9600 Fht_load Alias Portb.0 Fht_clock Alias Portb.1 Fht_data Alias Portb.2 Fht_busy Alias Pinb.3 Const Testcmd = &H33 Const Testdata = &H55 Const Cntcmd = 23 Dim C As Byte Dim D As Byte Dim S As Byte Dim Timeout As Bit Dim Timeloop As Word Dim B As Byte Dim I As Byte Dim J As Byte Const Reload = 200 '0,1s bei 8Mhz Const Reload_loop = 10 Config Timer0 = Timer , Prescale = 1024 On Timer0 Timer0_isr Enable Interrupts Config Portb.0 = Output 'B0-B2=Output,B3=Input Config Portb.1 = Output Config Portb.2 = Output Config Portb.3 = Input Set Portb.3 'enable Pullup Portb = Pinb And 240 'all other to low 'Print "Device Startet" C = Testcmd D = Testdata Gosub Send_command Do Main: Inputbin C , D I = Lookdown(c , Commands , Cntcmd) If I = -1 Then Print "CMD Error" Else 'Print "Send " ; C ; "->" ; D Gosub Send_command End If Loop End 'end program Get_chksum: S = C + D S = S + 6 Return Send_command: Gosub Get_chksum 'Print "Checksum=" ; S Timeout = 0 I = 0 B = C Gosub Sendbyte_fht B = D Gosub Sendbyte_fht B = S Gosub Sendbyte_fht Gosub Sendloadto_fht If Timeout = 0 Then Print "OK" End If Return Sendbyte_fht: 'Print "Byte" ; I ; "=" ; B For J = 7 To 0 Step -1 Gosub Sendbitto_fht Next J I = I + 1 Return Restart_timer: Timeloop = Reload_loop Timer0 = Reload Enable Timer0 Return Sendbitto_fht: Reset Fht_clock If Timeout = 0 Then Gosub Restart_timer Bitwait Fht_busy , Reset End If If Timeout = 0 Then If B.j = 0 Then Reset Fht_data 'Print "0"; Else Set Fht_data 'Print "1"; End If Set Fht_clock Bitwait Fht_busy , Set End If If Timeout = 0 Then Bitwait Fht_busy , Reset End If Reset Fht_clock Disable Timer0 Return Sendloadto_fht: Reset Fht_clock If Timeout = 0 Then Gosub Restart_timer Bitwait Fht_busy , Reset End If If Timeout = 0 Then Set Fht_load Bitwait Fht_busy , Set 'Print "H"; End If If Timeout = 0 Then Bitwait Fht_busy , Reset Reset Fht_load 'Print "L" End If Disable Timer0 Reset Fht_clock Return Timer0_isr: Timeloop = Timeloop - 1 If Timeloop = 0 Then Disable Timer0 Timeout = 1 Print "Timeout" Else Timer0 = Reload End If Return Commands: Data 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , &H11 , &H12 , &H13 , &H14 , &H20 , &H21 , &H22 , &H23 , &H24 , &H25 , &H26 , &H27 , &H28 , &H2F , &H33