'********************************************************************
'* Port flipper
'*
'* Each port in the PORT array will be toggled HIGH/LOW and held for
'* a second - Useful for debugging.
'*
'* uP:          AT89S8313
'* Language:    BASCOM-AVR 1.11.7.4
'* Date:        2005.Feb.27
'* Version:     V1.00
'* Author:      Brett England
'********************************************************************
$regfile = "2313def.dat"
$crystal = 8000000
 
Dim Port(4) As Byte
Dim Currentport As Byte
Dim I As Byte
Dim J As Byte
 
Declare Sub Lcdlocation(byval Row As Byte , Byval Col As Byte)
 
' Set all Relays OFF
Port(1) = 2 : Port(2) = 3 : Port(3) = 4 : Port(4) = 7
For I = 1 To 4
  Set Portb.port(i)
Next I
 
'Serial connection to LCD is via Port B.6
'LCD runs at 9600 baud
Config Portb = Output
Open "comb.6:9600,8,n,1" For Output As #2
 
'LCD Reset pin is driven from PortB.5
Reset Portb.5                                               'Drive pin low
Waitms 400
Set Portb.5                                                 'Then high
Waitms 400
 
Currentport = 0
Do
  For J = 1 To 4                                            ' For each PORT
 
     If Currentport <> 0 Then                               ' Previous relay?
          Set Portb.currentport                             ' Turn Off
     End If
 
     Currentport = Port(j)                                  ' Next relay port
     Reset Portb.currentport                                ' Turn relay On
 
     Call Lcdlocation(0 , 0)
     Print #2 , "Timer: " ; J ;
 
     For I = 1 To 4                                         ' Print all status
       Call Lcdlocation(i , 0)
       Print #2 , "Port: " ; Port(i) ; " = " ; Portb.port(i) ;
     Next I
     Waitms 2500                                            ' Wait 2.5secs
  Next J
Loop
 
Sub Lcdlocation(byval Row As Byte , Byval Col As Byte)
  Col = Col + 32
  Row = Row + 32
  Print #2 , "\B" ; Chr(col) ; Chr(row);
End Sub