Skip to content

Instantly share code, notes, and snippets.

@rafalw
Created October 27, 2014 20:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rafalw/c1231c0154dd6069baa8 to your computer and use it in GitHub Desktop.
Save rafalw/c1231c0154dd6069baa8 to your computer and use it in GitHub Desktop.
Przerzutnik JK & demo I2C - przykład "wielozadaniowości"
' Część 1:
' Licznik binarny - demonstracja prostej obsługi magistrali I2C.
' - element master - MCU
' - element slave - PCF8574AP (ekspander magistrali I2C)
' Sterowanie LED-ami (zwrócić uwagę na prawidłowy sposób zasilania LED-ów przez PCD8574AP)
' Część 2:
' Przerzutnik JK katywny zboczem narastającym - emulacja sprzętowa na mikrokontrolerze ATtiny2313
' Portb.1 - wyjście Q
' Portd.4 - wejście J
' Portd.5 - wejście K
' Sygnał zegarowy - przerwanie wewnętrzne od timera 1 (częstotliwość: 0,5Hz)
' Uwaga: do portów D4 i D5 podłączono przyciski zwierające do masy, w związku z czym naciśnięcie, rozumiane przez
' użytkownika jako jedynka logiczna, z punktu widzenia mikrokontrolera jest zerem logicznym (patrz: kod podprogramu
' obsługi przerwania).
$regfile = "attiny2313.dat"
$Crystal=4000000
$hwstack=40
$swstack=16
$framesize=32
' Adres do zapisu ekspandera I2C
Const Addr_0 = &B01110000
' Konfiguracja pinów magistrali I2C
Config Scl = Portb.7
Config Sda = Portb.5
Config Pinb.1 = Output
Portb.1 = 0
' LED kontrolna (wizualizacja taktowania)
Config Pinb.0 = Output
Portb.0 = 1
Config Pind.4 = Input
Portd.4 = 1
Config Pind.5 = Input
Portd.5 = 1
Config Timer1 = Timer , Prescale = 64
On Timer1 Przerzutnik
Enable Interrupts
Enable Timer1
Dim I As Byte
I = 255
Do
' Wariant 1 - prostszy, możliwy tylkow szczególnych przypadkach - jak ten!
' I2csend Addr_0 , I
' Wariant drugi, stosowany przy bardziej skomplikowanych układach
I2cstart
I2cwbyte Addr_0
I2cwbyte I
I2cstop
Decr I
Waitms 100
Loop
End
Przerzutnik:
Toggle Portb.0
If Portb.0 = 1 Then
' Przerzutnik aktywny zboczem narastającym
If Pind.4 <> Pind.5 Then
Portb.1 = Not Pind.4
End If
If Pind.4 = 0 And Pind.5 = 0 Then
Toggle Portb.1
End If
End If
Return
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment