Electronic Projects, forums and more.

Go Back   Electronic Circuits Projects Diagrams Free > Electronics Categories > Micro Controllers


Micro Controllers Discuss all aspects of micro controllers - building them, coding them, etc. All controllers are welcome - PIC, BASIC, Z8 Encore!, etc.

Reply
 
LinkBack Thread Tools Display Modes
Old 4th May 2007, 03:10 PM   (permalink)
Default Swordfish Example

I was just writing a conversion for some of my 16F projects to Swordfish, and realized that this little program covers many aspects of Swordfish all in one. It’s a simple 7 segment multiplexing program for the following circuit;



And heres the code;

Code:
Device = 18F452
Clock = 20

#option _Segment_Port = PORTC                      // Define the Keypad PORT
#option _Segment_TRIS = GetTRIS(_Segment_Port)     // Nice way to automatically get the TRIS
                                                   //  automatically from a selected port
                                                   
Include "ISRTimer.bas"  
Include "utils.bas"

Dim Segment_1_TRIS As TRISD.1,                     // User must define what pins control
    Segment_2_TRIS As TRISD.0,                     //  each segment
    Segment_1 As PORTD.1,
    Segment_2 As PORTD.0            
Dim Number As Byte,                                // Program variables that require no
    Segment_Data As _Segment_Port,                 //  user settings
    Segment_TRIS As _Segment_TRIS,
    Segment_1_Data As Byte,
    Segment_2_Data As Byte
Const
    Timer1 = 0,
    Timer2 = 1
  
// Update_Segments event, mutiplex the segment data...
Sub Update_Segments()

    If Segment_1 = 1 Then
        Segment_1 = 0
        Segment_Data = Segment_2_Data
        Segment_2 = 1
    Else
        Segment_2 = 0
        Segment_Data = Segment_1_Data
        Segment_1 = 1    
    EndIf

End Sub Function Segment_Encode(Segment_Byte As Byte) As Byte  // Convert a byte into segment information
    Select Segment_Byte
    	    Case 0 
    	   	Result = %00111111
    	    Case 1			
    	   	Result = %00000110
    	    Case 2			
    		Result = %01011011
    	    Case 3			
    	   	Result = %01001111
    	    Case 4			
    	   	Result = %01100110
    	    Case 5			
    	   	Result = %01101101 
    	    Case 6			
       		Result = %01111100
    	    Case 7			
     		Result = %00000111
    	    Case 8			
    		Result = %01111111
    	    Case 9			
     		Result = %01100111		 
    	EndSelect
End Function Sub EncodeSegmentData()                          // Encodes segment data

    Segment_1_Data = Digit(Number,1)             // Extract the first digit & convert it
    Segment_1_Data = Segment_Encode(Segment_1_Data)
    Segment_2_Data = Digit(Number,2)             // Extract the second digit & convert it
    Segment_2_Data = Segment_Encode(Segment_2_Data)

End Sub

// Increment_Number event will increment the register Number
Sub Increment_Number()

    Inc(Number)
    If Number = 100 Then 
        Number = 0
    EndIf
    
    EncodeSegmentData

End Sub Timer.Initialize(2)                              // initialize the timer module...

// initialise each timer
Timer.Items(Timer1).Interval = 5                 // 5ms
Timer.Items(Timer1).OnTimer = @Update_Segments   // timer1 event handler
Timer.Items(Timer2).Interval = 500               // 500ms
Timer.Items(Timer2).OnTimer = @Increment_Number  // timer2 event handler

Number = 0                                       // Initialize variables
EncodeSegmentData

Segment_TRIS = %00000000                         // Make the segment data lines outputs
Low(Segment_1_TRIS)
Low(Segment_2_TRIS)

Timer.Items(Timer1).Enabled = True               // enable the timers... 
Timer.Items(Timer2).Enabled = True
Timer.Start                                      // start processing all timers...
 
// main program loop...
While True Wend
Some of the features are;
* A quick sample of the comprehensive 'on compile' commands (#option in this case)
* Swordfish's ISRTimer Library
* Functions
* Sub Procedures


Notice that the main program loop is simply

Code:
// main program loop...
While True

Wend
The ISRTimer library creates the required interrupt settings to perform the multiplexing and number incrementing 'on the fly'
__________________
Spency.

PIC Micro's - Your mind is the limit

PIC's and interfacing with other devices - a PIC Basic Guide @ digital-diy.net

Last edited by gramo; 4th May 2007 at 03:13 PM.
gramo is offline  
Reply

Bookmarks

Thread Tools
Display Modes



Similar Threads
Title Starter Forum Replies Latest
ICSP Implementations source code, anyone? Electro Tunes Micro Controllers 14 4th May 2007 04:00 PM
Mongoose (robot) & the Swordfish BASIC compiler blueroomelectronics Robotics Chat 6 24th April 2007 12:18 PM



All times are GMT. The time now is 11:19 PM.


Electronic Circuits  |  Learning Electronics
Powered by vBulletin® Version 3.7.0
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.

eXTReMe Tracker