Low (PinLow)
Syntax
Low Port or Port.Bit or Pin Number
or
PinLow Port or Port.Pin or Pin Number
Overview
Place a Port or bit in a low state. For a port, this means filling it with 0's. For a bit this means setting it to 0. The name PinOutput can also be used instead of the name Output. They both work exactly the same but make the source code a little clearer to read and follow.
Parameters
Port must be any valid port. Port.Bit can be any valid port and bit combination, i.e. PORTA.1 Pin Number can be a variable or constant 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 1
Device = 24HJ128GP502
' Select the device to compile for
Declare Xtal = 16
Symbol LED_Pin = PORTB.4
PinLow LED_Pin
' Clear PORTB bit 4
PinLow PORTB.0
' Clear PORTB bit 0
Low PORTB
' Clear all of PORTB
PinLow 1
' Pull Pin PORTA.1 low
Example 2
' Flash each of the pins on PORTB
'
Device = 24HJ128GP502
Declare Xtal = 16
Dim MyPin as Byte
For MyPin = 16 to 31
' Create a loop for the pin to flash
PinHigh MyPin ' Set the pin high
DelayMs 500 ' Delay so that it can be seen
PinLow MyPin ' Pull the pin low
DelayMs 500 ' Delay so that it can be seen
Next
Notes.
The compiler will write to the device’s LAT SFR and will always set the relevant Port or Port.Bit to an output. 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 a 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
'
' Set a pin high then low for 500ms using a variable as the pin to adjust
'
Proc FlashPin(pPinNumber As Byte)
PinHigh pPinNumber
' Set the pin output high
DelayMs 500
' Wait for 500 milliseconds
PinLow pPinNumber
' Pull the pin output low
DelayMs 500
' Wait for 500 milliseconds
EndProc
Example 3
' Clear then Set each pin of PORTC
Device = 24HJ128GP502
' Select the device to compile for
Declare Xtal = 16
Dim PinNumber as Byte
Low PORTC
' Make PORTC output low before we start
Do
' Create a loop
For PinNumber = Pin_C0 to Pin_C7 ' Create a loop for 8 pins
PinLow 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
PinHigh PinNumber
' Set each pin of PORTC
DelayMs 100
' Slow things down to see what's happening
Next
' Close the loop
Loop
' Do it forever
Note
The name “PinLow” can also be used to replace the command Low, and this, sometimes, makes the BASIC code a little clearer to read. PinLow and Low perform exactly the same task.