PIO.Mod.txt 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. MODULE PIO; (*NW 16.10.2014 PIC Input/Output for RISC*)
  2. IMPORT SYSTEM;
  3. (* PIC interface, output:
  4. D0 = PIC B7 data out
  5. D1 = PIC B6 clk out
  6. D2 = PIC A4 data in *)
  7. CONST gpio = -32; gpoc = -28; (*I/O addresses*)
  8. PROCEDURE del(i: INTEGER);
  9. BEGIN
  10. REPEAT DEC(i) UNTIL i = 0
  11. END del;
  12. PROCEDURE Send*(x: LONGINT);
  13. VAR i: INTEGER;
  14. BEGIN (*send byte*)
  15. FOR i := 0 TO 7 DO
  16. SYSTEM.PUT(gpio, x MOD 2 + 2); del(60); SYSTEM.PUT(gpio, x MOD 2); del(25); x := x DIV 2
  17. END ;
  18. SYSTEM.PUT(gpio, 0); del(100)
  19. END Send;
  20. PROCEDURE Receive*(VAR x: LONGINT);
  21. VAR i, x0: INTEGER;
  22. BEGIN (*receive byte*) x0 := 0;
  23. REPEAT UNTIL ~SYSTEM.BIT(gpio, 2);
  24. FOR i := 0 TO 7 DO
  25. SYSTEM.PUT(gpio, 2); del(60);
  26. IF SYSTEM.BIT(gpio, 2) THEN x0 := x0 + 100H END ;
  27. SYSTEM.PUT(gpio, 0); del(25); x0 := ROR(x0, 1)
  28. END ;
  29. x := x0
  30. END Receive;
  31. PROCEDURE Reset*;
  32. BEGIN SYSTEM.PUT(gpio, 0); SYSTEM.PUT(gpoc, 3) (*set bit 0, 1 to output*)
  33. END Reset;
  34. BEGIN Reset
  35. END PIO.