Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. <code vb> '******************************************************************** '* Relay controller '* Language: BASCOM-AVR 1.11.8.3 '* Date: 2007.Mar.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 Help() Declare Sub Poweron(byval Relay As Byte) Declare Sub Poweroff(byval Relay As Byte) Declare Sub Powertoggle(byval Relay As Byte) ' If you change this number you must setup the PORT mappings ' in the initalize section. Const Relays = 4 Const Cpcinput_len = 20 ' 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 I As Byte Dim J As Byte Config Portb = Output Open "Com1:" As Binary As #1 Enable Interrupts 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 , "RELAY: Ready for commands" 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 "?" : Help Case "HELP" : Help Case "S" : Status Case "STATUS" : Status Case "ON ALL" For I = 1 To Relays Poweron I Next I Case "OFF ALL" For I = 1 To Relays Poweroff I Next I Case "TOGGLE ALL" For I = 1 To Relays Powertoggle I Next I Case Else ' Terminate string after the SPACE For I = 1 To Gbpcinputpointer If Gspcinp(i) = 32 Then Gspcinp(i) = 0 Exit For End If Next I ' What is the port? ' Next character after the space (convert from ASC to integer) J = Gspcinp(i + 1) - 48 ' Number out of range replace String terminator with SPACE again ' This will cause a failure on the CASE statement below. If J > Relays Then Gspcinp(i) = 32 End If Select Case Gspcinput Case "ON" : Poweron J Case "O" : Poweron J Case "OFF" : Poweroff J Case "F" : Poweroff J Case "TOGGLE" : Powertoggle J Case "T" : Powertoggle J Case Else ' Put the SPACE back Gspcinp(i) = 32 Print #1 , "Command '" ; Gspcinput ; "' not recognized" End Select End Select End Sub '***************************************************************************** Sub Poweron(relay As Byte) Reset Portb.rport(relay) End Sub Sub Poweroff(relay As Byte) Set Portb.rport(relay) End Sub Sub Powertoggle(relay As Byte) Toggle Portb.rport(relay) End Sub Sub Status For I = 1 To Relays Print #1 , " Relay " ; I ; ") is "; If Portb.rport(i) = 1 Then Print "Off" Else Print "On" End If Next I End Sub Sub Help Print #1 , "Available Commands:" Print #1 , "<relay> = 1-" , Relays , " or ALL" Print #1 , " HELP or ?" Print #1 , " [S]TATUS" Print #1 , " [T]OGGLE <relay>" Print #1 , " [O]N <relay>" Print #1 , " O[F]F <relay>" End Sub </code> msnrelay/relayfirmware.txt Last modified: 2009/11/27 17:54by 127.0.0.1