Скачиваний:
20
Добавлен:
09.05.2014
Размер:
161.28 Кб
Скачать

Битовые операции.

Алгоритмы логического управления, программные модели конечных автоматов используют битовое кодирование событий.

Хранение и обработка битовых данных, реализуемых в системе команд булевского процессора MCS51, позволяет организовать компактные и эффективные программы логического управления.

z=(x1 v /(x2x3))(/x2 v x4)

Реализация задачи на С

#include <reg51.h>

char bdata mem;

unsigned short int bdata out = 0;

sbit x1=mem^0;

sbit x2=mem^1;

sbit x3=mem^2;

sbit x4=mem^3;

sbit z = out^8;

// z= (x1 v /x2x3)(/x2 v x4)

main()

{

for(mem=15;mem>=0;mem--)

{

out <<= 1;

z =((x1|(~(x2&x3)))&((~x2)|x4));

}

P0 = out & 0xFF;

P1 = (out >> 8);

while (1);

}

Реализация задачи на ассемблере

mem equ 0x20

outl equ 0x21

outh equ 0x22

bseg at 0x23

x1 bit mem.0

x2 bit mem.1

x3 bit mem.2

x4 bit mem.3

y bit outl.0

tunec1 bit acc.0

tunec2 bit acc.1

cseg at 0

mov r0, #0x16

mov outl, #0

mov outh, #0

cyc:

mov a, outl

clr c

rlc a

mov outl, a

mov a, outh

rlc a

mov outh, a

mov a, r0

dec a

mov mem, a

mov c, x2 ; c=x2

anl c, x3 ; c=x2&x3

cpl c ; c=/x2&x3

orl c, x1 ; c=(/x2&x3 | x1)

mov tunec1, c ; tunec1=(/x2&x3 | x1)

mov c, x2 ; c=x2

cpl c ; c=/x2

orl c, x4 ; c=(/x2 | x4)

anl c, tunec1 ; c=(/x2&x3 | x1)&(/x2 | x4)

mov y, c

djnz r0, cyc

mov P0, outl

mov P1, outh

noper:

sjmp noper

end

Таймеры

Таймеры – счетчики реального времени, задаваемого стабильным кварцевым генератором частоты. Контроль временных параметров сигналов, измерение реального времени выполняются с использованием прерываний от таймеров.

Управление таймерами ТМ0/1

Таймер 0 - TH0.TL0

Таймер 1 - TH1.TL1

При переполнении таймера формируются запросы прерываний -биты TF1,TF0, биты сбрасывается при входе в прерывание

Управляющий регистр TCON - битовый доступ

TR0 - разрешение счета тм0

TR1 - разрешение счета тм1

Управляющий регистр TMOD - нет битового доступа

Выбор режима таймера тм1 TMOD.5 =m1 TMOD.4=m0

таймера тм0 TMOD.1 =m1 TMOD.0=m0

Программа часы.

Таймеры по переполнению вызывают прерывания – внутренние события. Счетчик событий используются для расчета текущего времени в сек и минутах в портах P1,P2

Реализация задачи на с

#include <reg51.h>

unsigned char t=0;

int_0() interrupt 3

{

t++;

TH1 = 0x3C;

TL1 = 0xAF + TL1;

}

main()

{

P3 = 0;

P1 = 0;

P0 = 0;

TMOD = 0x10;

TH1 = 0x3C;

TL1 = 0xAF;

ET1 = 1;

TR1 = 1;

EA = 1;

while(1)

{

if (t==20) {t=0; P1++;}

if (P1==60) {P1=0; P0++;}

};

}

Реализация задачи на ассемблере

iseg at 30h

Stack: ds 10

cseg at 0

ljmp start

cseg at 1Bh

ljmp ex00

cseg at 40h

start:

mov P1, #0

mov P2, #0

mov P3, #0

mov R1, #1

mov SP, #Stack-1

mov TMOD, #10h

mov TH1, #3Ch

mov TL1, #0AFh

setb EA

setb TR1

setb ET1

cikl:

mov A, R1

mov B, #20

subb A,B

jnz p_1

call calc0

p_1:

mov A, P1

mov B, #60

subb A,B

jnz p_2

cabll calc1

p_2:

jmp cikl

ex00:

push ACC

mov A, R1

inc A

mov R1, A

mov TH1, #3Ch

mov TL1, #0AFh

pop ACC

Reti

calc0:

mov A, P1

inc A

mov P1, A

mov R1, #1

ret

calc1:

mov A, P2

inc A

mov P2, A

mov P1, #0

ret

end