PinSet
Syntax
PinSet Pin Number
Overview
Make a Port’s pin an output and set it high using a variable as the pin’s number.
Parameters
Pin Number can be a variable or constant or expression that holds a value from 0 to the amount of I/O pins on the device. A value of 0 will be PORTA.0, if present, 1 will be PORTA.1, 16 will be PORTB.0 etc…
Example
' Clear then Set each pin of PORTB
Device = 24HJ128GP502 ' Select the device to compile for
Declare Xtal = 16
Dim PinNumber as Byte
High PORTB ' Make PORTB high before we start
Do ' Create a loop
For PinNumber = 16 to 31 ' Create a loop for 16 pins
PinClear PinNumber ' Clear each pin of PORTB
DelayMs 100 ' Slow things down to see what's happening
Next ' Close the loop
For Index = 16 to 31 ' Create a loop for 16 pins
PinSet PinNumber ' Set each pin of PORTB
DelayMs 100 ' Slow things down to see what's happening
Next ' Close the loop
Loop ' Do it forever
Notes.
There are many ways to set a pin of an I/O port, however, each method requires a certain amount of manipulation, either with rotates, or alternatively, the use of indirect addressing. Each method has its merits, but requires a certain amount of knowledge to accomplish the task correctly. The PinSet command makes this task extremely simple using a variable as the pin number, however, this is not necessarily the quickest method, or the smallest, but it is the easiest. For speed and size optimisation, there is no shortcut to experience.
To set a known constant pin number of a port, access the pin directly using the PinHigh command
PinHigh PORTA.1
Each pin number has a designated name. These are Pin_A0, Pin_A1, Pin_A2, Pin_B0…Pin_B15, Pin_C0…Pin_C15, Pin_D0…Pin_D15 to Pin_L15 etc… Each of the names has a relevant value, for example, Pin_A0 has the value 0, Pin_B0 has the value 16, up to Pin_J15, which has the value 143.
These can be used to pass a relevant pin number to a Procedure. For example:
'
' Flash an LED attached to PORTB.0 via a procedure
' Then flash an LED attached to PORTB.1 via the same procedure
'
Device = 24HJ128GP502 ' Select the device to compile for
Declare Xtal = 16
Do ' Create an infinite loop
FlashPin(Pin_B0) ' Call the procedure to flash PORTB.0
FlashPin(Pin_B1) ' Call the procedure to flash PORTB.1
Loop ' Do it forever
'
' Make a pin high then low for 500ms using a variable as the pin to adjust
'
Proc FlashPin(pPinNumber As Byte)
Output pPinNumber ' Make the pin an output
PinSet pPinNumber ' Bring the pin high
DelayMs 500 ' Wait for 500 milliseconds
PinClear pPinNumber ' Bring the pin low
DelayMs 500 ' Wait for 500 milliseconds
EndProc
Example 2
' Clear then Set each pin of PORTC
Device = 24HJ128GP502 ' Select the device to compile for
Declare Xtal = 16
Dim PinNumber as Byte
High PORTC ' Make PORTC output high before we start
Do ' Create a loop
For PinNumber = Pin_C0 to Pin_C7 ' Create a loop for 8 pins
PinClear PinNumber ' Clear each pin of PORTC
DelayMs 100 ' Slow things down to see what's happening
Next ' Close the loop
For PinNumber = Pin_C0 to Pin_C7 ' Create a loop for 8 pins
PinSet PinNumber ' Set each pin of PORTC
DelayMs 100 ' Slow things down to see what's happening
Next ' Close the loop
Loop ' Do it forever

