atmel:relaycontrollersource2

no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


atmel:relaycontrollersource2 [2009/11/27 17:53] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +<code vb>
 +'********************************************************************
 +'* Relay controller
 +'* Language:    BASCOM-AVR 1.11.9.1
 +'* Date:        2008.Oct.22
 +'* Version:     V1.00
 +'********************************************************************
  
 +$regfile = "2313def.dat"
 +$crystal = 8000000
 +
 +$baud = 9600
 +
 +Declare Sub Avr_os()
 +Declare Sub Initialize()
 +Declare Sub Printprompt()
 +Declare Sub Docommand()
 +Declare Sub Getinput(byval Pbbyte As Byte)
 +Declare Sub Status()
 +Declare Sub Poweron(byval Relay As Byte)
 +Declare Sub Poweroff(byval Relay As Byte)
 +Declare Sub Lcddisplay(pos As Byte)
 +
 +' If you change this number you must setup the PORT mappings
 +' in the initalize section.
 +Const Relays = 4
 +
 +Const Cpcinput_len = 30                                     ' max. length of user-Input
 +
 +Dim Rport(relays) As Byte
 +Dim Gbinp As Byte                                           ' holds user input
 +Dim Gspcinput As String * Cpcinput_len                      ' holds user-input
 +Dim Gspcinp(cpcinput_len) As Byte At Gspcinput Overlay
 +Dim Gbpcinputpointer As Byte                                ' string-pointer during user-input
 +Dim Command As String * 5
 +
 +Dim P1 As Byte , P2 As Byte
 +Dim I As Byte
 +Dim J As Byte
 +
 +Config Portb = Output
 +Open "Com1:" As Binary As #1
 +' Serial communication to LCD is via port b.6
 +Open "Comb.6:9600,8,n,1" For Output As #2
 +
 +Enable Interrupts
 +
 +'LCD reset
 +Reset Portb.5
 +Waitms 400
 +Set Portb.5
 +Waitms 400
 +
 +Initialize
 +Avr_os
 +End
 +
 +
 +Sub Initialize
 +  ' Setup Port to relay mapping
 +  Rport(1) = 2 : Rport(2) = 3 : Rport(3) = 4 : Rport(4) = 7
 +  ' Set all Relays OFF
 +  For I = 1 To Relays
 +    Set Portb.rport(i)
 +  Next I
 +End Sub
 +
 +
 +Sub Avr_os
 +  Print #1 , ""
 +  Print #1 , "Ready"
 +  Print #2 , "Ready"
 +  Printprompt
 +  Do
 +    Gbinp = Inkey(#1)                                       ' get user input
 +    If Gbinp <> 0 Then                                      ' something typed in?
 +      Getinput Gbinp                                        ' give input to interpreter
 +    End If
 +  Loop                                                      ' do forever
 +End Sub
 +
 +Sub Printprompt
 +  Gbpcinputpointer = 1
 +  Gspcinput = ""
 +  Print #1 , ">";
 +End Sub
 +
 +
 +Sub Getinput(pbbyte As Byte)
 +   ' stores bytes from user and wait for CR (&H13)
 +   Select Case Pbbyte
 +      Case &H0A                                             ' do nothing
 +      Case &H0D                                             ' Line-end?
 +         Print #1 , Chr(&H0d) ; Chr(&H0a) ;
 +         Docommand                                          ' analyse command and execute
 +         Printprompt
 +      Case &H08                                             ' backspace ?
 +         If Gbpcinputpointer > 1 Then
 +            Print #1 , Chr(&H08);
 +            Decr Gbpcinputpointer
 +         End If
 +      Case Else                                             ' store user-input
 +         If Gbpcinputpointer <= Cpcinput_len Then
 +            Mid(gspcinput , Gbpcinputpointer , 1) = Pbbyte
 +            Incr Gbpcinputpointer
 +            Mid(gspcinput , Gbpcinputpointer , 1) = &H00    ' string-terminator
 +            Print #1 , Chr(pbbyte);                         ' echo back to user
 +         End If
 +   End Select
 +End Sub
 +
 +Sub Docommand
 +      Gspcinput = Ucase(gspcinput)
 +
 +      Select Case Gspcinput
 +         Case "STATUS" : Status
 +         Case Else
 +            I = Instr(gspcinput , " ")
 +            Decr I
 +            Command = Mid(gspcinput , 1 , I)
 +            I = I + 2
 +            J = Gspcinp(i) - 48
 +
 +             ' test first word
 +             Select Case Command
 +                Case "ON" : Poweron J
 +                Case "OFF" : Poweroff J
 +                Case "LCD" : Lcddisplay I
 +                Case Else
 +                  Print #1 , "Command '" ; Gspcinput ; "' not recognized"
 +             End Select
 +      End Select
 +
 +End Sub
 +
 +'*****************************************************************************
 +
 +Sub Lcddisplay(pos As Byte)
 +  Print #2 , Mid(gspcinput , Pos)
 +End Sub
 +
 +Sub Poweron(relay As Byte)
 +  If Relay <= Relays Then
 +    Reset Portb.rport(relay)
 +  End If
 +End Sub
 +
 +Sub Poweroff(relay As Byte)
 +  If Relay <= Relays Then
 +     Set Portb.rport(relay)
 +  End If
 +End Sub
 +
 +Sub Status
 +  For I = 1 To Relays
 +    Print #1 , "relay." ; I ; "=";
 +    If Portb.rport(i) = 1 Then
 +       Print "off"
 +    Else
 +       Print "on"
 +    End If
 +  Next I
 +End Sub
 +</code>
 +{{tag>bascom programming avr}}
  • atmel/relaycontrollersource2.txt
  • Last modified: 2009/11/27 17:53
  • by 127.0.0.1