mirror of
https://github.com/AntKrotov/oberon-07-compiler.git
synced 2026-10-05 09:45:47 +00:00
MSP430: обновление примеров
This commit is contained in:
1 parent
74b9292d1f
commit
a09bf37b68
4 files changed
+118
-120
No files matched your search
@@ -12,7 +12,7 @@ IMPORT SYSTEM;
|
||||
|
||||
CONST
|
||||
|
||||
REDLED = 0;
|
||||
REDLED = {0};
|
||||
|
||||
P1OUT = 21H;
|
||||
P1DIR = 22H;
|
||||
@@ -22,24 +22,24 @@ VAR
|
||||
n: INTEGER;
|
||||
|
||||
|
||||
PROCEDURE inv_bit (mem, bit: INTEGER);
|
||||
PROCEDURE inv_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) / {bit})
|
||||
END inv_bit;
|
||||
SYSTEM.PUT8(mem, BITS(b) / bits)
|
||||
END inv_bits;
|
||||
|
||||
|
||||
BEGIN
|
||||
(* инициализация регистра P1DIR *)
|
||||
SYSTEM.PUT8(P1DIR, {REDLED});
|
||||
SYSTEM.PUT8(P1DIR, REDLED);
|
||||
|
||||
(* бесконечный цикл *)
|
||||
WHILE TRUE DO
|
||||
(* изменить состояние светодиода *)
|
||||
inv_bit(P1OUT, REDLED);
|
||||
inv_bits(P1OUT, REDLED);
|
||||
(* задержка *)
|
||||
n := 30000;
|
||||
WHILE n > 0 DO DEC(n) END
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
|
||||
*)
|
||||
|
||||
MODULE Example1;
|
||||
MODULE Button;
|
||||
|
||||
IMPORT SYSTEM, RTL;
|
||||
|
||||
|
||||
CONST
|
||||
|
||||
REDLED = 0;
|
||||
GREENLED = 6;
|
||||
BUTTON = 3;
|
||||
REDLED = {0};
|
||||
GREENLED = {6};
|
||||
BUTTON = {3};
|
||||
|
||||
P1OUT = 21H;
|
||||
P1DIR = 22H;
|
||||
@@ -31,44 +31,44 @@ BEGIN
|
||||
END delay;
|
||||
|
||||
|
||||
PROCEDURE get_bit (mem, bit: INTEGER): BOOLEAN;
|
||||
PROCEDURE get_bit (mem: INTEGER; bit: SET): BOOLEAN;
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b)
|
||||
RETURN bit IN BITS(b)
|
||||
RETURN bit * BITS(b) # {}
|
||||
END get_bit;
|
||||
|
||||
|
||||
PROCEDURE set_bit (mem, bit: INTEGER);
|
||||
PROCEDURE set_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) + {bit})
|
||||
END set_bit;
|
||||
SYSTEM.PUT8(mem, BITS(b) + bits)
|
||||
END set_bits;
|
||||
|
||||
|
||||
PROCEDURE clr_bit (mem, bit: INTEGER);
|
||||
PROCEDURE clr_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) - {bit})
|
||||
END clr_bit;
|
||||
SYSTEM.PUT8(mem, BITS(b) - bits)
|
||||
END clr_bits;
|
||||
|
||||
|
||||
PROCEDURE inv_bit (mem, bit: INTEGER);
|
||||
PROCEDURE inv_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) / {bit})
|
||||
END inv_bit;
|
||||
SYSTEM.PUT8(mem, BITS(b) / bits)
|
||||
END inv_bits;
|
||||
|
||||
|
||||
(*
|
||||
@@ -93,11 +93,11 @@ END inv_bit;
|
||||
*)
|
||||
PROCEDURE int (priority, ptr: INTEGER);
|
||||
BEGIN
|
||||
IF priority = 18 THEN (* прерывание от порта P1 *)
|
||||
IF get_bit(P1IFG, BUTTON) THEN (* нажата кнопка *)
|
||||
inv_bit(P1OUT, REDLED);
|
||||
delay(30000);
|
||||
clr_bit(P1IFG, BUTTON)
|
||||
IF priority = 18 THEN (* прерывание от порта P1 *)
|
||||
IF get_bit(P1IFG, BUTTON) THEN (* нажата кнопка *)
|
||||
inv_bits(P1OUT, REDLED); (* изменить состояние светодиода *)
|
||||
delay(30000); (* задержка для отпускания кнопки *)
|
||||
clr_bits(P1IFG, BUTTON) (* сбросить флаг прерывания *)
|
||||
END
|
||||
END
|
||||
END int;
|
||||
@@ -106,21 +106,22 @@ END int;
|
||||
PROCEDURE main;
|
||||
BEGIN
|
||||
(* инициализация спец. регистров *)
|
||||
SYSTEM.PUT8(P1DIR, {REDLED, GREENLED});
|
||||
set_bit(P1REN, BUTTON);
|
||||
set_bit(P1OUT, BUTTON);
|
||||
set_bit(P1IE, BUTTON);
|
||||
SYSTEM.PUT8(P1DIR, REDLED + GREENLED);
|
||||
set_bits(P1REN, BUTTON);
|
||||
set_bits(P1OUT, BUTTON);
|
||||
set_bits(P1IE, BUTTON);
|
||||
|
||||
RTL.SetInt(int); (* назначить обработчик прерываний *)
|
||||
RTL.SetInt(int); (* назначить обработчик прерываний *)
|
||||
SYSTEM.CODE(0D232H); (* BIS #8, SR; EINT; разрешить прерывания *)
|
||||
|
||||
(* бесконечный цикл *)
|
||||
WHILE TRUE DO
|
||||
inv_bit(P1OUT, GREENLED);
|
||||
delay(30000)
|
||||
inv_bits(P1OUT, GREENLED); (* изменить состояние светодиода *)
|
||||
delay(30000) (* задержка *)
|
||||
END
|
||||
END main;
|
||||
|
||||
|
||||
BEGIN
|
||||
main
|
||||
END Example1.
|
||||
END Button.
|
||||
@@ -6,15 +6,15 @@
|
||||
|
||||
*)
|
||||
|
||||
MODULE Example2;
|
||||
MODULE TimerA;
|
||||
|
||||
IMPORT SYSTEM, RTL;
|
||||
|
||||
|
||||
CONST
|
||||
|
||||
REDLED = 0;
|
||||
GREENLED = 6;
|
||||
REDLED = {0};
|
||||
GREENLED = {6};
|
||||
|
||||
P1OUT = 21H;
|
||||
P1DIR = 22H;
|
||||
@@ -26,50 +26,49 @@ CONST
|
||||
TACCR0 = 0172H;
|
||||
|
||||
(* биты регистра TACTL *)
|
||||
TAIFG = 0;
|
||||
TAIE = 1;
|
||||
TACLR = 2;
|
||||
MC0 = 4;
|
||||
MC1 = 5;
|
||||
ID0 = 6;
|
||||
ID1 = 7;
|
||||
TASSEL0 = 8;
|
||||
TASSEL1 = 9;
|
||||
TAIFG = {0};
|
||||
TAIE = {1};
|
||||
TACLR = {2};
|
||||
MC0 = {4};
|
||||
MC1 = {5};
|
||||
ID0 = {6};
|
||||
ID1 = {7};
|
||||
TASSEL0 = {8};
|
||||
TASSEL1 = {9};
|
||||
|
||||
(* биты регистра TACCTL0 *)
|
||||
CCIE = 4;
|
||||
CAP = 8;
|
||||
CCIE = {4};
|
||||
CAP = {8};
|
||||
|
||||
|
||||
PROCEDURE set_bit (mem, bit: INTEGER);
|
||||
PROCEDURE set_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) + {bit})
|
||||
END set_bit;
|
||||
SYSTEM.PUT8(mem, BITS(b) + bits)
|
||||
END set_bits;
|
||||
|
||||
|
||||
PROCEDURE clr_bit (mem, bit: INTEGER);
|
||||
PROCEDURE clr_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) - {bit})
|
||||
END clr_bit;
|
||||
SYSTEM.PUT8(mem, BITS(b) - bits)
|
||||
END clr_bits;
|
||||
|
||||
|
||||
PROCEDURE inv_bit (mem, bit: INTEGER);
|
||||
PROCEDURE inv_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) / {bit})
|
||||
END inv_bit;
|
||||
|
||||
SYSTEM.PUT8(mem, BITS(b) / bits)
|
||||
END inv_bits;
|
||||
|
||||
(*
|
||||
обработчик прерываний
|
||||
@@ -96,13 +95,12 @@ VAR
|
||||
x: SET;
|
||||
|
||||
BEGIN
|
||||
IF priority = 24 THEN (* прерывание от таймера A *)
|
||||
SYSTEM.GET(TACTL, x);
|
||||
IF TAIFG IN x THEN (* прерывание было *)
|
||||
inv_bit(P1OUT, REDLED);
|
||||
inv_bit(P1OUT, GREENLED);
|
||||
(* сбросить флаг прерывания и обновить регистр TACTL *)
|
||||
SYSTEM.PUT(TACTL, x - {TAIFG})
|
||||
IF priority = 24 THEN (* прерывание от таймера A *)
|
||||
SYSTEM.GET(TACTL, x); (* взять регистр TACTL *)
|
||||
IF TAIFG * x # {} THEN (* прерывание было *)
|
||||
inv_bits(P1OUT, REDLED); (* изменить состояние светодиода *)
|
||||
inv_bits(P1OUT, GREENLED); (* изменить состояние светодиода *)
|
||||
SYSTEM.PUT(TACTL, x - TAIFG) (* сбросить флаг прерывания и обновить регистр TACTL *)
|
||||
END
|
||||
END
|
||||
END int;
|
||||
@@ -111,23 +109,23 @@ END int;
|
||||
PROCEDURE main;
|
||||
BEGIN
|
||||
(* инициализация регистра P1DIR *)
|
||||
SYSTEM.PUT8(P1DIR, {REDLED, GREENLED});
|
||||
SYSTEM.PUT8(P1DIR, REDLED + GREENLED);
|
||||
|
||||
(* начальное состояние светодиодов *)
|
||||
set_bit(P1OUT, GREENLED);
|
||||
clr_bit(P1OUT, REDLED);
|
||||
set_bits(P1OUT, GREENLED); (* включен *)
|
||||
clr_bits(P1OUT, REDLED); (* выключен *)
|
||||
|
||||
RTL.SetInt(int); (* назначить обработчик прерываний *)
|
||||
SYSTEM.CODE(0D232H); (* BIS #8, SR; EINT; разрешить прерывания *)
|
||||
|
||||
(* инициализация регистров таймера A *)
|
||||
SYSTEM.PUT(TAR, 0);
|
||||
SYSTEM.PUT(TACCTL0, {CCIE, CAP});
|
||||
SYSTEM.PUT(TACCTL0, CCIE + CAP);
|
||||
SYSTEM.PUT(TACCR0, 1000);
|
||||
SYSTEM.PUT(TACTL, {TAIE, MC0, TASSEL0})
|
||||
SYSTEM.PUT(TACTL, TAIE + MC0 + TASSEL0)
|
||||
END main;
|
||||
|
||||
|
||||
BEGIN
|
||||
main
|
||||
END Example2.
|
||||
END TimerA.
|
||||
@@ -7,15 +7,15 @@
|
||||
|
||||
*)
|
||||
|
||||
MODULE Example3;
|
||||
MODULE TwoTimers;
|
||||
|
||||
IMPORT SYSTEM, RTL;
|
||||
|
||||
|
||||
CONST
|
||||
|
||||
REDLED = 0;
|
||||
GREENLED = 6;
|
||||
REDLED = {0};
|
||||
GREENLED = {6};
|
||||
|
||||
P1OUT = 21H;
|
||||
P1DIR = 22H;
|
||||
@@ -26,25 +26,25 @@ CONST
|
||||
IFG1 = 0002H;
|
||||
|
||||
(* биты регистра WDTCTL *)
|
||||
WDTIS0 = 0;
|
||||
WDTIS1 = 1;
|
||||
WDTSSEL = 2;
|
||||
WDTCNTCL = 3;
|
||||
WDTTMSEL = 4;
|
||||
WDTNMI = 5;
|
||||
WDTNMIES = 6;
|
||||
WDTHOLD = 7;
|
||||
WDTIS0 = {0};
|
||||
WDTIS1 = {1};
|
||||
WDTSSEL = {2};
|
||||
WDTCNTCL = {3};
|
||||
WDTTMSEL = {4};
|
||||
WDTNMI = {5};
|
||||
WDTNMIES = {6};
|
||||
WDTHOLD = {7};
|
||||
|
||||
(* биты регистра IE1 *)
|
||||
WDTIE = 0;
|
||||
NMIIE = 4;
|
||||
WDTIE = {0};
|
||||
NMIIE = {4};
|
||||
|
||||
(* биты регистра IFG1 *)
|
||||
WDTIFG = 0;
|
||||
NMIIFG = 4;
|
||||
WDTIFG = {0};
|
||||
NMIIFG = {4};
|
||||
|
||||
(* ключ защиты сторожевого таймера *)
|
||||
WDTPW = 5A00H;
|
||||
WDTPW = BITS(5A00H);
|
||||
|
||||
(* регистры таймера A *)
|
||||
TACTL = 0160H;
|
||||
@@ -53,39 +53,39 @@ CONST
|
||||
TACCR0 = 0172H;
|
||||
|
||||
(* биты регистра TACTL *)
|
||||
TAIFG = 0;
|
||||
TAIE = 1;
|
||||
TACLR = 2;
|
||||
MC0 = 4;
|
||||
MC1 = 5;
|
||||
ID0 = 6;
|
||||
ID1 = 7;
|
||||
TASSEL0 = 8;
|
||||
TASSEL1 = 9;
|
||||
TAIFG = {0};
|
||||
TAIE = {1};
|
||||
TACLR = {2};
|
||||
MC0 = {4};
|
||||
MC1 = {5};
|
||||
ID0 = {6};
|
||||
ID1 = {7};
|
||||
TASSEL0 = {8};
|
||||
TASSEL1 = {9};
|
||||
|
||||
(* биты регистра TACCTL0 *)
|
||||
CCIE = 4;
|
||||
CAP = 8;
|
||||
CCIE = {4};
|
||||
CAP = {8};
|
||||
|
||||
|
||||
PROCEDURE set_bit (mem, bit: INTEGER);
|
||||
PROCEDURE set_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) + {bit})
|
||||
END set_bit;
|
||||
SYSTEM.PUT8(mem, BITS(b) + bits)
|
||||
END set_bits;
|
||||
|
||||
|
||||
PROCEDURE inv_bit (mem, bit: INTEGER);
|
||||
PROCEDURE inv_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) / {bit})
|
||||
END inv_bit;
|
||||
SYSTEM.PUT8(mem, BITS(b) / bits)
|
||||
END inv_bits;
|
||||
|
||||
|
||||
(*
|
||||
@@ -113,14 +113,13 @@ VAR
|
||||
x: SET;
|
||||
|
||||
BEGIN
|
||||
IF priority = 26 THEN (* прерывание от сторожевого таймера *)
|
||||
inv_bit(P1OUT, REDLED)
|
||||
ELSIF priority = 24 THEN (* прерывание от таймера A *)
|
||||
SYSTEM.GET(TACTL, x);
|
||||
IF TAIFG IN x THEN (* прерывание было *)
|
||||
inv_bit(P1OUT, GREENLED);
|
||||
(* сбросить флаг прерывания и обновить регистр TACTL *)
|
||||
SYSTEM.PUT(TACTL, x - {TAIFG})
|
||||
IF priority = 26 THEN (* прерывание от сторожевого таймера *)
|
||||
inv_bits(P1OUT, REDLED) (* изменить состояние светодиода *)
|
||||
ELSIF priority = 24 THEN (* прерывание от таймера A *)
|
||||
SYSTEM.GET(TACTL, x); (* взять регистр TACTL *)
|
||||
IF TAIFG * x # {} THEN (* прерывание было *)
|
||||
inv_bits(P1OUT, GREENLED); (* изменить состояние светодиода *)
|
||||
SYSTEM.PUT(TACTL, x - TAIFG) (* сбросить флаг прерывания и обновить регистр TACTL *)
|
||||
END
|
||||
END
|
||||
END int;
|
||||
@@ -129,27 +128,27 @@ END int;
|
||||
PROCEDURE main;
|
||||
BEGIN
|
||||
(* инициализация регистра P1DIR *)
|
||||
SYSTEM.PUT8(P1DIR, {REDLED, GREENLED});
|
||||
SYSTEM.PUT8(P1DIR, REDLED + GREENLED);
|
||||
|
||||
(* начальное состояние светодиодов - включены *)
|
||||
set_bit(P1OUT, GREENLED);
|
||||
set_bit(P1OUT, REDLED);
|
||||
set_bits(P1OUT, GREENLED);
|
||||
set_bits(P1OUT, REDLED);
|
||||
|
||||
RTL.SetInt(int); (* назначить обработчик прерываний *)
|
||||
SYSTEM.CODE(0D232H); (* BIS #8, SR; EINT; разрешить прерывания *)
|
||||
|
||||
(* инициализация регистров таймера A *)
|
||||
SYSTEM.PUT(TAR, 0);
|
||||
SYSTEM.PUT(TACCTL0, {CCIE, CAP});
|
||||
SYSTEM.PUT(TACCTL0, CCIE + CAP);
|
||||
SYSTEM.PUT(TACCR0, 1500);
|
||||
SYSTEM.PUT(TACTL, {TAIE, MC0, TASSEL0});
|
||||
SYSTEM.PUT(TACTL, TAIE + MC0 + TASSEL0);
|
||||
|
||||
(* инициализация регистров сторожевого таймера *)
|
||||
set_bit(IE1, WDTIE);
|
||||
SYSTEM.PUT(WDTCTL, WDTPW + ORD({WDTIS1, WDTSSEL, WDTCNTCL, WDTTMSEL}))
|
||||
set_bits(IE1, WDTIE);
|
||||
SYSTEM.PUT(WDTCTL, WDTPW + WDTIS1 + WDTSSEL + WDTCNTCL + WDTTMSEL)
|
||||
END main;
|
||||
|
||||
|
||||
BEGIN
|
||||
main
|
||||
END Example3.
|
||||
END TwoTimers.
|
||||
Reference in new issue
Block a user