'****************************************************************
'*  Name    : Dev_board_demo.BAS                                *
'*  Author  : Coenen Stijn [Stynus]                             *
'*  Notice  : Copyright (c) 2008 © Elektronica Stynus           *
'*          : All Rights Reserved                               *
'*  Date    : 23/12/2008                                        *
'*  Version : 1.2                                               *
'*  Voor meer info zie:                                         *
'*  http://www.schematheek.net/index.php?p=forum/topic&t=72     *
'****************************************************************
Device  16F877A
Config  WDT_Off, PWRTE_ON, XT_OSC , LVP_off
Xtal    4
All_Digital = true
'****************************************************************
'RS232
    'Symbol TX        = PORTC.6
    'Symbol RX        = PORTC.7
    Hserial_Clear    = On         'Zorgt ervoor dat de buffer automatisch 
                                  'leeg wordt gemaakt voordat er data wordt 
                                  'ontvangen
    Declare Hserial_Baud    9600  'Snelheid op 9600 bits/seconde instellen
    Hserial_RCSTA    = %10010000  'Hardware seriële poort opzetten in 
                                  'continue mode
    Hserial_TXSTA    = %00100000  'Verzenden via uart opzetten in assynchrone
                                  'mode
    INTCON = %11000000 			  'Interrupt opzetten
    On_Interrupt     GoTo SeriIn  'Bij interrupt naar SeriIn springen 
    PIE1.5 = 1                    'Interrupt voor usart opzetten
    
    Symbol  klok      = PORTB.5
    Symbol  ZetVast   = PORTB.4
   
    Symbol  Data0     = PORTD.1 : TRISD.1 = 0
    Symbol  Data1     = PORTD.0 : TRISD.0 = 0
    Symbol  Data2     = PORTC.3 : TRISC.3 = 0
    Symbol  Data3     = PORTC.2 : TRISC.2 = 0
    Symbol  Data4     = PORTC.1 : TRISC.1 = 0
    Symbol  Data5     = PORTC.0 : TRISC.0 = 0
    Symbol  Data6     = PORTE.2 : TRISE.2 = 0 
    Symbol  Data7     = PORTB.3 : TRISB.3 = 0
    
'****************************************************************   
'Variabelen declareren
    Dim     temp       As Byte
    Dim     index      As Byte
    Dim     serdata    As Byte
    
    Dim     temp_Data0 As Word 
    Dim     temp_Data1 As Word
    Dim     temp_Data2 As Word
    Dim     temp_Data3 As Word
    Dim     temp_Data4 As Word
    Dim     temp_Data5 As Word
    Dim     temp_Data6 As Word
    Dim     temp_Data7 As Word
    Dim     Huid_data0 As Word 
    Dim     Huid_data1 As Word
    Dim     Huid_data2 As Word
    Dim     Huid_data3 As Word
    Dim     Huid_data4 As Word
    Dim     Huid_data5 As Word
    Dim     Huid_data6 As Word
    Dim     Huid_data7 As Word
'****************************************************************    
Clear   
'****************************************************************
Main:
        Huid_data0 = %0000000100000001 ^ $FFFF                           
        Huid_data1 = %0000001000000010 ^ $FFFF 
        Huid_data2 = %0000010000000100 ^ $FFFF 
        Huid_data3 = %0000100000001000 ^ $FFFF 
        Huid_data4 = %0001000000010000 ^ $FFFF 
        Huid_data5 = %0010000000100000 ^ $FFFF 
        Huid_data6 = %0100000001000000 ^ $FFFF 
        Huid_data7 = %1000000010000000 ^ $FFFF 
    For index = 0 To 15 
        temp_Data0 = Huid_data0   
        temp_Data1 = Huid_data1
        temp_Data2 = Huid_data2
        temp_Data3 = Huid_data3 
        temp_Data4 = Huid_data4 
        temp_Data5 = Huid_data5
        temp_Data6 = Huid_data6
        temp_Data7 = Huid_data7 
        
        Low Data0 : Low Data1 : Low Data2 : Low Data3
        Low Data4 : Low Data5 : Low Data6 : Low Data7
        GoSub KlokPuls
        For temp = 0 To 15
            GoSub DataUit
            GoSub KlokPuls
            GoSub DataShift
        Next
        
        High ZetVast
        DelayUS 10
        Low ZetVast
        DelayMS 500
        
        Huid_data0 = Huid_data0  << 1 
        Huid_data0 = Huid_data0  ^ $0001   
        Huid_data1 = Huid_data1  << 1 
        Huid_data1 = Huid_data1  ^ $0001    
        Huid_data2 = Huid_data2  << 1 
        Huid_data2 = Huid_data2  ^ $0001    
        Huid_data3 = Huid_data3  << 1 
        Huid_data3 = Huid_data3  ^ $0001    
        Huid_data4 = Huid_data4  << 1 
        Huid_data4 = Huid_data4  ^ $0001    
        Huid_data5 = Huid_data5  << 1 
        Huid_data5 = Huid_data5  ^ $0001    
        Huid_data6 = Huid_data6  << 1 
        Huid_data6 = Huid_data6  ^ $0001    
        Huid_data7 = Huid_data7  << 1 
        Huid_data7 = Huid_data7  ^ $0001    
     Next
GoTo Main
'****************************************************************
KlokPuls:
    High klok
    DelayUS 20
    Low klok
    DelayUS 10
Return
DataUit:
    Data0 = temp_Data0.0  
    Data1 = temp_Data1.0
    Data2 = temp_Data2.0
    Data3 = temp_Data3.0
    Data4 = temp_Data4.0
    Data5 = temp_Data5.0
    Data6 = temp_Data6.0
    Data7 = temp_Data7.0
Return
DataShift:
    temp_Data0 = temp_Data0 >> 1  
    temp_Data1 = temp_Data1 >> 1 
    temp_Data2 = temp_Data2 >> 1 
    temp_Data3 = temp_Data3 >> 1 
    temp_Data4 = temp_Data4 >> 1 
    temp_Data5 = temp_Data5 >> 1 
    temp_Data6 = temp_Data6 >> 1 
    temp_Data7 = temp_Data7 >> 1 
Return
SeriIn:                           'Interrupt routine
    HSerIn [serdata]              'ontvangen data in serdata zetten
    Print serdata                 'ontvangen data op het lcd printen
    HSerOut [serdata]             'Data terug naar pc sturen ter
                                  'bevestiging
Context Restore                   'Data herstellen en teruggaan
'****************************************************************   
End