How to program outputs?
Just remember that a pin is an input if the corresponding bit in the associated TRISx register is set.
PMP has no specifiec built-in instruction for manipulating such register, simply affect a value directly to the register.
An example with TRISB:
TRISB := $0F; // PORTB 0..3 as inputs, 4..7 as outputs
PORTB := $F0; // set PORTB 4..7 high
TRISB.0 := false; // PORTB.0 as output, immediately set low (PORTB.0 was 0)
// Remember that every output pin has a latch even if it is set as an input, the latch works...
Manipulating the TRISx bit is a way to do fast 0 output with an external pullup (ofen used in bidirectional i/o such as I2C).
Another example with the full PMP syntax possibilities:
program test;
var
MyInputPin1 : boolean @PORTB.1;
MyInputPin2 : boolean @PORTB.4;
MyOutputPin1 : boolean @PORTB.2;
begin
TRISB := [MyInputPin1, MyInputPin1]; // set mask to pins that are inputs
MyOutputPin1 := MyInputPin1 or MyInputPin2;
end.
Help! There is no TRISx in my device!
For old and small devices that had no TRISx register, PMP (V1.05 and later) provides a special built-in procedure TRIS(Port, Mask) that maps to the TRISx register if it exists or to a TRIS instruction otherwise. The problem with TRIS instruction (of such device in fact) is that it is write only, you cannot read what is the current mask.