From a09bf37b68101af238f82e972051e3e85ae4bcfc Mon Sep 17 00:00:00 2001 From: AntKrotov Date: Thu, 1 Aug 2019 21:54:10 +0300 Subject: [PATCH] =?UTF-8?q?MSP430:=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- samples/MSP430/Blink.ob07 | 12 +-- samples/MSP430/{Example1.ob07 => Button.ob07} | 57 +++++------ samples/MSP430/{Example2.ob07 => TimerA.ob07} | 72 +++++++------- .../MSP430/{Example3.ob07 => TwoTimers.ob07} | 97 +++++++++---------- 4 files changed, 118 insertions(+), 120 deletions(-) rename samples/MSP430/{Example1.ob07 => Button.ob07} (51%) rename samples/MSP430/{Example2.ob07 => TimerA.ob07} (54%) rename samples/MSP430/{Example3.ob07 => TwoTimers.ob07} (55%) diff --git a/samples/MSP430/Blink.ob07 b/samples/MSP430/Blink.ob07 index 1dad8b2..c6e6b63 100644 --- a/samples/MSP430/Blink.ob07 +++ b/samples/MSP430/Blink.ob07 @@ -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 diff --git a/samples/MSP430/Example1.ob07 b/samples/MSP430/Button.ob07 similarity index 51% rename from samples/MSP430/Example1.ob07 rename to samples/MSP430/Button.ob07 index b6cc756..6b96dc4 100644 --- a/samples/MSP430/Example1.ob07 +++ b/samples/MSP430/Button.ob07 @@ -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. \ No newline at end of file +END Button. \ No newline at end of file diff --git a/samples/MSP430/Example2.ob07 b/samples/MSP430/TimerA.ob07 similarity index 54% rename from samples/MSP430/Example2.ob07 rename to samples/MSP430/TimerA.ob07 index 878a3c5..d54779d 100644 --- a/samples/MSP430/Example2.ob07 +++ b/samples/MSP430/TimerA.ob07 @@ -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. \ No newline at end of file +END TimerA. \ No newline at end of file diff --git a/samples/MSP430/Example3.ob07 b/samples/MSP430/TwoTimers.ob07 similarity index 55% rename from samples/MSP430/Example3.ob07 rename to samples/MSP430/TwoTimers.ob07 index b3f1548..3d2a393 100644 --- a/samples/MSP430/Example3.ob07 +++ b/samples/MSP430/TwoTimers.ob07 @@ -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. \ No newline at end of file +END TwoTimers. \ No newline at end of file