123456789101112131415161718192021222324252627282930313233343536373839404142 |
- MODULE PIO; (*NW 16.10.2014 PIC Input/Output for RISC*)
- IMPORT SYSTEM;
-
- (* PIC interface, output:
- D0 = PIC B7 data out
- D1 = PIC B6 clk out
- D2 = PIC A4 data in *)
- CONST gpio = -32; gpoc = -28; (*I/O addresses*)
- PROCEDURE del(i: INTEGER);
- BEGIN
- REPEAT DEC(i) UNTIL i = 0
- END del;
- PROCEDURE Send*(x: LONGINT);
- VAR i: INTEGER;
- BEGIN (*send byte*)
- FOR i := 0 TO 7 DO
- SYSTEM.PUT(gpio, x MOD 2 + 2); del(60); SYSTEM.PUT(gpio, x MOD 2); del(25); x := x DIV 2
- END ;
- SYSTEM.PUT(gpio, 0); del(100)
- END Send;
- PROCEDURE Receive*(VAR x: LONGINT);
- VAR i, x0: INTEGER;
- BEGIN (*receive byte*) x0 := 0;
- REPEAT UNTIL ~SYSTEM.BIT(gpio, 2);
- FOR i := 0 TO 7 DO
- SYSTEM.PUT(gpio, 2); del(60);
- IF SYSTEM.BIT(gpio, 2) THEN x0 := x0 + 100H END ;
- SYSTEM.PUT(gpio, 0); del(25); x0 := ROR(x0, 1)
- END ;
- x := x0
- END Receive;
- PROCEDURE Reset*;
- BEGIN SYSTEM.PUT(gpio, 0); SYSTEM.PUT(gpoc, 3) (*set bit 0, 1 to output*)
- END Reset;
- BEGIN Reset
- END PIO.
|