Programowanie mikrokontrolerow 8051 w jezyku C

background image

Programowa

ni

e mik

rokontrolerów 80

51 w

jez

yku

C

-

czę

ść

1

Gdy

już

skompletujemy

nas

z

wars

zta

t

prog

ra

mis

t

yczny

i

sp

rz

ęto

wy

,

por

a

na

n

api

san

ie

p

i

e

rwszego

p

rogr

amu

w

języ

ku

C.

Najbar

dziej efekt

owne

s

ą p

rogr

amy,

który

ch

dzi

an

ie

moz

na

odraz

u

zoba

c

z

y

c

n

a

w

ł

a

s

ne ocz

y.

Ja

zwy

kle, gdy

z

aczynam

p

racę

z

now

ym

m

ik

rokont

roler

m,

piszę

prog

ra

m,

który

z

apa

la

diode

LE

D.

W

ten

sp

osób

mo

żna

na

jszy

bci

ej

pr

zeko

nać s

i

ę

o

pop

rawnym

dzi

an

iu

pro

gra

mu

.

Do

mik

rokont

role

ra

nale

ży

podł

ą

c

z

yc

8

d

iod

LED

w

spos

ób

pokaza

ny

na

rysunku

:

Wa

rtości

rezyst

orów

na

leży

dobrać

odpw

iedn

io

do

posiadanych

diod

LED.

Je

sl

i s

ą

to d

iod

y

sta

nd

ar

dow

e, to

r

ezys

ta

ncja r

ezystor

ów

po

win

na

mi

wartość

ok. 330

O

hm.

Na

t

om

iast

g

d

y

dysp

onujemy

d

iodami

n

iskop

ądo

wy

mi, to

rezystancja

rezystor

ów

może m

ieć

wartośc

pona

d

1 k

Ohm

(n

ale

ż

y

zwrócić

takż

e uwagę

na

wy

dajn

ość

prą

dową

portów

m

ikr

okont

roler

a)

.

O

pera

tor pr

zypisa

nia

.

W

t

ym podtem

acie

za

pozamy

się

z

na

jczęście

j

uży

wanym

oper

atorem

-

operator

em

pr

z

y

p

is

an

ia.

Słu

ż

y

on,

jak

jego

n

azwa

wskazuje, do p

rzypisa

ni

a

do

dan

ej zm

ien

n

e

j

wartości i

nn

ej

zm

ien

nej,

badź

sta

łej.

/

/

doł

ączeni

e

plik

u na

główk

oweg

o

/

/

zawie

rajac

ego

d

efini

cj

e

rej

estrow

/

/

wewn

etrzny

ch pro

cesora

#

inclu

de

<805

1.h>

/

/

głó

wna fu

n

k

cja

progra

mu

v

oid

ma

in(v

oid)

{

/

/

zapisan

ie

do

portu

P0

li

czby

0

x55

P

0

=

0x55;

/

/

pusta

pęt

la

ni

eskonczona

-

zatrzym

anie

porgra

mu

wh

ile(

1);

}

N

a począt

ku

musi

m

y

dołączy

ć

pl

ik

n

ag

łó

wkow

y

z

defi

nicjami

r

eje

st

w

procesora.

Gdy

b

my

tego

nie

z

robili

,

to n

ie

mogl

ib

yśm

y

odwo

ły

wa

c

się do rejestrów

proces

ora

z

a

pomo

c

ą

naz

w sym

boli

c

zn

ych,

tylk

o

pr

zez

podawan

ie a

dres

u da

nego

reje

s

tru.

Tak

ie r

ozwiąza

ni

e

b

ob

y

bardzo

niewy

go

d

n

e

. Ja

w

n

as

z

ym

pr

z

ykła

dzie

doł

ącz

yłem

pli

k

8051

.h

- "bezpieczny"

d

la

większ

ości

mik

roko

ntr

olerów

z

r

odzi

ny

8051.

W

przypa

dku,

g

d

yb

y

śm

y

ko

rzy

sta

li

z

rejestrów

specy

f

iczny

ch

dla

da

nego m

ikr

okont

role

ra,

nie

w

y

stę

pując

yc

h w

sta

nda

r

tow

ym

8

051,

to mu

simy

dołaczy

ć

odpow

iedni

dl

a

dan

ego

mi

kroko

ntro

ler

a

plik

nag

łówk

ow

y.

W

s

ytuacji, gdy

u

ż

ywam

y

tylko

typ

ow

y

ch

reje

st

rów

moż

na

sp

okojnie za

stoso

wac

pli

k

8051.

h

.

K

ażdy

p

rogr

am

pisany w

jęz

yku

C

mus

i

się

skła

dać

z

główne

j funkcji

mai

n

.

Funk

c

ja

ta

n

ie

zwra

ca

żadn

ej

wa

rtości

an

i

do fun

kcji

ni

e

j

est p

rzek

azy

wan

a

żad

na

wartość,

wi

ęc

fun

kcj

ę

deklar

ujemy

jako

v

oid m

ai

n(void).

S

ł

owo

v

oid

pr

zed

na

zwą

fukcj

i m

ó

wi kompi

la

t

o

ro

w

i

,

że

funkcja n

ie

zwr

a

c

a w

artości, a

lbo

i

nac

zej

mów

i

ąc, że

background image

zw

racan

a

wartośc

jest typu

v

oid (

pust

y, b

rak

ty

pu)

.

Słow

o

void

w

n

awias

a

c

h

okr

ągłych po

na

zwie

f

ukcji

mówi

komp

ila

torowi, że

do

funkcji n

ie

jest

prz

ekazywana

żad

n

a

war

toś

ć.

W za

leż

ności od tego, j

a

k

ą

funkcę

chcemy

n

ap

isa

c

i

jakie

par

ame

try m

a

ona

p

rzyjmo

wać

ora

z

jaką

wartość

może zw

racać,

dekla

racj

a fu

nkc

ji

może

p

rzyjmo

wać

na

jróż

nie

j

s

ze

po

st

aci :

v

oid

funkc

ja(c

har x)

-

funkcja

pr

zyjmuj

ąca

j

ede

n p

aramet

r

typu

ch

ar

(znak),

n

iezwrac

ająca

wartośc

i

v

oid

funkc

ja(c

har x,

char y

)

- funk

ca

pr

z

yjmu

jąca

dwa

parame

try

t

ypu

char

, n

iezwraca

jąca

w

artośc

i

c

har funkc

ja(vo

id)

-

funkc

ja

niep

r

z

yjmu

jąca

żadnych

param

etró

w,

zwraca

jąca

w

artość

ty

pu

char

Oczy

wiś

cie

mozliwy

ch

kombina

cji

jest

bard

zo

dużo

i

zal

eżą

one

o

d

t

e

g

o,

jakie

zad

an

ia

ma

s

pełni

dan

a

fun

kcja.

Gdy

już

ma

m

y sz

kielet

prog

ra

mu,

to

na

le

z

y

wpisac

właś

ciwy

kod

prog

ra

mu

.

W n

as

z

ym

pierwszym

p

rogr

am

ie

w

z

asad

zie

dec

yd

ujące

dz

nac

zen

ia

m

a

jeden

w

iers

z p

rogr

amu

:

P0 =

0

x55;

.

Je

st

to

i

nst

ru

kcja p

rzypisująca do por

tu

P0

wartość

55

h.

O

bjawi

się

to

zap

al

eni

em

co

d

rug

iej

diod

y

LED

podłączon

e

j do

port

u

P0.

Liczb

y

w

sy

stemie

s

zesnast

o

wy

m

w

j

ę

z

yku

C

zap

isujemy

właśni

e w

podany

sposób

:

l

iczbę

szesnas

tko

wą (bez

zn

ak

u

'

h'

na

końcu)

n

al

ezy

popr

zedz

i

c

ciąg

i

e

m

zn

aków

'0x'

.

Po

za

pisa

ni

u

do

port

u

właści

wej

w

a

rtości na

le

ż

y

za

tr

zymać wy

ko

ny

wanie p

rogr

amu

.

Najł

atwiej

dokonać

tego

wy

korz

yst

ując

pętlę

while.

Pętla

ta

jes

t

w

yk

on

yw

ana

ta

k

długo,

jej

w

a

run

ek

j

est p

rawdz

iw

y.

Poni

e

waz

w

n

as

z

ym

prog

ra

mie

waru

nek

pętl

i

j

est war

tością st

ałą

,

re

preze

nt

ującą

pr

awdę

logiczn

ą,

to

na

sza

pętla

będzie s

wy

kon

y

wała

bez

końca.

Funkcje

logi

czne.

Wyz

erowanie

od

powi

edn

i

c

h

li

ni

i

portu

może

m

y

z

rea

lizować

tak

że

w

in

ny

sp

osó

b,

pr

zez

wy

ko

n

anie

iloczynu

log

icznego

port

u

ze s

tałą

.

Pr

zeds

ta

w

ia t

o

tabela

pr

awd

y

fun

k

c

ji

AND :

Jeśli

potr

aktujemy

z

mie

nn

ą

A jako n

asz

port,

a

zmi

en

B

jako

mas

określają

c

ą

któ

re

bity

na

leży

w

y

zerow

ać,

to będą

nas

i

nte

resowa

ć dwa ostat

nie

wiersze tej

tabeli.

Jak

wy

nika

z

tabel

i odpow

ieni

bit

reje

st

ru

zosta

nie

wy

zero

wany,

gdy

odp

owiadając

y

mu

bit

mas

ki

będzie

mi

wa

rtość

0

.

W

pr

zeciwnym

przypadku

sta

n

bitu

r

eje

st

ru

sie n

ie

zm

ien

i.

Rz

eczą

waż

jest

ab

y

p

amie

tać,

że

odp

owi

edn

ie

bity

rejestru

,

n

a

któ

r

ych

chcem

y

p

rze

rowadzić i

locz

yn m

usza

b

y

ć

w

s

tan

ie

1.

Kod

pro

gra

mu

real

iz

ującego

zerowan

ie l

in

ii

port

u P0

za

pomo

i

locz

ynu log

iczn

eg

o jest

pr

zedst

awion

y

poniż

e

j

:

/

/

doł

ączeni

e

plik

u na

główk

oweg

o

/

/

zawie

rajac

ego

d

efini

cj

e

rej

estrow

/

/

wewn

etrzny

ch pro

cesora

#

inclu

de

<805

1.h>

/

/

głó

wna fu

n

k

cja

progra

mu

v

oid

ma

in(v

oid)

{

/

/

ilo

czyn

logi

czn

y

portu P

0

ze

stałą

55h

P

0

&=

0x

55;

/

/

pusta

pęt

la

ni

eskonczona

-

zatrzym

anie

porgra

mu

wh

ile(

1);

}

W

ieksz

ość

kodu

j

est t

aka

sama

jak w

prog

ra

mie

poprze

dni

m.

Wy

jaśnien

ia

w

y

maga

jed

e

n wiersz

kodu :

background image

P

0

&=

0x

55;

Jest to

skrócon

y

z

api

s n

as

tepującego

w

yrażen

ia

:

P

0

=

P0

&

0x5

5

;

Języ

k

C

umoz

liwia

sto

sow

an

ie

sk

róc

ony

ch wyrażeń,

będąc

ych

połączeni

em

op

e

rator

a

pr

zypi

s

an

ia

z

ope

rator

ami

a

rytmety

cznymi,

badź

logicz

n

ymi.

Moż

li

we

nas

tępujące

skrócone

formy

zap

isu

w

yrażeń

:

Funkcja

Zapis

skró

c

ony

Zapis

nor

malny

doda

wa

nie

a

+=

b

a

=

a

+

b

od

ejmow

an

i

e

a

-=

b

a

=

a

- b

m

noż

enie

a

*=

b

a

=

a

*

b

dziele

nie

a

/=

b

a

=

a

/

b

ilocz

yn log

iczny

a

&=

b

a

=

a

& b

suma

l

giczn

a

a

|=

b

a

=

a

| b

p

rze

suni

ęcie

w

lewo

a

<

<=

b

a

=

a

<

<

b

pr

zesun

ięcie

w

prawo

a

>

>=

b

a

=

a

>

>

b

a

lte

rn

atywa

logiczn

a

a

^=

b

a

=

a

^

b

Po

zerowan

iu

li

ni

i

portu

n

ads

zedł

czas

na

ich

ustawia

nie

.

Służy

do tego funkcja

logiczn

a

OR. T

abela

pr

aw

dy

fun

kcji

OR

je

st p

rze

dstawiona

po

niżej :

Tym r

aze

m

in

te

resują

nas

z

dwa pi

erwsze

wi

e

rsze

tabel

i.

W

ynik

a z

n

ic

h,

że aby

ustawić odpo

wnied

ni

bit

rejestru

,

to odpowiadając

y

mu

bit

mas

ki

musi

mieć war

toś

ć 1

no

i

oc

zy

wiś

cie

bity

do

ustawie

nia

m

uszą

m

ieć wart

ć

0.

P

rogra

m

p

rze

dstawiony

jest

poni

żej

:

/

/

doł

ączeni

e

plik

u na

główk

oweg

o

/

/

zawie

rajac

ego

d

efini

cj

e

rej

estrow

/

/

wewn

etrzny

ch pro

cesora

#

inclu

de

<805

1.h>

/

/

głó

wna fu

n

k

cja

progra

mu

v

oid

ma

in(v

oid)

{

/

/

ustawi

enie

wszystko

ch l

inii

portu P

0

w

stan ni

ski

P

0

=

0;

/

/

suma

logi

czna

portu

P0

z

e

stał

ą

F0h

P

0

|= 0

xF

0;

/

/

pusta

pęt

la

ni

eskończona

-

zatrzym

anie

porgra

mu

wh

ile(

1);

}

W

nas

zym

prog

ra

mie

pojawił

się dodat

ko

w

y

wi

e

rsz kodu

:

P

0

=

0;

background image

Ustawia o

n wsz

ystkie

lin

ie

port

u

P0 w

stan

n

iski

.

Pon

i

ewa

ż

chcemy

li

nie

po

rtu

P0

ustawić

wię

c

mus

b

w

s

tan

ie

ni

ski

m.

J

ed

nak

z

ar

az

po

z

reseto

wan

iu

proces

or

a wsz

ystkie

por

y

są u

stawia

ne

w

sta

n

n

is

ki.

Musimy

więczar

az

p

rzed

ic

h

ust

a

wie

niem

je

wyz

ero

wać.

Samo

ustawn

i

e

nie

wy

branuc

h

lin

ii

w

stan

w

ys

oki

re

ali

zuje

po

niżs

z

y

kod

:

P

0

|= 0

xF

0;

Ponownie z

astoso

wałem skrócony

za

pis

łacz

ąc

y

op

er

ator

p

rzypisa

nia

z

operato

rem

sumy

logicz

nej.

Programowa

ni

e mik

rokontrolerów 80

51 w

jęz

yku

C

-

czę

ść

2

W

dru

giej części

ku

rsu

pro

gra

mowani

a

zapo

zn

amy

się z

ob

sług

ą k

lawiatu

ry.W

tym

c

e

l

u

musi

m

y

podłąc

z

do

u

kładu

z

poprzed

niej

czę

ści k

ursu

,

do

portu

P3

,

8 p

rzycisk

ów

w

sposó

b

pokaz

any

na

pon

izszym rysunk

u

:

K

lawiat

ura

ta

d

zia

ła

w

na

stę

p

u

jąc

y

spos

ób

:

po

nac

iśn

ięciu

pr

z

ycisku wy

prow

adzeni

e

port

u,

do kt

órego

j

est

podł

ączony

pr

zy

cisk,

je

st

zwieran

e

do

masy,

co

wy

my

s

za n

a

w

y

prowa

dzen

iu

port

u

stan

ni

ski

.

Port

m

usi

z

awierać

we

wnętrz

ne

rezystor

y

pod

cią

gajęc

e

li

nie

por

tu

do

szy

ny

z

asil

ającej.

W

pr

zeciwnym

ra

zie

będziumy

m

usieli

doł

ą

czyć

zewnętr

zne

rezystor

y

podciągaj

ące

.

W

typ

ow

y

ch

m

ikr

okont

roler

ach

rodz

iny

805

1 r

ezy

story

te

s

ą wbu

do

wane

w

każ

d

y

port

,

za

w

yj

ątkiem por

tu

P0

a

tak

że w

bardzo

popula

rny

m AT

89C20

51 z

a

w

yj

ątkiem

l

in

ii

P1.0

i

P1.

1.

T

ak

wie

c

pr

zed

podłączen

iem

kla

wiatu

ry

n

al

ezy

się

upewnić,

że por

t

d

o k

tórego

chcemy

podł

acz

yc

kl

awiatu

pos

a

da

rezystor

y

podciągaj

ąc

e.

P

ierwsz

y

p

rogr

am

w

yk

orz

ystują

cy

kl

awiatu

jest

bard

zo

pros

t

y

i

z

ami

eszczony

pon

iżej :

/

/

doł

ączeni

e

plik

u na

główk

oweg

o

/

/

zawie

rajac

ego

d

efini

cj

e

rej

estrow

/

/

wewn

etrzny

ch pro

cesora

#

inclu

de

<805

1.h>

/

/

głó

wna fu

n

k

cja

progra

mu

v

oid

ma

in(v

oid)

{

/

/

pęt

la

ni

eskończona

wh

ile(

1)

/

/

przepis

anie

do

portu

P0

s

tanu

lin

ii

portu

P3

P

0

=

P3;

}

C

ały

p

rogr

am

opi

e

ra

się

w

zas

adz

ie n

a

nieu

sta

nnym

p

rze

pis

ywaniu

sta

nu

l

in

ii

portu

P3 do por

tu

P0.

Efektem

te

g

o jest

zap

al

an

ie

odpow

iedniej

diody

LED po n

aciś

nię

ciu dow

olnego

przycisku.

Zauważmy,

że n

ac

iśn

iecie

p

rzycisku

w

y

wo

łuj

e

w

ymusz

e

nie

na

odp

owi

edn

im

w

ypro

wadzeniu

p

o

rtu

P3

sta

nu

n

isk

iego, a

z

ap

alen

ie

diody

L

ED

jest

spo

wo

do

wane

ustawien

iem

na

odpow

iednim

wy

prowa

dzen

iu

portu

P0

równ

ież s

tan

u

ni

sk

i

e

go.

Dzi

ęki

te

mu

możemy

po

prostu

pr

zep

isać st

an

li

ni

i

por

tu

P3

do

p

o

rtu

P0,

bez

za

dnych

dodatkow

y

ch

zabiegów.

Jest to

z

rea

liz

o

wan

e p

rzez

ins

tr

ukcję

:

background image

P

0

=

P3;

N

ie

w

ymagane

żad

ne

dodat

k

owe

zm

ien

ne

pośred

nic

zące

w

p

rzesyłan

iu

danych

z

port

u

P3 do por

tu

P0.

Instrukc

ja wa

r

unkowa if

Te

ra

z

poz

namy

bard

zo waż

i

nst

ru

kcję

wa

run

ko

if. S

łuży

on

a

do

wa

runk

o

weg

o

w

yk

onan

ia

frag

m

e

nt

u

p

rogr

am

u.

N

ajprostsza

wersja i

nst

ru

kcji if wyg

ląd

a

na

stę

pując

o

:

i

f(warune

k)

i

nstrukcja

;

Jesli

waru

nek

ma

wartość

true

(p

rawda

) to wy

ko

ny

wana

je

st i

ns

tru

kcja,

w

pr

zeciwny

m r

az

ie

in

st

ru

kcja n

ie

będzie wy

ko

na

na

.

P

rzykład

zas

t

osowania

in

st

ru

kcji wa

run

ko

we

if

je

st poka

zany pon

iżej :

/

/

doł

ączeni

e

plik

u na

główk

oweg

o

/

/

zawie

rajac

ego

d

efini

cj

e

rej

estrow

/

/

wewn

etrzny

ch pro

cesora

#

inclu

de

<805

1.h>

/

/

głó

wna fu

n

k

cja

progra

mu

v

oid

ma

in(v

oid)

{

/

/

tla

nieskoń

czona

wh

ile(

1)

{

/

/

jeś

li

P3

.0

je

st

w

stanie

n

iskim

i

f(P3_

0

==

0)

/

/

to

ustaw

na

P0.0

stan

niski

P

0_0

=

0;

/

/

jes

li

P3

.1

je

st

w

stanie

n

iskim

i

f(P3_

1

==

0)

/

/

to

ustaw

na

P0.0

stan

wysok

i

P

0_0

=

1;

}

}

Za

pis P3

_0 odpow

ia

d

a

z

apisowi

P3.0,

cz

yli

określa

pi

n

0 po

rtu

P3.

Pr

zy

jr

z

yjm

y

sie te

raz

dokładn

iej i

ns

tru

kcji

if

:

i

f(P3_

0

==

0)

W

nawi

asac

h

o

k

rąg

ł

ych

po

s

ło

wie

if u

mieszc

z

on

o

waru

ne

k .

Wa

ru

nki

em

mus

i

b

y

ć

w

yrażen

ie zw

racające

wa

rtość

log

iczną

,

c

z

yli

pra

wd

a

lub

fa

łsz .

W

nas

zy

m

pr

z

y

k

ł

adzi

e

dokonujem

y

sp

rawdze

nia

,

czy

w

ypro

wadzenie

P3

.0

je

st w

sta

nie

n

isk

im.

Jeśli

tak

,

to

ozn

acza

t

o, że

nac

iśn

ięty

zost

pr

zy

cisk podłą

cz

o

ny

do

tego

wy

prow

adzeni

a.

Należy

podjąć

wte

dy

od

powi

edn

i

e

dzi

ała

n

ie,

cz

yli us

tawi

ć wy

prow

adzen

ie P0

.0

w

sta

n

nis

ki.

Początk

ując

ych

adeptó

w

prog

ra

mowani

a

w

jezy

ku

C

może za

dzi

w

i

ć

zna

k

"

==",

c

zyli opera

tor

porównan

ia

.

Jest

o

n i

nny

ni

ż

w

jęz

ykach

Ba

s

i

c l

u

b

Pascal

i

z

początk

u ba

rdzo ł

atwo

s

myli

z

operato

rem

pr

zypi

s

an

ia

"

=".

I

nst

ruk

cja if m

oże

tak

że

w

yg

lądać n

as

tępująco:

i

f(warune

k)

i

nstrukcja

1;

e

lse

i

nstrukcja

2;

S

ł

owo

els

e (w

pr

zeciwny

m p

rzypad

k

u

) um

ieszczone

prz

ed

ins

tr

ukcj

a

2

mówi, ż

e

ins

t

ruk

cja2 zost

ani

e wyk

onana

tylko

wted

y,

gdy

warun

ek

in

st

ruk

cji

if będzie

ni

espeł

niony, czyli

będ

z

ie

wartości

fals

e.

W sytuac

ji,

gdy

w

p

rzypadk

u spełn

ien

ia

dan

ego

waru

nk

u

w

yk

onanych m

a

b

k

ilka

in

str

ukcj

i,

to

nal

eży

bl

ok ty

c

h

in

st

ruk

cji ująć w

n

awia

s

y

k

lam

rowe

{}

:

background image

i

f(warune

k)

{

i

nstrukcja

1;

i

nstrukcja

2;

i

nstrukcja

3;

}

Instruck

a it

er

acyj

na for

Za

p

oz

na

my

się

tera

z

z

kolejną

n

iezwy

kle

u

ż

yteczna

ins

tr

ukcją

- z

ins

tr

ukcją

for.

Służy

on

a

do

rea

lizowan

ia

wszelkiego

r

odzaju

pętl

i.

Ogól

na

postać i

ns

tru

kcji

f

or wy

gląda

na

stę

p

u

jac

o

:

f

or(inicj

ali

zac

ja

zmie

nnej

l

iczn

ikowe

j;

warune

k; mo

dyf

ikac

ja

z

minnej

l

iczni

kowe

j)

i

nicj

ali

zacja

zmi

en

nej

liczn

ikowej

- jest to p

rzypisa

nie

do

zm

ien

nej

licz

ni

ko

wej

jej

wartości początk

o

we

j

wa

rune

k -

war

unek

,

który

ok

reśla

kied

y

pętla

m

a

b

wy

kon

y

wana

modyf

ikacja

zm

ien

nej

licz

nikowe

j

-

odp

owi

ednie

zmody

fiko

wanie z

mie

nn

ej l

i

c

zn

ikowe

j

(i

nk

re

men

ta

c

j

a,

dek

remen

tacja

lub cokol

wie

k i

nn

ego)

W

przykła

do

wy

m

p

rogr

am

ie

w

y

korz

ys

t

amy

pętlę for do wy

genero

wani

a

pewneg

o opóźnie

ni

a.

F

unkcja

ge

neruj

ąca

op

óźnie

ni

e (a

racz

ej

prz

erwę

w

wy

kon

y

waniu

prog

ra

mu

)

j

est ba

rdzo

przydat

na

pr

z

y wsp

ółp

rac

y

m

ikr

okont

roler

a

z

wolniejsz

ymi u

kład

ami

pery

fery

jn

ymi,

gdzi

e

tr

zeba

czekać n

p.

na

zako

ńczen

ie po

miar

u,

itp

.

W

nas

zym

prog

ra

mie

wy

ko

rzy

sta

m

y

fu

nkcj

ę opóźnia

jącą

do

g

e

nerowan

ia

p

rostego

efektu

świ

etl

nego

na

dioda

ch

L

ED.

K

od p

rogr

am

u

pr

zedst

awion

y

jest pon

iżej :

/

/

definicja

funkcji opóźni

ającej

void

czekaj(un

sign

ed

cha

r

x

)

{

/

/

dekla

racj

a dwó

ch

zmi

en

nych pomocnic

z

ych

unsign

ed c

har a,

b;

/

/

pot

rójnie

za

gnieżdzona

pęt

la

for

/

/

ta

tla

zost

anie

wy

konana

x-razy

f

or( ;

x

> 0

; x-

-)

/

/

ta

10

razy

f

or(a =

0

;

a

<

10;

++a)

/

/

a

ta

100

razy

f

or(b =

0

;

b

<

25;

++b);

}

/

/

głó

wna fu

n

k

cja

progra

mu

v

oid

ma

in(v

oid)

{

/

/

pęt

la

ni

eskończona

wh

ile(

1)

{

/

/

zapal

o

dpowie

dnią

kom

bin

ace

dio

d

LED

P

0

=

0x55;

/

/

odcz

ekaj

pe

wie

n o

kres

czasu

c

zekaj

(250)

;

/

/

zapal

i

n

n

ą

ko

mbina

cję

d

iod

LED

P

0

=

0xAA;

/

/

odcz

ekaj

pe

wie

n o

kres

czasu

c

zekaj

(250)

;

}

}

Po

ra

z

pierwszy

stw

orzyliśmy

własną

f

u

nkcję.

Zgodnie

z

t

ym

, co

n

api

sa

łęm

w

pierwszej

części ku

rsu

,

funkcja

czek

aj

nie

zwr

aca

zad

nej

wartości (void)

i

w

ym

ag

a jednego

par

am

et

ru

t

ypu

un

sig

ned

ch

ar

(lic

zba 8-

bit

owa

b

ez

z

na

ku)

.

Pa

ra

met

rem

tym będzie

ża

da

na

pr

zez

n

as

ugość

opóźni

eni

a

(mn

iej-więce

j

w

mil

iseku

nda

ch)

.

P

rzyjrz

yjm

y

sie pi

erwszej

pętl

i

f

or

:

background image

f

or( ;

x

> 0

; x-

-)

B

rakuje tut

aj

częś

ci i

nic

jali

zacji

zmi

en

nej

licz

nikowej

, pon

ieważ t

ą

zmi

en

jest

pa

ram

et

r

p

rze

kazy

wany

do

fun

kcji. G

d

yb

y

śm

y

w

t

ym m

iejsc

y

z

ai

nicj

ali

zo

wal

i z

mie

nn

ą

x,

to p

rze

kazy

wany

p

ara

met

r

zostałby

z

am

aza

ny.

W

tli

for

może br

ako

wać

do

wolnego

elemen

tu

-

może n

awe

t

pęt

la

f

or

w

ygl

ą

d

a

ć

na

stęp

u

jąco

:

f

or( ;

; ;

)

W

taki

m

p

rzypadku

pętl

a

ta

będzie

w

yk

ony

wana bez

końca

.

N

asza

funkcja

op

óźn

iaj

ąca sk

łada

s

z

tr

zech

zag

nie

żdzo

ny

ch

pętli

for.

Ww

yniku

tego

łąc

zny

czas

wy

kon

y

wania

tyc

h

pętli

j

est i

l

oc

z

ynem powt

ór

zeń

każ

dej

pętli

.

Dokłąd

n

y cz

a

s

opóźnie

nia

tr

ud

no

je

st ok

reślić,

po

nieważ ze

wzgledu n

a

r

ózne

t

e

chni

ki

opty

mali

zacji

kodu

pr

zez

kom

pila

tor

n

ie

j

est

zna

ny

dok

ł

ądny czas

wy

kon

y

wania

jednej

pętli

.

Możn

a

co

pr

awda

odcz

ytać

z

pliku

*.as

m

gene

ro

wan

eg

o p

rzez

kompil

ator

jakie

i

ns

tru

kcje

zostały

uzyte

do

rea

liza

cji tych pęt

li

i

określić dok

ładny

czas

ich

wy

konan

ia,

ale

ni

e m

amy

gwara

ncji

,

że

po

zm

ia

nie

bądź

w

a

run

ku

pętl

i,

bad

ź war

tośc

i

po

c

z

ą

tko

wy

ch

oraz

ko

ń

cow

yc

h

kompi

lato

r

nie

z

astosuje

in

n

ego

kodu

. T

ak

wię

c

gene

rowanie

op

óźni

z

a

pomoc

ą

pętli

jest

pr

zydatne

tylko

p

rzy

generown

iu

przyblizony

ch

opóźni

eń.

Do

od

mierz

an

ia

dokład

nych odcink

ó

w

c

z

asu n

al

eży

z

astoso

wać

we

wnętr

zne

t

ime

r

y m

ikro

kontr

oler

a.

Programowa

ni

e mik

rokontrolerów 80

51 w

jez

yku

C

-

czę

ść

3

Instrukc

ja sw

itch

i

prep

rocesor.

W

s

ytuacji, gdy

c

h

c

em

y

sp

rawdz

jedną

z

mie

nn

ą

na

okol

icz

ność

r

óżnych

je

j

wartości,

za

mia

st

u

ż

ycia

r

ozbudwanego

bl

oku i

nst

ru

kcji i

f

-else

w

yg

odniej

j

est z

astoso

wać

i

nst

ru

kcję

switch

.

Ogóln

a

pos

t

ac

in

str

ukc

ji

switch

wy

gląda

nas

tępująco

:

sw

itch

(zmie

nna){

c

ase

jaka

sWartosc

1: in

strukcja

; br

eak;

c

ase

jaka

sWartosc

2: in

strukcja

; br

eak;

.

.

.

c

ase

jaka

sWartoscn:

instruk

cja;

bre

ak;

d

efault

: i

nstrukcja

; br

eak;

}

z

mie

n

na

może b

yc

dowo

lnym

w

yrażen

iem

bądź

zm

ien

,

pod

waruk

iem

że wa

rtość

tej z

mie

nne

j l

ub

wyrażeni

a

jest

typu

całkowit

ego. Nas

z p

rzykładow

y

p

rogr

am

nie

ch

re

ali

zuje n

as

tępującą

f

u

nkcję

:

po

na

cis

nięci

u p

rzycisk

u

z

apa

l

pr

zeciwną

d

iodę

LED

(tz

n

"od

dru

giej st

rony"). P

rzyjrz

yjm

y

sie kodo

wi

na

szego p

rogr

amu

:

/

/

doł

ączeni

e

plik

u na

główk

oweg

o

/

/

zawie

rajac

ego

d

efini

cj

e

rej

estrow

/

/

wewn

etrzny

ch pro

cesora

#

inclu

de

<805

1.h>

/

/

zdefi

niowan

ie

al

terna

tywn

ej

nazwy

portu

P2

#

defin

e

klawi

atur

a

P2

/

/

zdefi

niowan

ie

al

terna

tywn

ej

nazwy

portu

P0

#

defin

e

diod

y

P0

/

/

głó

wna fu

n

k

cja

progra

mu

v

oid

ma

in(v

oid)

{

/

/

pęt

la

ni

eskończona

wh

ile(

1)

{

/

/

zgaszeni

e d

iod

LED

background image

d

iody

=

0xFF;

/

/

w

zależnos

ci

od w

ciś

nięt

ego

przyci

sku

/

/

zapal

o

dpowie

dnią

dio

LED

sw

itch

(kla

wiatur

a){

c

ase

254

:

diod

y

= 1

27;

break;

c

ase

253

:

diod

y

= 1

91;

break;

c

ase

251

:

diod

y

= 2

23;

break;

J

ak z

apewne z

auważył

eś, pojaw

a si

ę

nowa

d

y

re

k

t

y

wa

prep

roce

sora

-

#define -

jak

na

zwa

ws

k

azuje

s

łuży

ona

do defin

io

wan

ia

.

W r

zeczy

wist

ości

m

a

ona

dwoja

kie z

astoso

wani

e. Po

pierwsze sł

uży

do

pros

teg

o

pr

zypi

s

an

ia

do ci

ągu

zna

ków

bądź

stałęj wart

ci

liczbo

wej

l

ub,

jak

w

n

as

z

ym p

rzypadk

u,

do

określeni

a

"w

yg

odniejsze

j"

n

azwy

jakiejś

zm

ien

nej

.

P

o d

rugi

e do definiowan

ia

sy

mbo

li ko

mpilacji

waru

nkowe

j.

Z d

rug

im

z

aga

dn

ien

iem

spotka

m

y

się w

dals

zej

częś

ci k

ursu

,

więc

ter

az

nie

z

apr

ząt

aj

my

n

im

so

bie

u

wag

i.

Tak

w

ięc

z

a

pomocą

dyrekty

w

y

#define p

rzypisal

iśmy

do n

ap

isu

klawi

atur

a

nap

is

P2.

W

ty

m m

iejscu

n

al

eży

wy

ja

śnić

c

o

to ta

kiego

jest

pr

eprocesor.

Tak

więc

s

ł

ow

o

"p

rep

roe

sor"

j

est połąc

zeniem

słów

"p

re"

- p

rze

d o

raz

"p

roc

esor" -

w

tym

p

rzypadk

u kompil

ato

r.

T

ak

więc

pr

eprocesor

je

s

t

prog

ram

em

u

ruc

ha

mia

nym

pr

zed

ur

ucho

mien

iem

właściw

eg

o

komp

ila

tora

.

P

reproces

or

służy

do wstępnej

o

bróbk

i

plik

u

źró

dło

weg

o.

Gdy

pr

eproces

or

pr

zegl

ąda

p

lik

ź

ródłow

y

i

n

at

ra

fi

n

a

c

i

ąg

zn

aków

zdefiniowany

p

rz

ez

d

yrekty

we

#

de

fi

ne,

t

o

zas

tąpi

ten

ci

ąg,

cią

giem

do

nie

g

o

p

rzypisa

n

y

m. D

zięki

temu

mozemy

z

ami

est n

iewiele

zn

acz

ący

ch

naz

w por

tu

uzy

wać

w

progr

am

ie

jasnych i

jednoz

nac

zni

e

mów

iący

ch o

ich

pr

zezn

ac

z

e

ni

u

na

zw z

mie

nnyc

h i

st

ały

ch

. Po

na

da

ni

u

portom

na

szego

m

ikr

okont

roler

a

wy

go

dny

ch i

p

rzej

rzyst

ych

n

az

w n

adc

hodzi

c

zas n

a

właś

ciwy

prog

ram

.

I z

nowu

dzi

e

on

wy

kon

y

wan

y

w

pętli

n

ies

k

ońc

zonej

while(1)

.

Na

po

cz

ątku

tej

pętli

p

rzypiszemy

do

port

u

diod

y

li

czbę

0

x

F

F

czyli

255

.

Sp

owo

duj

e

to

w

yga

s

z

en

ie diod

po

zw

olni

en

iu

pr

zy

cisku,

a

t

akże

w

sytuac

ji gdy

n

aci

śni

emy

więc

ej

n

jeden

pr

z

ycisk.

Następn

ie

po

jawia si

ę

in

str

ucka

s

witch

.

Jako

z

mien

n

ą

tej

ins

tr

ukcji

w

yk

orz

ysatmy

na

sz

ą

k

lawiat

urę

.

Ter

az

n

ale

ży

sp

rawdz

pr

z

ypa

de

k

nac

iśn

ięci

a k

ażdego

z

pr

zyci

sków

o

so

bno. Pon

i

eważ

n

aciś

nięcie

p

rzycisku

je

st

s

ygna

lizowane

w

ym

uszenie

m

na

lin

ii

,

do

której jest

podłączony

st

an

u

ni

ski

ego,

to po

na

ciś

nięci

u

p

rzycisku

S1

klawiat

ur

a

p

rzyjmie

wartość

1111

1110

bina

rn

ie

,

czyli

254

dz

iesiętn

ie.

Jeżeli

nac

iśn

ięcie tego

p

rzycisku

zostan

ie

stwierd

zone,

to

na

ley

z

apa

lić

diodę

D8

- p

rze

z

przypisa

ni

e do port

u

diody

li

czb

y

01

111111

dwó

jko

w

o,

cz

yli 12

7 d

ziesiętn

ie.

Po

w

yk

ona

niu

z

ałożonego za

da

ni

a

n

al

eży

opuścić

isn

tr

ukcję

sw

i

t

c

h

za

pomocą

s

ł

owa

kluczow

ego

break

. W

podo

bny

spo

b

sp

rawdz

amy

pozostałe

siedem pr

zypadkó

w.

W

po

wy

ższ

ym

p

rzykład

zie n

iezbyt

elega

ncko

w

ygląda z

arówno

sprawd

zan

ie

który

k

lawisz

został

na

ciś

nię

t

y, jak

i

z

apa

la

ni

e

odp

owi

edn

iej

diod

y

LED.

Podczas p

isan

ia

pro

gra

mu

nie

n

ależy

podawać

s

tały

c

h

lic

zb

ow

y

ch

(an

i

ż

adnyc

h

i

nnych)

bezpośrednio

, tylko

n

ale

zy

wcze

ś

nie

j z

de

f

i

on

io

wać

stałą

o

n

az

wie jas

n

o

mówi

ącej

o

jej

p

rze

zn

acze

niu

.

Pozatym,

w

syt

uacji gdy

będziemy

musie

li

zmi

en

ić st

ałą

(

oczy

wiś

cie

n

a

e

tapie p

isa

nia

p

rogr

amu

,

a

n

ie

w

czasie jego

d

zia

ła

ni

a)

to

w

ba

rdzie

j

rozbudo

wa

n

ych

p

rogra

mac

h

zmi

enie

ni

e tej li

czb

y

w

miescach

w

k

tóry

ch

na

lezy

j

ą

z

mien

dzie

bardzo

kłopotiw

e. Tym bar

dzie

j, że

nie

będziemy

mogl

i u

ż

m

ach

an

iz

mu

"

zn

ajdż

/za

mie

ń"

,

ponieważ

ła

t

wo

zm

ien

imy

nie

t

e

n

z

na

k

co

t

rz

e

ba

.

Bard

ziej elekga

ncka

(ocz

yw

iści

e

ni

e

n

ajba

rdz

iej

-

ta

będzie

za

chwile) wersja

pro

gra

mu

jest p

rzeds

tawiona

pon

iżej

:

/

/ d

o

łącze

n

ie

pl

i

k

u

n

ag

łówkowe

go

/

/ zawi

era

j

ace

go

de

fi

n

i

c

j

e

rej

estr

ow

/

/ wewnetrzn

y

ch

pr

ocesor

a

#i

nc

l

ude

<8051.h>

/

/ zdef

i

n

i

ow

an

i

e

altern

a

t

yw

ne

j

naz

wy

po

rtu

P2

#def

i

ne

k

law

ia

tur

a

P2

/

/ zdef

i

n

i

ow

an

i

e

altern

a

t

yw

ne

j

naz

wy

po

rtu

P0

#def

i

ne

d

iody

P0

/

/

#def

i

ne

poz

1 254

#def

i

ne

poz

2 253

#def

i

ne

poz

3 251

#def

i

ne

poz

4 247

#def

i

ne

poz

5 239

#def

i

ne

poz

6 223

#def

i

ne

poz

7 191

background image

#def

i

ne

poz

8 127

/

/ głów

na

fun

kc

ja

pr

ogramu

void

m

ai

n

(v

oi

d)

{

/

/ pę

t

la

ni

es

kończo

na

whi

le

(1)

{

/

/ zgasze

n

ie

diod

LED

diod

y

= 0xF

F;

/

/ w zale

żno

sc

i

od

wci

śn

i

ętego przy

c

isk

u

/

/ zapal

od

powied

ni

ą

diodę

LED

swit

ch(k

law

i

atura){

case

poz

1 :

d

i

o

dy

=

poz8; break

;

case

poz

2 :

d

i

o

dy

=

poz7; break

;

case

poz

3 :

d

i

o

dy

=

poz6; break

;

case

poz

4 :

d

i

o

dy

=

poz5; break

;

case

poz

5 :

d

i

o

dy

=

poz4; break

;

case

poz

6 :

d

i

o

dy

=

poz3; break

;

case

poz

7 :

d

i

o

dy

=

poz2; break

;

case

poz

8 :

d

i

o

dy

=

poz1; break

;

}}}

J

ako

"na

zwy

jas

no

mówiąc

e o

pr

zen

acze

niu

stałej" wy

brałem pozx

, g

dzie

x

=

1..

8.

Ja

k ł

atwo

moż

na

sie

domys

leć

"poz"

to

skrót

od

"pozy

cja

". Po

nie

w

aż sta

łe l

iczbo

we

odpowiadając

e p

rzycis

kom,

jaki

diod

m LED

sa

i

den

t

yczne

nie

z

astoso

wałem

roz

różn

ie

ni

a

czy

chodz

i

o

pozyc

p

rzycisku

cz

y

diod

y

L

E

D

. Jed

nak

ju

ż

na

pr

awde

elega

ncko

będzie, g

d

y

uży

jem

y

odp

owi

edn

ich

st

ały

ch

dla

d

iod

i

pr

z

ycisków

oso

bno.

#

inclu

de

<805

1.h>

/

/

zdefi

niowan

ie

al

terna

tywn

ej

nazwy

portu

P2

#

defin

e

klawi

atur

a

P2

/

/

zdefi

niowan

ie

al

terna

tywn

ej

nazwy

portu

P0

#

defin

e

diod

y

P0

/

/

#

defin

e

S1 25

4

#

defin

e

S2 25

3

#

defin

e

S3 25

1

#

defin

e

S4 24

7

#

defin

e

S5 23

9

#

defin

e

S6 22

3

#

defin

e

S7 19

1

#

defin

e

S8 12

7

/

/

#

defin

e

D1 2

54

#

defin

e

D2 2

53

#

defin

e

D3 2

51

#

defin

e

D4 2

47

#

defin

e

D5 2

39

#

defin

e

D6 2

23

#

defin

e

D7 1

91

#

defin

e

D8 1

27

/

/

głó

wna fu

n

k

cja

progra

mu

v

oid

ma

in(v

oid)

{

/

/

pęt

la

ni

eskończona

background image

wh

ile(

1)

{

/

/

zgaszeni

e d

iod

LED

d

iody

=

0xFF;

/

/

w

zależnos

ci

od w

ciś

nięt

ego

przyci

sku

/

/

zapal

o

dpowie

dnią

dio

LED

sw

itch

(kla

wiatur

a){

c

ase

S1 :

di

ody

=

D8;

brea

k;

c

ase

S2 :

di

ody

=

D7;

brea

k;

c

ase

S3 :

di

ody

=

D6;

brea

k;

c

ase

S4 :

di

ody

=

D5;

brea

k;

c

ase

S5 :

di

ody

=

D4;

brea

k;

c

ase

S6 :

di

ody

=

D3;

brea

k;

c

ase

S7 :

di

ody

=

D2;

brea

k;

c

ase

S8 :

di

ody

=

D1;

brea

k;

}

}}

Te

ra

z

n

asz

prog

ram

w

ygląda ju

z

bard

zo p

rzej

rzyś

cie. Ja

w

ybr

ałem

na

zwy

ide

nty

cz

n

e

z

nu

mer

am

i

e

l

e

m

entów

n

a

mojej

płytc

e

ur

uchom

ien

io

wej

, Ty

możesz je

do

wolnie z

mie

nić

.

Gdy

b

y

porównać

kod wy

nikow

y

po

wy

ższ

yc

h

t

rzec

h

pr

ogr

amów

to

dla

k

ażde

g

o z

n

ich

by

łb

y

iden

ty

czny. Dz

iej

e się t

ak,

że

z

pu

nk

tu

widzen

ia

komp

ila

t

o

ra

t

e

t

rzy p

rogr

amy

iden

t

yczne,

pon

ieważ w

"miejscach

str

ateg

icz

ych" wy

st

ępują

te

same

dane

.

Jest

to kolejny

m

obj

awe

m p

rep

roc

esora

- kod ź

ródł

o

w

y

p

rog

ram

u

p

rzed

kompi

lacją

został

doprowadzony

do

postaci z

rozu

mia

łej

p

rze

z

kompila

tor

(

gd

yb

y

pomi

nąć

p

roc

es

pr

zetwa

rza

ni

a

plik

u

pr

zez

p

reproces

or

, to

kompil

ator

zg

łosiłby

m

nóstwo

błedó

w).

Programowa

ni

e mik

rokontrolerów 80

51 w

jęz

yku

C

-

czę

ść

4

T

ablic

e

danych

.

T

ablica

jest

miejscem

prz

echow

y

wania

da

n

ych

o

tym

samym

typi

e.

Tabl

icę

d

e

k

lar

ujemy

podając

ty

p elemen

w

w

niej

pr

zechow

yw

any

ch,

j

ej

na

zwę

oraz

roz

mia

r.

Rozmiar

podaje

się w

nawi

asach

k

wad

ra

to

wy

ch

[].

El

emen

t

y

t

ablicy

są p

rzec

how

y

wane

w

kol

ejno n

as

tępujący

ch

po

so

bie

komó

rkach

pam

ięci.

Pr

z

ykł

ado

wa

dekla

racja

t

ablicy

może

w

yglądać

na

stęp

ując

o

:

i

nt

tabl

ica[

5];

Pow

y

ższ

y

za

pis

dekla

ruje

pięci

oelementową

tabl

icę

danych

t

ypu i

nt.

Dostęp

do

posz

c

z

egól

n

ych ele

m

e

ntów

t

ablicy

uzy

skujem

y

pr

zez

poda

nie

na

zwy

tablicy,

oraz

n

ume

ru

elementu

t

ablicy,

do które

g

o dostęp c

h

c

e

my

u

z

yskać. P

rzykładow

o,

zapi

san

ie

do

dr

ugi

ego

elem

e

ntu

t

ablicy

jakiejś

wa

rtości

może wy

glądac

n

astep

ując

o

:

t

abli

ca[1

]

= 0

;

W

t

ym m

iejsc

u waż

na

u

wag

a :

eleme

nty

ta

blicy

s

a n

ume

rowane

o

d 0

a

n

ie

od

1.

T

ak

więc

pie

rws

zy

eleme

nt

ma

n

ume

r

0,

dr

ugi

1 i

td.

Aby

w

miejscu

dekla

racji

tabl

ic

y

od r

azu

um

ieś

c

i

ć

w

ni

ej jakies d

ane

n

ale

ży

z

astoso

wać

po

niżs

z

y

zap

is

:

i

nt

tabl

ica[

5]

=

{5,

2,

31,

5

5,

40};

Gdy

już

ma

m

y jako t

akie

po

jęci

e n

a

te

mat

t

ablic p

rzyjrzy

jmy

si

ę

pierwszemu

pr

z

ykł

ado

wemu

pro

gra

mowi

w

tej

części ku

rsu:

}

v

oid

ma

in(v

oid)

{

wh

ile(

1)

{

P

0

=

tabl

ica[

0];

c

zekaj

(250)

;

background image

P

0

=

tabl

ica[

1];

c

zekaj

(250)

;

P

0

=

tabl

ica[

2];

c

zekaj

(250)

;

P

0

=

tabl

ica[

3];

c

zekaj

(250)

;

}

}

P

rogra

m

t

en

m

a

za

z

ada

ni

e

gener

e

ować

p

rostą

sekw

encję

(p

rzec

h

owy

w

aną

właśni

e w

tablicy)

odpo

wiednio

z

apa

la

ny

c

h d

iod LED,

podłąc

z

o

n

ychdo

portu

P0

.

P

on

iew

poszczególne eleme

nty

tej

tabl

ic

y

n

ie

będ

ą

się

n

igdy

z

mie

ni

(są

to

dan

e

stałe)

, m

ożemy

ją um

ieścić

w

pa

mięci

prog

ra

mu

.

Ok

reśla

to słow

o

cod

e

pr

zed

n

azwą

t

ablicy

. Po

dekla

racji

tabl

ic

y

pojawia

się z

naj

oma

już n

am

fun

k

cja

opó

ź

niaj

ą

c

a c

z

e

kaj, sł

użąca

do

gene

rowania

opóźni

w

w

yk

onan

iu

pr

ogr

amu

.

P

rogra

m

g

łó

wny

opiera

s

na

w

ys

y

łaniu

n

a

po

rt,

d

o k

tórego

podłączone

sa

d

iod

y

LED,

kolejny

ch

elem

e

ntów

t

ablic

y

z

awieraj

ąc

ej

da

ne

ster

u

j

ac

e diod

ami

.

Gd

y

tablic

a skł

ada

się

z

niewielu

eleme

ntów,

to

po

wy

ższ

y

prog

ra

m

jeszc

z

e

może

zostać u

zn

any

za

popr

awny,

ale

w

syt

uacji gdy

t

ablica

dz

ie

się

sk

łada

ć

z

ki

lkun

as

tu,

lub naw

et ki

lkudz

iesięciu ele

mentów,

to

pr

zepi

s

yw

an

i

e

elementów

z

tablicy

do

portu

n

al

eży

już

zr

eal

izować

w

pętli

.

Pr

zykłado

wa

re

ali

zacja

z

użyci

em

pętli

for p

rzeds

tawiona

jest

poni

żej

:

#

inclu

de

<805

1.h>

c

har co

de

ta

bli

ca[4]

=

{

0x55,

0xAA,

0x0F,

0xF0};

/

/

def

inic

ja

funkcj

i

opóźni

ające

j

v

oid

c

zekaj(

unsigned

char

x)

{

/

/

dekl

arac

ja

dwóc

h z

mienn

ych

pomo

cnic

zyc

h

unsign

ed c

har a,

b;

/

/

pot

rójnie

za

gnieżdzona

pęt

la

for

/

/

ta

tla

zost

anie

wy

konana

x-razy

f

or( ;

x

> 0

; x-

-)

/

/

ta

10

razy

f

or(a =

0

;

a

<

10;

++a)

/

/

a

ta

100

razy

f

or(b =

0

;

b

<

25;

++b);

}

v

oid

ma

in(v

oid)

{

c

har i;

wh

ile(

1)

{

f

or(i

= 0

; i

<

4;

i++

)

{

P

0

=

tabl

ica[

i];

c

zekaj

(250)

;

}

}}

Licz

ni

k

pętli

for jest

je

d

nocz

eśn

ie i

nde

ksem eleme

ntu

w

tablicy.

Ws

ka

źnik

i

Wska

źni

ki

bardzo

ważnym elemen

tem

języ

ka

C.

Ogóln

ie

m

ówiąc wskaź

nik

jest z

mie

nn

ą

prz

echow

ująca

a

dre

s

in

ne

j z

mie

nne

j.

Wskaźn

iki

dekl

aruj

em

y

w

na

stępu

jac

y

spo

sób

:

t

yp

*

nazwa;

Aby

uzyska

c

d

ostęp do z

mie

nn

ej wskazy

wane

j p

rzez

w

skaź

ni

k

na

lezy

uży

ć

oper

atora

w

yłu

skan

ia

*,

na

pr

zykład

po

niżs

za

in

st

ri

kcja

:

background image

*

wskaznik

= 0

;

spow

oduj

e

z

api

san

ie

do

zm

ien

nej

(a

ra

cezj

do

komórki

pa

mi

ec

i

) wskaz

ywanej

p

rze

z

w

skaz

nik

liczby

0.

Można

sobi

e

za

dać

p

yta

nie

jaki

je

st cel

sto

sow

an

ia

ws

ka

źni

ków,

sk

o

ro

w

ska

zują on

a

na

in

n

ą

zmi

en

,

jakb

y

ni

e m

ożn

a

by

ło

się posługiwać

tylko

z

mie

nn

ą

.

Wsk

aźn

iki

odgry

wają

dużą

r

olę w

pr

zeka

z

ywaniu

do

funkcji p

ar

ame

trów,

a

ściślej

mówiąc

poz

wal

ają n

a

mody

fiko

wanie

par

ame

tr

u

p

rzek

aza

nego

do

funkcji.

Jedna

k

na

ra

zie

u

ż

yje

my

wskaźi

w

do i

nn

ego

ce

l

u, a

m

ia

nowicie

do

do

stępu do poz

na

nej wcześniej

tabli

c

y

z

da

nymi.

P

rzyjrzy

jm

y

się

po

niżs

zemu

p

rogra

mowi

:

}

v

oid

ma

in(v

oid)

{

wh

ile(

1)

{

ws

kaznik =

ta

bli

ca;

P

0

=

*wskaznik+

+;

c

zekaj

(250)

;

P

0

=

*wskaznik+

+;

c

zekaj

(250)

;

P

0

=

*wskaznik+

+;

c

zekaj

(250)

;

P

0

=

*wskaznik+

+;

c

zekaj

(250)

;

}

}

Reali

zuje

on

dokładn

ie

tak

ą

sam

ą

funkcję

jak pi

erwsz

y

p

rogr

am

z

tej

częśc

i

kurs

u.

Pie

rw

szą

z

mi

an

ą

w

stosunk

u

do popr

zedn

iego

pr

ogr

amu

je

st dek

lar

acja

ws

ka

źni

ka

:

c

har co

de

*

wskazni

k;

Zgodn

ie

z

tym,

co

pisa

ł

e

m

o

de

k

lar

o

wan

iu

wskaźn

ik

a

wskazuje

o

n n

a

t

yp

cha

r

um

ieszczony

w

p

ami

ęci

p

rogr

am

u

cod

e.

J

ed

nak

sa

mo

zade

klar

o

wa

ni

e

wskaźn

ika

nie

pozwol

a

na

m

na

jeg

o

uży

wanie.

Wtym

momecie

n

as

z

ws

k

aźn

ik

n

ie

pr

zechowuj

e

żadn

ego ad

resu

,

a

zwłaszcza

ad

res

u

na

szej t

ablicy.

P

rze

d jeg

o

uży

ciem,

na

lezy

z

apis

ać do n

iego a

dres

tabl

ic

y.

Dok

onujemy

tego

w

poni

ższy

s

p

osó

b

:

ws

kaznik =

ta

bli

ca;

I

tu

pow

sta

nie

ma

łe z

am

iesza

nie

,

pon

ie

waż

tabl

ica r

ó

w

nież

je

st

w

skaź

nik

iem!

T

ak

więc

pow

sz

y

z

apis

p

rze

pisuje

do

j

ed

neg

o wskaź

nik

a

zawa

rtość

in

ne

go

wskaźn

ik

a.

Aby

w

ja

w

n

y

sposó

b

do

wskaźn

ik

a

pr

z

ypi

sac

a

dre

s

jakiejś

zm

ien

nej

na

leży

uży

ć

opera

tor

a

dresu

&,

tak

jak

pokaza

no

pon

iżej

:

ws

kaznik =

&

tabl

ic

a[0];

I

tu

z

nów

m

e za

mi

esza

nie,

ponieważ

chcem

y

do

w

skaź

nik

a

z

apisa

ć ad

res

pierwszego

elementu

tablicy

, do

k

tórego

do

stęp

uzy

skamy

p

rzez

p

oda

ni

e

w

nawi

asach

k

wad

ra

to

wy

ch

jed

o

nu

mer

u.

Gd

yb

y

śm

y

użyli

taki

eg

o

z

apis

u

:

ws

kaznik =

&

tabl

ic

a;

to ko

mpila

tor

z

głosi błą

d,

gdy

ż z

apis

te

n

oza

ncza

przypisa

nie

do

wsk

a

źn

ika

a

dres

u i

nn

ego

w

skaź

nik

a,

a

ni

e

a

dre

su da

nej

t

ypu

cha

r

.

W

ie

m,

że to

na

początku

jest

bardz

o

skompli

k

owane,

bo

wie

m

w

skaź

nik

i

n

ale

żą

do

n

ajt

rud

n

iejszy

ch

zag

adn

ień

w

zyku

C

i

bar

dzo często

spr

awiają

problem

y

po

cząt

kujac

ym

prog

ra

mis

tom.

background image

C

zęść

1

- S

terowanie

diodami

LED

W

przykła

dzie

tym

pozna

m

y sposó

b

st

ero

wan

ia

d

i

od

ami

LED

.

Zalecam

uży

cie

mik

rokont

role

ra

AT

89S825

2,

l

ub

in

ne

go

w

obudo

wi

e

40-końców

ko

we

j.

W

tej

s

ytuacji

do

stęp

n

ych jest 32

l

ini

e

I/O,

co

poz

woli

na

m

na

swo

bo

dne

pozn

awan

ie m

ik

rokon

trole

ra

,

bez

ma

rtwi

enia

się

o

brak

ujące

p

o

rty.

Aby

pr

zep

rowa

d

zić ćwiczenie n

al

eży

do por

tu

P0 n

as

zego

mik

rokon

tro

l

e

ra

podłączy

ć

8

diod

LED w

s

posób

poka

zany n

a

rysunk

u

.

A

by

ą

czyć

dowo

l

diodę

LED n

ale

ż

y

n

a

odpo

wiedni

m

w

y

prowa

dze

niu

por

tu

ustawić

s

tan

ni

ski

.

Pr

zyk

ład

1.1

.ASM

NAM

E P0

1_01_ASM_SRC

$

INCLU

DE (A

TMEL/REG82

52.INC

)

P

01_01_ASM S

EGMENT

COD

E

RSEG

P01_01_AS

M

C

L

R

P0.0

;

USTAWIENIE

WYPRO

WADZENI

A

P0.0

W STAN

NISKI

;

POWODUJ

E ZAŚWIECE

NIE

SIĘ

DIODY LED

D1

S

J

MP $

;

TLA NIE

SKOŃC

ZONA

E

ND

Pr

zyk

ład

1.1

.C

#

inc

lude <

ATME

L/REG8252.H>

sbit

LED1

=

0x80;

/

/

Deklar

acja

zm

ien

nej

o

nazw

ie

LED1

/

/

Znajd

ujac

ej

sie pod ad

resem

80h

/

/

Co

odpo

wiada

pinowi 0

port

u

0

void

ma

in

(void)

{

L

ED1 =

0;

/

/

ustawien

ie p

inu

P0.0

w

sta

n

n

iski

wh

ile(1);

//

petla

n

ieskon

cz

o

na

}

Pr

zyk

ład

1.1

.B

AS

Reset

P0.0

Do

:

Lo

op

:

En

d

Omówieni

e:

W

przykła

dzie

1.1

włączen

ie diody

LED

D1 n

ast

ępuje

p

rze

z

ustawien

ie n

a

wy

prow

adzen

iu

P0.0

sta

nu

ni

skiego.

-

W języ

ku

asemblera

jest to z

rea

lizowa

n

e

p

rzez

uży

cie

i

nst

ru

kcji

"CLR

P0.

0".

In

str

ukc

j

a

CLR

(an

g.

Clear

)

s

łuży

w

yłą

c

znie

do

zerowani

a

wsk

a

Ąnik

a

pr

zen

iesie

ni

a

lub

dow

olnego

bi

tu ad

resowanego

bezpośredni

o,

tzn

.

bit

u w

o

bszar

ze

pami

ęci RAM

adr

eso

wanym

bito

wo

lub p

rzest

rze

ni

rejestrów

SFR

dostępny

ch

bit

owo

(

o ad

resi

e

podz

ielnym p

rzez

8).

-

W języ

ku

C

najp

ierw t

rz

e

ba

z

adekla

rować

zmi

en

o

w

y

bran

e

j n

azwi

e

(

w poda

nym

pr

zykładz

ie "LED1

"

)

.

N

astępn

ie z

a

pomo

c

ą

zw

ykł

ej

i

nst

ru

kcji

przypisa

nia

do

zm

ien

nej

odpo

wiadającej

da

nemu

bitowi

przypisujemy

"0

".

-

W języ

ku

B

ASIC

do

zerowani

a

bitu

portu

s

łuży

in

st

ruk

cja "RESET

".

W

każdym z

języ

w

do

zre

ali

zowani

a

da

nego celu (

ustawienie

w

ypro

wa

d

z

e

nia

P0

.0

w

st

an

ni

ski)

u

ż

y

t

o

j

ednej

i

ns

tru

kcji

teg

o języ

ka.

Zo

baczy

my

ter

az

n

a

ile

ins

tr

ukcji

tłu

maczo

ne jest

to polecenie i

jak

dużo m

iejsc

a

w

background image

p

am

i

ę

c

i

z

a

j

muje

każdy

pro

gra

m.

Plik

i

w

yniko

we

prog

ra

mu

(

*.HEX) zosta

ł

y

zdi

asemblo

wane

przy

użyciu

p

rogr

am

u

D51.

Pr

zyk

ład

1.1

.ASM

.D51

;

;

D

51 V2.

6

8051

Disassembly

of

a

sm.

hex

;

1

0/11/2

003

16

:58

;

o

rg 0

;

c

lr

p0

.0

X0

002:

sjmp

X0002

;

e

nd

;

Pr

zyk

ład

1.1

.C.

D51

;

;

D

51 V2.

6

8051

Disassembly

of

c

.hex

;

1

0/11/2

003

16

:58

;

o

rg 0

;

lj

mp

X0003

;

X0

003:

mov

sp

,#8

c

lr

a

m

o

v

r0

,#0

f

f

h

X0

009:

mov

@

r

0,a

dj

nz

r

0,X

0009

m

o

v

p2,#

0f

f

h

lj

mp

X0012

;

X0

012:

clr

p0.0

X0

014:

sjmp

X0014

;

e

nd

;

Pr

zyk

ład

1.1

.B

AS.

D51

;

;

D

51 V2.

6

8051

Disassembly

of

ba

s

.

hex

;

1

0/11/2

003

16

:58

;

o

rg 0

;

lj

mp

X002e

;

r

eti

;

background image

o

rg 0b

h

;

r

eti

;

o

rg 1

3h

;

r

eti

;

o

rg 1b

h

;

r

eti

;

o

rg 2

3h

;

r

eti

;

o

rg 2b

h

;

r

eti

;

o

rg 2

eh

;

X0

02e: mov

r0

,#0ff

h

c

lr

a

X0

031:

mov

@

r

0,a

dj

nz

r

0,X

0031

m

o

v

sp,#

21h

m

o

v

20h

,#

0

c

lr

p0

.0

X0

03c: ljm

p

X003c

;

c

lr

ea

X0

041:

sjmp

X0041

;

e

nd

;

P

rro

gra

m

n

ap

isa

ny

w

asemblerze

po

zdia

semblo

wan

iu

skład

a

się

z

dokład

nie

tych sa

m

ych

ins

tr

ukcji,

jak

ie

zost

ały

użyte

w

kodzie Ą

ródło

wy

m.

N

ie

co

go

rzej

je

st

z

prog

ra

mem

n

api

sa

nym w

C.

P

i

e

rw

sz

ą i

nst

ru

kcją

je

st i

ns

tru

kcja "LJMP X00

03",

któ

ra

w

n

as

z

ym

przykła

dzie

po

wod

uje

"p

rzeskok" do n

ast

ępnej i

nst

r

ukcji

z

kolei, c

z

yli ta

ins

tr

uk

c

j

a

je

s

t

zbędna!

Wynika

z

te

g

o fak

t,

że komp

ila

t

o

r

ni

e

spr

a

wd

za

zak

resu

skoku i

wstawia t

ą

ins

tr

ukcję

zupe

łn

ie n

iepot

rz

e

bn

ie.

Jeżeli

już

m

usi

b

o

na

użyta

to lep

sz

ym

rozwią

za

nie

m

b

yło

b

y

uży

cie

d

wubajto

we

j

"AJMP"

lub "SJMP" z

ami

ast

t

rzybajt

owe

j

"LJM

P

"

.

Z kolejny

ch s

i

e

dmiu

i

nst

ruk

cji skł

ada

s

procedur

a

ini

cjali

zacji

mi

kroko

ntro

lera

.

I

nst

ruk

cja "MOV

SP, #

8" us

tawia

ws

k

a

ˇ

nik

s

to

su n

a

8.

Czt

ery

kol

e

jne i

ns

tr

ukcje:

c

lr

a

m

o

v

r0

,#0

f

f

h

X0

009:

mov

@r

0,a

dj

nz

r

0,X

0009

s

łużą

do wy

zero

wani

a

w

ewnętrz

nej pa

mię

c

i

RAM

mik

rokon

trol

era

,

któ

rej

zawar

tość

po włączen

iu

za

sila

n

ia

mo

że

b

ni

eokreślon

a.

Kolejna

in

st

ruk

cja "MOV

P2,#

0

FF

h"

po

wodu

je

us

tawienie

w

szy

stkich

w

ypro

wadzeń

po

rtu

P2

w

st

an

w

y

so

ki. List

in

g

pro

gra

mu

i

nic

ju

j

ą

cego

mik

rokont

role

r

zn

ajduje się w

kat

alog

iu kom

pila

tor

a

i

ba

rdz

iej

doci

ekl

i

wi

cz

ytelnicy

tego

kurs

u

mogą

się

z

ni

m

zapo

zn

ać.

Następ

nie

w

yst

ępu

je

ins

tr

ukcja

"LJM

P

X0

012".

I

tut

aj z

nowu

po

wod

uje

ona

prz

ejś

cie

do

nas

tęp

nej z

kolei i

ns

tru

kcji,

więc

jest

ni

epotr

zebna.

Petla

background image

n

ies

k

ońc

zona

jest

zre

al

izowana

pr

z

y u

ż

yciu

d

w

u

bajto

we

j

in

st

ru

kcji "SJMP X00

14",

czy

li

najodpow

iedn

i

e

j

szej

do tego celu.

P

rogra

m

n

ap

isa

ny

w

Bascomie

już wy

gląda

dużo gor

zej. N

a początk

u

w

y

stę

puje

i

nst

ru

kcja skoku do p

rocedury

i

nicj

ali

zującej

p

roces

or.

Po

tej

ins

tr

ukcji

nas

tępuje

kil

ka

i

nst

ru

kcji

p

owrotu z

p

roc

e

d

u

r

o

bsługi

prz

erwa

ń.

J

e

że

l

i

w

na

szym

pr

ogr

am

ie n

ie

wy

ko

rzys

tujem

y

pr

ze

rwań

,

to te

in

str

uk

c

je

spoko

jni

e

m

o

żna

b

y

b

yło

pomin

ąć.

Zaoszczędzil

ib

yśm

y

kilk

adz

iesią

t

ba

j

t

ów

pa

mięci

prog

ra

mu,

co

w

niek

tórych

pr

zypadkac

h

może

b

zbawien

ne.

P

roc

edur

a

i

nicja

lizuj

ąca

proces

or

j

est podobna do tej z

C

.

Po

p

rocedurze

ini

cjal

izującej

j

est

w

końcu

nas

za

i

ns

tru

kcja

po

wod

ująca

włączenie

diody

LED.

Pętla

nie

skończon

a

j

est

w

tym

pr

z

ypa

dku

zrea

li

zow

a

na

p

rzy

u

ż

yciu

tr

zyb

ajtow

ej

i

nst

ru

kcji "LJMP",

chociaż

dwub

ajtow

a

"SJMP"

w

z

upełności

b

y

w

ys

tarc

z

yła.

Znow

u

komp

ila

tor

n

ie

spr

awdza

z

akres

u skoku.

Następ

nie

w

ys

tępu

je

ins

tr

ukcja

bl

okująca p

rze

rwan

ia

,

pom

imo

n

iew

ykorz

yst

y

wania

uk

ładu

p

rze

rwań

w

p

rogr

am

ie.

Ta

os

t

atn

ia

isn

tr

ukcj

a t

rochę

mni

e

dziwi

, po

nieważ n

ie

zost

an

ie

ona

ni

gdy

wyk

onan

a!

Prog

ra

m

za

pętli

się

n

a

popr

zedn

iej

in

st

ruk

cji re

ali

zującej

pętlę n

iesko

ń

c

zoną

,

więc

dwie

ostatn

ie

in

st

ruk

cj

e w

kod

z

ie są

zupe

łni

e zbęd

n

e

. Z

no

wu ma

r

not

ra

wieni

e pa

mięci

w

p

rzypadk

u

BASCOMA.

J

ak widać

z

po

w

yżs

zego

porówna

nia

,

najwięce

j

n

iepot

rzebnych in

st

ru

kcji ge

ner

u

je Bascom. W

C

j

est o

wiele

le

piej

n

w

Basc

omie, a

le i

tak

dużo

gorzej n

w

a

sembl

e

rze.

Tylko

ten

jed

e

n p

rzykład

jest

w

sta

ni

e

u

zmysł

owi

ć

na

m,

jaka

jest

za

leta

p

rogr

amowan

ia

w

asemblerz

e

-

całkowita kon

tro

la

ro

zmi

ar

u

kodu

wyni

kow

ego.

Pon

ie

waż

w

p

akiecie RIDE

51

w

y

stę

puje

bar

dzo pożyt

eczna

mo

im

zda

ni

em

opcja

kompilowani

a

pro

gra

mu

pop

rzez

pro

gra

m

a

semblera

(

i

generowa

nia

jednocześnie

plik

u

*.SRC do ka

żdego pl

iku

*.C

)

w

na

st

ępnych

p

rzykład

ach

wy

ko

rzys

ta

m

y

funk

c

zam

ia

st

di

asemblo

wani

a

plik

u

*HEX

(chyb

a,

że za

jdzie

tak

a

potr

zeba).

Pr

zyk

ład

1.2

W

t

ym p

rzykład

zie

na

uczym

y

się wy

ko

rzy

sty

wa

ć

a

li

as

y

naz

w (

tzn

.

dzi

e

my

da

nem

u

pin

owi

port

u p

rzypisy

w

i

nn

ą

n

azwę i

w

p

rogra

mie

odw

oły

w

się

do

tego

pin

u

popr

zez

n

azw

ę

)

.

Pr

zyk

ład

1.2

.ASM

NAM

E P0

1_02_ASM_SRC

$

INCLU

DE (A

TMEL/REG82

52.INC

)

L

ED1 EQU P0.

0

P

01_02_ASM S

EGMENT

COD

E

RSEG

P01_02_AS

M

C

L

R

LED1

;

UST

AWIENI

E WYPROWA

DZENIA

P0.0

W S

TAN NISKI

;

POWODUJ

E ZAŚWIECE

NIE

SIĘ

DIODY LED

D1

S

J

MP $

;

TLA NIE

SKOŃC

ZONA

E

ND

Pr

zyk

ład

1.2

.C

Pon

ie

waż

w

C

al

ia

s n

ad

al

iśmy

już

w

pie

rw

s

z

ym

przykła

dzie

nie

ma

wersji

pr

zykładu

1.2

w

jęz

yku

C

.

Pr

zyk

ład

1.2

.B

AS

Led1 A

lias

P0.0

Reset

L

ed1

Do

:

Lo

op

:

En

d

Ze

względu n

a

t

o

, że

pr

zykład

1.2

n

ie

róż

ni

się pod względem

kodu

w

ynikow

eg

o

od p

rzykładu

1.1

nie

p

rze

prowadzono di

asemblacji i

a

na

liz

y

k

odu

w

yniko

we

go.

Przykał

d 1.

2

mi

n

a

c

elu

prz

edstawien

ie

wy

go

dni

e

jszego

posługiwa

nia

się

pin

am

i

.

Polecam te

n

spos

ób

odw

yw

ania

się do pi

nów

ze względu

na

ł

atwiejsz

e wprowadzan

ie

zm

ia

n

do

prog

ram

u.

W

yo

braˇmy

so

bie

s

ytac

ję,

gdy

w

prog

ra

mie

lic

zący

m

k

ilka

dzi

esiąt

,

lub n

awet k

ilka

set i

ns

tr

ukcji

od

woł

y

wali

śmy

się do pi

nów

b

e

z

pośredn

io

pr

zez

ic

h

na

zwę i

n

ag

le

m

usimy

zm

ien

pin

pełn

iący

da

funkcję. Za

mias

t

męcz

sie z

tymi

kilk

uset i

nst

ru

kcjami

i

prz

eo

czy

ć

połow

ę

background image

z

n

ich

lu

b

pop

nić

wiel

e

in

nych

błedó

w,

zm

ia

ni

amy tylko

dekl

ara

cję

ali

asu

. Jest

t

o

rozwią

zan

ie

du

zo

prosts

z

e

, a

poz

aty

m d

aje

ono

bard

ziej czy

teln

e

p

rogra

m

y

.

Bar

dziej wy

mo

wne

jest stoso

wanie

naz

w typu: "LED1"

czy

"KLAWISZ1"

zam

ias

t

P0.

0 it

p.

Pr

zyk

ład

1.3

Te

n

p

rzykład

pr

ezen

tuje

metodę

ust

a

wi

an

ia

st

an

u

n

iskie

g

o n

a

w

ypr

owadz

en

iu

za

pom

ocą i

ns

tru

kcji

ilocz

ynu

log

icznego

„ANL

”.

P

rzyjrz

yjm

y

się t

ab

e

li p

rawdy

dl

a

funkcji AND.

A

B

Y

0

0

0

0

1

0

1

0

0

1

1

1

J

ak widać,

w

ynikiem

funkcji

AND

jes

t

l

og

iczna

jed

ynka

t

ylko

wt

edy,

gdy

ob

yd

wa

par

am

etry fun

kc

ji

log

icznymi jedynkami.

W

pozo

s

tały

ch

przypa

dkach

wyn

i

ki

e

m jest

"0".

Możemy

to

w

yk

orzy

stać

do

włączeni

a

d

iod

y,

a

nawet

kilk

u

diod z

a

pomo

j

ednej i

nst

ru

kcji

asembl

e

ra.

Pr

zyk

ład

1.3

.ASM

NAM

E P0

1_03_ASM_SRC

$

INCLU

DE (A

TMEL/REG82

52.INC

)

P

01_03_ASM S

EGMENT

COD

E

RSEG

P01_03_AS

M

ANL P0

,#0FE

h

S

J

MP $

;

TLA NIE

SKOŃC

ZONA

E

ND

Pr

zyk

ład

1.3

.C

#

inc

lude <

ATME

L/REG8252.H>

void

ma

in

(void)

{

P

0

&=

0xFE;

wh

ile(1);

}

Pr

zyk

ład

1.3

.B

AS

P

0

=

P0

And

&B1111111

0

Do

:

Lo

op

:

En

d

Pon

ie

waż

iloczyn

logicz

n

y

jest

w

yk

on

yw

any

na

całym

porcie,

a

ni

e

na

poj

edy

nczy

m

bicie, możemy

to

wy

korz

yst

a

ć

do z

mi

any st

anu

kilk

u

bitó

w

portu

jednocześnie.

W te

n

spos

ób

zaoszczędz

imy

m

iejs

ce

w

pam

ięci

p

rogr

am

u,

bo

z

am

iast

użyc

ia

np.

czte

rech

dwu

bajto

wy

ch

i

nst

ru

kcji "

CL

R

bit"

uży

jem

y

j

ed

tr

zyb

ajto

"ANL

d

rect,

#d

ata

",

co

p

rze

dstawia

pr

zykład

1.4

.

Pr

zyk

ład

1.4

P

rzykład

1.4

.ASM

background image

NAM

E P0

1_03_ASM_SRC

$

INCLU

DE (A

TMEL/REG82

52.INC

)

P

01_03_ASM S

EGMENT

COD

E

RSEG

P01_03_AS

M

ANL P0

,#0AA

h

S

J

MP $

;

TLA NIE

SKOŃC

ZONA

E

ND

Pr

zyk

ład

1.4

.C

#

inc

lude <

ATME

L/REG8252.H>

void

ma

in

(void)

{

P

0

&=

0xAA;

wh

ile(1);

}

Pr

zyk

ład

1.4

.B

AS

P

0

=

P0

And

&B1010101

0

Do

:

Lo

op

:

En

d

J

ak widać,

za

pom

ocą tylko

jednej

i

nst

ru

kcji włączyli

ś

m

y

cz

tery

diody

je

d

no

cześni

e.

Tak

ie r

ozwiąza

ni

e

j

est

ba

rdzo

es

tetyc

zne

i

użyt

eczne,

chocia

ż

z

dru

giej st

rony

bard

ziej

cz

ytelne

je

st u

ż

ycie

pojed

yncz

y

c

h

i

ns

tr

ukcji

z

poszczególnymi n

azwa

mi

ust

awianych

pinów.

C

ześć

2

- obsługa

kla

wiatury

W

ć

wiczeniu

tym

za

pozn

amy

się z

obsł

u

gą p

rostej

k

lawiat

ury. Aby

p

rzep

rowadzić

to

ćw

iczenie

musi

m

y

do

po

rtu

P2

podłączy

ć

p

rzeł

ącz

nik

i

zwier

ające

w

ypr

owadz

e

nia

po

rtu

do

ma

s

y

w

mome

n

c

ie na

ciś

nięci

a p

rzycisku,

t

ak

jak

pokaza

no

na

rysunku

.

P

odłą

czenie

diod LED

je

st

iden

t

yczne

jak w

pr

z

ykł

ądzi

e

popr

zedn

im

.

Ni

e

na

daje

s

do

teg

o celu

port

P0

ze względu

na

bra

k we

wnętr

znyc

h

re

z

ystoró

w

podci

ą

g

ając

ych. Jeżeli

chce

m

y

do port

u

P0

podłączyć

klawia

tur

ę t

o

m

usimy

"podc

i

ągn

ąć"

piny por

to

P0 do p

lusa

za

sila

ni

a

poprz

ez dol

ączenie

pomiędzy

wy

prow

adzeni

a

port

u

a

szyn

ę

zasi

lając

ą re

z

ystoró

w

o

war

tości

kilku

-

do

kilku

dzi

esięciu ki

lo

omów

.

Pr

zyk

ład

2.1

P

rogra

m

p

rze

dstawiony

w

tym p

rzykład

zie kop

iuj

e

sta

n

lin

ii

port

u

P2 do por

tu

P0,

czy

li

nac

iśn

ięcie

pr

zycis

ku

będzie sygnali

zo

wa

ne za

ś

wi

e

ceniem

się odpow

iedniej diody

LED.

Dioda

b

ędzie s

św

ieciła

tylko

czasi

e

p

rzyciśnięcia

p

rzyci

sk

u. Po

jeg

o

puszcze

niu

di

ada

zgaś

nie

.

Pr

zyk

ład

2.1

.ASM

NAM

E P0

2_01_ASM_SRC

$

INCL

UDE (AT

MEL/REG825

2.INC

)

P0

2_01_ASM S

EGMENT

COD

E

RSEG

P02_01_ASM

P

ETLA:

MOV

P0,P2

background image

SJMP P

ETLA

E

ND

Pr

zyk

ład

2.1

.C

#

inc

lude <

ATME

L/REG8252.

h>

void

ma

in

(void)

{

wh

ile(1)

P0

=

P2;

}

Pr

zyk

ład

2.1

.B

AS

Do

P0

=

P2

Loop

E

nd

Omówieni

e

W

po

wy

ższ

ym

p

rzykład

zie s

tan

lin

ii

por

tu

P2

j

est kopiow

a

n

y

do

portu

P0.

W

j

ęzy

ku ase

m

ble

ra

zostało to

zrea

li

zo

wa

ne p

rzy

pomo

cy

i

nst

ru

kcji "MOV

direc

t1,

di

rect2

"

,

kopiującej

z

awar

toś

ćˇ komór

ki

w

ewnętrz

nej

pam

ięci RAM

z

ob

sza

ru

ad

reso

wanego bezpo

ś

rednio l

ub

z

obszaru

r

ej

est

w

SFR

do komórk

i

pam

ięci,

lub r

e

j

e

st

ru

SFR

w

tym

samym

ob

sza

rze.

W celu

n

ies

k

ońc

zoneg

o powtar

za

ni

a

tej i

ns

tru

kcji

zastosow

ano in

st

ru

kcję

sk

oku

krótk

ieg

o "SJ

M

P a

dr

"

wy

kon

ującą

sk

ok

do

e

t

ykie

ty

"PETLA"

W

j

ęzy

ku C

za

dan

ie

to zost

ało

z

real

izowane

poprze

z p

rzypisa

nie

do

portu

P

0

war

t

ości po

rtu

P2.

Pętl

a

n

ies

k

ońc

zona

został

a

zr

eal

izowan

a

poprze

z

uży

cie

i

nst

ru

kcji "wh

ile(1)"

W

j

ęzy

ku Basic i

nst

ru

kcja p

rzypisa

nia

wartości por

tu

P2

do

po

rtu

P0

została

u

jęta

pom

i

ę

dz

y

i

ns

tru

kcje

"DO"

i

"LOO

P

"

,

które

rea

li

zują

pęt

nie

skończon

ą.

P

rzep

rowadˇm

y

ter

az

a

na

li

kodu wy

nikow

ego

po

w

s

z

ego

p

rogra

mu

w

y

generow

a

neg

o popr

zez

ka

żdy

z

u

ż

yty

ch kompi

lato

w.

Pr

zyk

ład

2.1

.ASM

.D51

;

;

D

51 V2.

6

8051

Disassembl

y

of

a

sm.

hex

;

10

/28/2

003

19

:06

;

o

rg 0

;

X0

000:

mov

p

0,p2

sjmp

X000

0

;

e

nd

;

Pr

zyk

ład

2.1

.C.

D51

m

ai

n:

?WHI

LE1:

;

SOUR

CE

LINE #

6

;

$@$

C_SOU

RCE_LINE(6)

MOV

P0,P2

SJMP ?WHI

LE1

background image

;

EN

D OF

mai

n

Pr

zyk

ład

2.1

.B

AS.

D51

;

;

D

51 V2.

6

8051

Disassembl

y

of

bas.

hex

;

10

/28/2

003

19

:06

;

.

; Pomi

nię

te zost

y

in

st

ruk

cj

e

powr

otu

.

; z

podprogr

amów

o

bsługi

prz

erwa

ń

.

X0

02e: mov

r0

,#0ff

h

cl

r

a

X0

031:

mov

@

r0

,a

dj

nz

r

0,X0

031

mov

sp,#

21h

mov

20h

,#

0

;

Tu

taj

rozp

o

czyna s

właściw

y

pro

gra

m

X0

03a:

mov

p0,p

2

lj

mp

X003a

;

cl

r

ea

X0

042:

sjmp

X0042

;

e

nd

Kompi

lato

r

każ

dego

z

jęz

yk

ów

użył

do

zr

eal

izowani

a

podan

ego

zad

an

ia

je

d

nej

ins

tr

uk

c

j

i

"MOV di

rect1

,

d

irect

2",

a

wię

c

zre

ali

zował to

zada

ni

e

opt

ymal

nie

.

Jed

yną wątp

liwo

ść

budzi

u

ż

ycie

p

rzez

B

ascoma t

rzybajto

w

ej

i

ns

tru

kcji

"LJM

P" do z

rea

lizowan

ia

tli

ni

eskończonej.

Ponieważ skok n

ast

ępuje

do popr

zed

niej i

nst

ru

kcji

wy

starczy

ło

uży

ć

dw

ubajto

i

ns

tr

ukcję

"SJMP"

,

e

wentu

aln

ie

ta

kże

dwu

bajto

ins

tr

ukcję

"AJMP".

Ś

w

i

adc

z

y

to o tym,

że Bascom

nie

sp

rawdz

a

zakr

esu

skoku

i

zawsze wstawia

i

nst

ru

kcję

obe

jmują

c

ą

na

jwi

ększy

ob

sza

r

p

am

i

ę

c

i

i

n

iepotr

zebnie

zaj

mującą

j

eden

bajt

pa

mięci

pr

gr

am

u

więc

ej.

Natomia

st

kompil

ator

j

e

z

yka

C u

ż

ył do

z

rea

liz

o

wan

ia

p

ę

tli

n

ajbar

dzi

ej

op

tymaln

ej

ins

tr

ukcji

"SJMP".

Pr

zyk

ład

2.2

P

rogra

m

p

rze

dstawiony

w

tym p

rzykład

zie po n

aci

śn

ięciu p

rzycisku S1

zap

al

a

diodę

D1,

a

po n

aciś

nięc

iu

p

rzycisku

S8

gasi

diod

ę

.

Pr

zyk

ład

2.2

.ASM

NAM

E P0

2_02_ASM_SRC

$

INCL

UDE (AT

MEL/REG825

2.INC

)

P0

2_01_ASM S

EGMENT

COD

E

RSEG

P02_01_ASM

background image

S1

EQU

P2.0

S8

EQU

P2.7

L

ED

EQU

P0.

0

S

TART:

JB

S1,

DALEJ

CLR

LED

DALEJ:

JB

S8,

S

T

ART

S

ETB LED

SJMP S

TART

E

ND

Pr

zyk

ład

2.2

.C

#

inc

lude <

ATME

L\

REG8252.

H

>

sbit

S1 =

P

2^0;

sbit

S2 =

P

2^7;

sbit

LED1 =

P

0

^0;

void

ma

in

(void)

{

wh

ile(1)

{

if

(S1 ==

0)

LED1 =

0

;

if

(S2 ==

0)

LED1 =

1

;

}

}

Pr

zyk

ład

2.2

.B

AS

S1

Ali

as

P2.0

S2

Ali

as

P2.7

L

ED

Ali

as

P0.0

Do

If S1

=

0

The

n

R

eset

LED

If S2

=

0

The

n

Set

LED

Loop

E

nd

W

t

ym p

rzykład

zie

do

skona

le widać,

który

z

j

ęzyk

ów

of

eruje

najl

epszą

czy

telność

kodu.

As

e

m

bler

ocz

yw

iśc

ie

n

ie

za

pe

w

nia

tej jak

że

ważnej cechy

. Moi

m zd

an

iem

najba

rdz

iej czyt

elny

j

est p

rogr

am

na

pis

any w

j

ęzy

ku C,

c

ho

ć zwolenn

ic

y

Basc

oma

zapewne n

ie

pr

zyzn

ają

mi

r

acji.

Pr

zyk

ład

2.3

P

rogra

m

w

tym

pr

z

ykł

adzie

po

na

ciś

nięciu

p

rzy

c

i

sku

S1 za

pal

a

di

odę

D1

a

po

ponown

ym na

ciś

nięci

u p

rzyci

sku

S1

gas

i

diodę.

Pr

zyk

ład

2.3

.ASM

NAM

E P0

2_02_ASM_SRC

background image

$

INCL

UDE (AT

MEL/REG825

2.INC

)

P0

2_01_ASM S

EGMENT

COD

E

RSEG

P02_01_ASM

S1

EQU

P2.0

L

ED

EQU

P0.

0

S

TART:

JB

S1,

S

T

ART

CPL

LED

SJMP S

TART

E

ND

Pr

zyk

ład

2.3

.C

#

inc

lude <

ATME

L\

REG8252.

H

>

sbit

S1 =

P

2^0;

sbit

LED1 =

P

0

^0;

void

ma

in

(void)

{

wh

ile(1)

{

if

(S1 ==

0)

L

ED1 =

!LED

1;

}

}

Pr

zyk

ład

2.3

.B

AS

S1

Ali

as

P2.0

Led1 A

lias

P0.0

Do

If S1

=

0

The

n

L

ed1

=

N

ot

Le

d1

Loop

E

nd

Op

is:

N

asz

prog

ram

ni

e

zac

h

owuje

się t

ak,

jak powinie

n.

Po

n

aciś

nięc

iu p

rzycis

k

u

dioda

się

za

pa

la

w

spo

sób

p

rzypadkow

y.

Gd

y

pr

z

ycisk

pr

zytrzymamy

w

ciśnię

t

y

t

rochę

dłuż

ej, to jas

noś

ć świec

eni

a

diod

y

sp

ada,

co

świadczy

o

t

ym

, że

dioda

j

est n

a

prz

emi

an

za

pal

an

a

i

gas

z

o

na.

Pr

z

yczy

tego

je

st og

romna

szy

bko

ść

wy

kon

y

wania

p

rogr

amu

pr

zez

m

ikro

k

o

ntr

oler

,

w

ynos

ząca

ok. 1

mi

lio

n

ins

t

rukc

ji

na

sekun

dę.

Ab

y

temu

z

apobi

ec

na

leży

w

stawić

pętlę opóˇniaj

ącą.

Pr

zyk

ład

2.4

.ASM

NAM

E P0

2_04_ASM_SRC

$

INCL

UDE (AT

MEL/REG825

2.INC

)

P0

2_04_ASM S

EGMENT

COD

E

RSEG

P02_04_ASM

S1

EQU

P2.0

L

ED

EQU

P0.

0

S

TART:

JB

S1,

S

T

ART

CPL

LED

background image

ACALL

CZEKAJ

SJMP S

TART

CZ

EKAJ:

MOV

R1,#255

L2:

MOV

R0,#255

L1:

DJNZ R0,L1

DJNZ R1,L2

RE

T

E

ND

Pr

zyk

ład

2.4

.C

#

inc

lude <

ATME

L\

REG8252.

H

>

sbit

S1 =

P

2^0;

sbit

LED =

P0

^0;

void

czekaj(v

oid)

{

c

har

x,y;

for (

x =

25

5;

x

>

0;

--x)

for (y

=

25

5;

y

>

0;

--y);

}

void

ma

in

(void)

{

wh

ile(1)

{

if

(S1 ==

0)

{

L

ED

=

!LED;

czek

aj();

}

}

}

Pr

zyk

ład

2.4

.B

AS

S1

Ali

as

P2.0

Led1 A

lias

P0.0

Do

If S1

=

0

The

n

L

ed1

=

N

ot

Le

d1

wai

tms

200

Loop

E

nd

Op

is:

P

rzyjrz

yjm

y

się p

rocedurze

op

óˇn

iającej

n

ap

isa

nej

w

języ

ku

asemblera

:

CZ

EKAJ:

MOV

R1,#255

L2:

MOV

R0,#255

L1:

DJNZ R0,L1

DJNZ R1,L2

RE

T

I

nst

ruk

cja "MOV

R

1

, #25

5"

służy

do

ustawien

ia

l

iczn

ik

a

pętl

i

L2.

Ins

tru

kcja

"

MOV

R0, #

255"

służy

do

us

tawieni

a

licz

ni

ka

pętli

L1.

yc

ie

dw

óch

pętli

zag

nie

żdżo

n

ych

pod

ykt

owane

je

st m

ałym z

akr

esem powtórzeń

background image

r

eal

izowanych

pr

zez

i

nst

ru

kcję

"DJNZ

" (m

aksymaln

ie

256

ra

zy, gdy

l

iczn

ik

pętli

ust

awim

y

na

"0").

Do

z

rea

liz

o

wan

ia

p

ę

tli

s

łuż

y

ins

tr

uk

c

j

a

"DJNZ

Rn,

re

l".

W

na

szym pr

zykładz

ie w

pierwszej

kol

ejności

jest

r

eal

izowana

pętla

L1

(255

po

wtórzeń

,

co

daje ok.

510

us,

p

rzy

zega

rze

12

MHz).

Pętla

ta

jest

z

kolei powtar

za

na

2

55 r

a

z

y w

pętli

L2

. W

s

u

mie

daje

to

opó

ˇ

nieni

e ok.

130

ms.

W

j

ęzy

ku C

procedur

a

opó

ˇ

niając

a wy

gląda n

as

tępująco:

void

czekaj(v

oid)

{

c

har

x,y;

for (

x =

25

5;

x

>

0;

--x)

for (y

=

25

5;

y

>

0;

--y);

}

W

pierwszym

wiersz

u p

rocedury

dekla

ruje

m

y

dwie

zm

ien

ne,

które

posłużą

na

m

jako

licz

ni

ki

tli

.

Ins

tru

kcja

"for(x

=

255;

x

>0

;

--x)"

rea

li

zuje

pętlę,

w

k

tórej

jest

zag

nie

żdżo

na

dru

ga

pęt

la,

podobna

d

o p

ierwszej

.

Skon

str

uo

wa

nie tych pęt

li,

ja

k

o l

iczący

ch

"

w

dół" n

ar

z

ucone

zostało p

rze

z

arc

hit

ektu

m

ikro

kontr

oler

a

i

wy

st

ępo

wanie

w

jęz

yku

asemblera

i

nst

ru

kcji pęt

li

w

yk

orz

ystując

y

ch dek

remen

tację

lic

zni

ka

pętli

.

Daje

to

ba

rdz

iej

zwięzł

y

kod

w

yniko

wy

n

z

re

al

izując

a t

ą

sam

ą

licz

b

ę

po

wtórzeń

pętla

"for(x =

0;

x <

255,

+

+x)".

W

j

ęzy

ku BASCOM

do

op

óˇn

i

e

ni

a

w

yk

orzy

sta

na

zosta

ła

specjalnie

do

tego

celu

pr

zezn

ac

zon

a

in

str

ukcja

"WAI

TMS

x".

Jest on

a

na

jprosts

za

w

użyciu, bow

iem

podajem

y

lic

z

bow

o

czas

opó

ˇ

nien

ia

w

mil

iseku

nda

ch

ni

e

m

usimy

mozolić

się z

obliczan

iem

i

lości

po

wtórzeń

i cz

asu

real

izowan

ia

pęt

li,

j

a

k

w

przypadk

u C

i

asemblera

.

Porównajmy

ter

az

kod

w

yniko

w

y

tych tr

zec

h

pro

gra

mów.

Już

sa

mo

porównani

e r

ozm

ia

ru

plików

*.BIN

daje

n

am

jasny

o

br

az

ef

ekty

wn

ośc

i k

ażdego

z

t

rzec

h

jęz

yk

ów

:

-

pl

ik

gene

ro

w

an

y

pr

zez

BASCOM

- 1

01 B

-

pl

ik

gene

ro

w

an

y

pr

zez

RC51

- 3

7

B

-

pl

ik

gene

ro

w

an

y

pr

zez

RA51 -

18

B

P

rogra

m

n

ap

isa

ny

w

BASCOM’ie

j

est pon

ad

5,6

razy większ

y

od p

rogr

amu

na

pis

an

ego

w

asemblerze

speł

ni

ającego

sam

ą

funkcję

.

Dokładn

ie

ty

le

samo

te p

rogr

amy

zajm

ują p

am

i

ę

c

i

w

mik

rokon

trole

rze

.

Pr

zyk

ład

2.4

.B

AS.

D51

;

;

D

51 V2.

6

8051

Disassembl

y

of

bas.

hex

;

2/

16/20

04

13:

07

;

.

; Pomi

nię

te zost

y

in

st

ruk

cj

e

powr

otu

.

; z

podprogr

amów

o

bsługi

prz

erwa

ń

.

X0

02e: mov

r0

,a

X0

02f:

mov

a

,#0

adh

X0

031:

i

nc

a

n

op ;

d

ata

tru

nc

at

ed

;

o

rg 3

ah

;

j

nz

X003

1

n

op

dj

nz

r

0,X0

02f

r

et

;

X0

040:

mov

r

0,

#0ffh

cl

r

a

X0

043:

mov

@

r0

,a

dj

nz

r

0,X0

043

background image

mov

sp,#

21h

mov

20h

,#

0

X0

04c: mov

c,p2.

0

mov

20h

.4

,c

j

nc X005

5

lj

mp

X005a

;

X0

055:

mov

c

,p0.

0

cp

l c

mov

p0.0

,c

X0

05a:

mov

a,

#0c8h

ac

all

X00

2e

lj

mp

X004c

;

cl

r

ea

X0

063:

sjmp

X0063

;

e

nd

;

J

ak widać

kod

w

yniko

w

y

p

rogr

amu

na

pis

an

ego

w

Bascomie

j

est z

agm

atwa

ny

i

m

ało

cz

ytelny.

Cz

ęść

3

- w

yświetla

cz

si

edmi

osegmentowy.

W

c

elu

w

yk

onan

ia

ćwiczenia

na

leży

wy

kona

ć poł

ączeni

a

jak

na

rysunku

.

Na

rys

u

nku

n

ie

za

zn

aczo

no

r

ezys

torów

ogra

nic

zających

pr

ąd,

ale

nie

w

olno

o

nic

h

z

apom

nieć

w

ukł

adz

ie.

Pr

zyk

ład

3.1

.ASM

NAM

E P0

3_01_ASM_SRC

$

INCL

UDE (AT

MEL/REG825

2.INC

)

P0

3_01_ASM S

EGMENT

COD

E

RSEG

P03_01_ASM

WYSW EQU

P0

W1

EQU

P2.0

W2

EQU

P2.1

W3

EQU

P2.2

W4

EQU

P2.3

CLR

W1

MOV

WYS

W,

#0

SJMP $

E

ND

Pr

zyk

ład

3.1

.C

#

inc

lude <

ATME

L\

REG8252.

H

>

#

de

fi

ne

WYSW

P0

sbit

W1 =

P2^

0;

sbit

W2 =

P2^

1;

sbit

W3 =

P2^

2;

sbit

W4 =

P2^

3;

void

ma

in

(void)

{

W1

=

0;

WYSW =

0

;

wh

ile(1);

}

background image

Pr

zyk

ład

3.1

.B

AS

WYSW al

ias

p0

w1

al

ia

s p2

.0

w2

al

ia

s p2

.1

w3

al

ia

s p2

.2

w4

al

ia

s p2

.3

w1

=

0

wy

sw

=

0

do

loop

e

nd

O

wienie:

Pow

y

ższ

y

pro

gra

m

powo

duj

e

zaświece

n

ie

wsz

yst

kich

segmen

tów

w

wi

etlacza

W1.

Ustawienie s

tan

u

nis

kie

g

o

n

a

lin

ii

P2.

0 (

W1) wprowa

d

za

tr

an

zystor

w

sta

n

n

asyc

eni

a

i

na

an

odę

w

wi

etlacza

W1

pod

a

ne

j

est

nap

ięcie

z

asil

an

ia

.

Następ

nie

w

szy

stkie

li

nie

po

rtu

P0

ustawia

ne w

st

an

nisk

i.

Po

wo

duj

e

to

włączenie

wsz

ys

tkich

segme

ntów

wy

ś

wi

etlacz

a W1.

Pr

zyk

ład

3.2

W

t

ym p

rzykład

zie

zajm

i

e

m

y

się wy

ś

wi

etlenie

m

na

w

wi

etlaczu

kol

ejno cy

fr

kodu

szesn

astkow

ego

(0.

.F).

Sposó

b

poł

ąc

z

enia

po

szczególnych

segmen

w

w

wi

etlacza

z

wy

pro

wadzenia

mi

mik

roko

ntro

lera

pr

zedst

a

wi

a

rysune

k.

T

abela

kod

ów

steruj

ąc

ych

wy

św

ietlaczem s

i

e

dmios

e

gm

e

ntow

ym

:

T

abela

3.1

W

wi

etla

na

c

yf

ra

Liczba d

ziesiętn

ie

Liczba

szesn

astkowo

Liczba dwó

jk

ow

o

0

19

2

C0

11

0000

0

0

1

24

9

F

9

11

1110

0

1

2

16

4

A4

10

1001

0

0

3

17

6

B0

10

1100

0

0

4

15

3

99

10

0110

0

1

5

14

6

92

10

0100

1

0

6

13

0

82

10

0000

1

0

7

24

8

F

8

11

1110

0

0

8

12

8

80

10

0000

0

0

9

14

4

90

10

0100

0

0

A

13

6

88

10

0010

0

0

B

13

1

83

10

0000

1

1

C

19

8

C6

11

0001

1

0

D

16

1

A1

10

1000

0

1

E

13

4

86

10

0001

1

0

F

14

2

8

E

10

0011

1

0

Pr

zyk

ład

3.2

.ASM

NAM

E P0

3_02_ASM_SRC

$

INCL

UDE (AT

MEL/REG825

2.INC

)

P0

3_02_ASM S

EGMENT

COD

E

RSEG

P03_02_ASM

_

0 EQU 0C

0h

_

1 EQU 0F

9h

_

2 EQU 0A4

h

background image

_

3 EQU 0B0

h

_

4 EQU 09

9h

_

5 EQU 09

2h

_

6 EQU 08

2h

_

7 EQU 0F

8h

_

8 EQU 08

0h

_

9 EQU 09

0h

_A

EQU

088

h

_B E

Q

U 08

3h

_

C E

Q

U 0C

6h

_D

EQU

0A1

h

_

E

EQU

086h

_F

EQU

08

Eh

WYSW EQU

P0

W1

EQU

P2.0

W2

EQU

P2.1

W3

EQU

P2.2

W4

EQU

P2.3

CLR

W1

S

TART:

MOV

WYS

W,

#_0

ACALL

CZEKAJ

MOV

WYS

W,

#_1

ACALL

CZEKAJ

MOV

WYS

W,

#_2

ACALL

CZEKAJ

MOV

WYS

W,

#_3

ACALL

CZEKAJ

MOV

WYS

W,

#_4

ACALL

CZEKAJ

MOV

WYS

W,

#_5

ACALL

CZEKAJ

MOV

WYS

W,

#_6

ACALL

CZEKAJ

MOV

WYS

W,

#_7

ACALL

CZEKAJ

MOV

WYS

W,

#_8

ACALL

CZEKAJ

MOV

WYS

W,

#_9

ACALL

CZEKAJ

MOV

WYS

W,

#_A

ACALL

CZEKAJ

MOV

WYS

W,

#_B

ACALL

CZEKAJ

MOV

WYS

W,

#_C

ACALL

CZEKAJ

MOV

WYS

W,

#_D

ACALL

CZEKAJ

MOV

WYS

W,

#_E

ACALL

CZEKAJ

MOV

WYS

W,

#_F

ACALL

CZEKAJ

SJMP S

TART

CZ

EKAJ:

MOV

R1,#255

L2:

background image

MOV

R0,#255

L1:

DJNZ R0,L1

DJNZ R1,L2

RE

T

E

ND

Pr

zyk

ład

3.2

.C

#

inc

lude <

ATME

L\

REG8252.

H

>

#

de

fi

ne

WYSW

P0

#

de

fi

ne

_0

192

#

de

fi

ne

_1

249

#

de

fi

ne

_2

164

#

de

fi

ne

_3

176

#

de

fi

ne

_4

153

#

de

fi

ne

_5

146

#

de

fi

ne

_6

130

#

de

fi

ne

_7

248

#

de

fi

ne

_8

128

#

de

fi

ne

_9

144

#

de

fi

ne

_A

136

#

de

fi

ne

_B

131

#

de

fi

ne

_C

19

8

#

de

fi

ne

_D

161

#

de

fi

ne

_E

13

4

#

de

fi

ne

_F

142

sbit

W1 =

P2^

0;

sbit

W2 =

P2^

1;

sbit

W3 =

P2^

2;

sbit

W4 =

P2^

3;

void

czekaj(v

oid)

{

c

har

x,y;

for (

x =

25

5;

x

>

0;

--x)

for (y

=

25

5;

y

>

0;

--y);

}

void

ma

in

(void)

{

W1

=

0;

wh

ile(1)

{

WYSW =

_

0;

czek

aj();

WYSW =

_

1;

czek

aj();

WYSW =

_

2;

czek

aj();

WYSW =

_

3;

czek

aj();

WYSW =

_

4;

czek

aj();

WYSW =

_

5;

czek

aj();

WYSW =

_

6;

czek

aj();

background image

WYSW =

_

7;

czek

aj();

WYSW =

_

8;

czek

aj();

WYSW =

_

9;

czek

aj();

WYSW =

_A

;

czek

aj();

WYSW =

_B;

czek

aj();

WYSW =

_

C;

czek

aj();

WYSW =

_D

;

czek

aj();

WYSW =

_

E;

czek

aj();

WYSW =

_F;

czek

aj();

}

}

Pr

zyk

ład

3.2

.B

AS

Wys

w

Alias

P0

W1

Alia

s P

2.0

_

0 A

lias

192

_

1 A

lias

249

_

2 A

lias

164

_

3 A

lias

176

_

4 A

lias

153

_

5 A

lias

146

_

6 A

lias

130

_

7 A

lias

248

_

8 A

lias

128

_

9 A

lias

144

_

a

Alia

s 13

6

_b A

lias

13

1

_c

Alia

s 19

8

_

d A

lias

161

_e

Alia

s 13

4

_f Al

ias

142

Reset

W

1

Do

Wys

w

=

_0

Wa

itms

2

50

Wys

w

=

_1

Wa

itms

2

50

Wys

w

=

_2

Wa

itms

2

50

Wys

w

=

_3

Wa

itms

2

50

Wys

w

=

_4

Wa

itms

2

50

Wys

w

=

_5

Wa

itms

2

50

Wys

w

=

_6

Wa

itms

2

50

Wys

w

=

_7

Wa

itms

2

50

Wys

w

=

_8

background image

Wa

itms

2

50

Wys

w

=

_9

Wa

itms

2

50

Wys

w

=

_a

Wa

itms

2

50

Wys

w

=

_b

Wa

itms

2

50

Wys

w

=

_c

Wa

itms

2

50

Wys

w

=

_d

Wa

itms

2

50

Wys

w

=

_e

Wa

itms

2

50

Wys

w

=

_

f

Wa

itms

2

50

Loop

E

nd

K

ażdy

p

rogr

am

sp

e

łni

a

swo

je

zada

n

ie,

jedn

ak

na

pis

any jest

bar

dzo r

ozwlekl

e

i

nieestetyc

zn

ie.

To sa

mo

zad

an

ie

mo

żna

zr

eal

izować

zna

czn

ie

ba

rdz

iej

est

e

t

ycznie.

Poró

wnaj

m

y

jedna

k

wc

ześniej ro

zmi

ary kodu

w

ynik

owe

go

tych p

rogr

amów:

-

BASCOM

- 1

97 bajtów

-

C

-

127

ba

jtów

-

ase

m

bler

-

93

bajt

y

Tym r

aze

m

pro

gra

m

w

Bas

comie za

jmuje

ni

ec

o pon

ad

2

razy więce

j

n

jego

odpo

wie

d

nik

w

a

semblerze.

Pr

zyk

ład

3.3

.ASM

NAM

E P0

3_03_ASM_SRC

$

INCL

UDE (AT

MEL/REG825

2.INC

)

P0

3_03_ASM S

EGMENT

COD

E

RSEG

P03_03_ASM

WYSW EQU

P0

W1

EQU

P2.0

CLR

W1

S

TART:

MOV

DPTR,#ZNAKI

P

ETLA:

CLR

A

MOVC

A,@

A+DPTR

JZ S

TA

RT

MOV

WYS

W,A

IN

C DPTR

ACALL

CZEKAJ

SJMP P

ETLA

CZ

EKAJ:

MOV

R1,#255

L2:

MOV

R0,#255

L1:

DJNZ R0,L1

DJNZ R1,L2

RE

T

background image

ZNAKI:

DB

192

,249

,164

,176

,153

,146

,130

,24

8,12

8,1

44,1

36,1

31,

198

,161

,134

,142

,0

E

ND

Pr

zyk

ład

3.3

.C

#

inc

lude <

ATME

L\

REG8252.

H

>

#

de

fi

ne

WYSW

P0

c

har

code

zn

ak

i[

17]

=

{1

92,24

9,164

,176

,153

,14

6,13

0,2

48,1

28,

144,1

36,

131

,198

,161

,134

,142

,0};

sbit

W1 =

P2^

0;

void

czekaj(v

oid)

{

c

har

x,y;

for (

x =

25

5;

x

>

0;

--x)

for (y

=

25

5;

y

>

0;

--y);

}

void

ma

in

(void)

{

W1

=

0;

wh

ile(1)

{

code

ch

ar

*

pz

nak

i

=

&

zn

aki

;

wh

ile(*pz

na

ki)

{

WYSW =

*

pzna

ki

;

p

zna

ki

++;

czek

aj();

}

}

}

Pr

zyk

ład

3.3

.B

AS

Wys

w

Alias

P0

W1

Alia

s P

2.0

D

im

I

As

B

yt

e

Reset

W

1

Do

For

I

=

0

To

15

Wys

w

=

L

ook

up(i

,

Z

naki

)

Wa

itms

2

50

Next

I

Loop

Z

naki

:

D

ata

19

2 ,

2

49

,

164

,

176

,

15

3 ,

1

46

,

130

,

248

,

12

8 ,

1

44

,

136

,

13

1

,

19

8 ,

1

61

,

134

,

14

2

E

nd

Pow

y

ższ

y

pro

gra

m

r

eal

izuje

dokładn

ie

to

samo

zad

an

ie,

j

a

k

p

rogr

am

p

op

rzed

ni

,

jednak

zre

ali

zo

w

an

y

zosta

ł

z

u

ż

ycie

m

pętli

i

u

mieszcze

niem

kodó

w

cy

fr

w

tab

lic

y.

Zapis

prog

ra

mu

stał

s

i

ę

pr

zez

to z

nac

zn

ie

kr

ótszy

i

ba

rdz

iej

estet

yczn

y. Najbar

dziej czyte

l

n

y

i

łat

w

y

do

zroz

umi

en

ia

jest

pro

gra

m

n

ap

isa

ny

w

Bascomie. Do

pobra

ni

a

elemen

tu

tab

lic

y

s

łuży

ty

l

k

o

jedno

polec

eni

e

- "LOOKUP

"

.

Natomia

st

w

języ

ku

C

koniecz

ne by

ło

z

astoso

wan

ie

łącz

nie

t

rzec

h

poleceń.

W

pie

rw

szej

kolejn

ości za

dekla

rowano z

mi

en

wskaˇni

k

ową "p

zna

ki

"

i

p

rzypisa

no

do

n

iej

pr

zy

uży

ciu opera

t

o

ra

a

dres

u "&" a

dres

tabl

ic

y

"z

na

ki"

.

Nas

tępnie

pobra

no

elemen

t

tabli

c

y

p

rzy

użyc

iu i

nst

r

ukcji

"WYS

W =

*p

zn

aki

".

Na

końcu kon

ieczne

b

yło

zin

kr

eme

ntowan

ie wskaˇn

ika

,

aby

wskazy

wał

na

kolejn

y

element

t

ablicy

. Ja

k widać pobra

nie

elemen

tu

z

tab

lic

y

w

jęz

yk

u C

jest

dos

skomp

likow

a

ne

w

poró

wn

an

iu

z

Basco

mem.

Pyzat

ym,

w

skaˇ

nik

i

je

d

n

ym z

t

ru

dn

iejszy

ch do z

rozu

mie

nia

eleme

ntów

jęz

yka

C

dla

p

ocząt

kując

ych.

Najbardzi

ej

sk

om

plikowana

sp

rawa

jest

w

asembler

ze.

Do

z

rea

liz

o

wan

ia

rozpa

trywanego

pr

zez

na

s

za

da

ni

a

z

astosow

ano

o

siem

ins

tr

ukcji:

background image

S

TART:

MOV

DPTR,#ZNAKI

P

ETLA:

CLR

A

MOVC

A,@

A+DPTR

JZ S

TA

RT

MOV

WYS

W,A

IN

C DPTR

ACALL

CZEKAJ

SJMP P

ETLA

I

nst

ruk

cja "MOV

DPTR,#ZNAKI"

odp

owiada

przypisa

ni

u

do

w

skaˇ

nik

a

adr

esu

pierwszego

ele

mentu

m

ikr

okont

roler

ze

tablicy.

W

mik

rokon

tro

l

e

rz

e

80

51 jed

ynym

rejestre

m,

któ

r

y

możn

a

z

astosow

jako

16-

bit

ow

y

wskaˇn

ik

jest

rejestr

DPT

R.

W n

o

wszy

ch wersja

c

h

mik

rokont

role

ra

8

051,

w

tym

w

wers

j

i

89S825

2,

w

ys

tęp

ują

dwa

w

skaˇ

niki

DPTR.

J

ed

nakż

e ze

względu n

a

ko

nieczność z

a

c

howani

a

100%

komp

aty

bilności kodu

z

8051

mo

żliwe

jest w

dan

ej

chwil

i u

ż

ycie

tylko

jednego

wskaˇni

ka

DPT

R

.

W za

leż

ności od ro

dzaju

mik

rokont

role

ra

p

rze

łącza

ni

e

aktywn

ego

danej

chwili

wskaˇn

ika

je

st r

eal

izowane

w

róż

ny

spo

sób

. Ab

y

na

sze

pr

zykład

y

moż

na

by

ło

za

stoso

wa

ć

w

dow

olnym

m

ik

rokont

role

rze

ni

e

b

ędziemy

korzystać z

tego

udogodnien

ia

.

I

nst

ruk

cja "C

L

R

A" jest koni

e

c

zna

,

po

nieważ ad

res

komórki

p

amięci

pro

gra

mu

po

biera

nej z

a

pomo

c

ą

ins

tr

ukcji

"MOVC

A,

@A

+DPTR"

jest

sumą

z

awar

tości

aku

mul

ator

a

i

wskaˇn

ika

DPTR. W p

rzypadku

n

iew

yzer

owania

a

kumu

la

tora

przy powtarz

an

iu

pętli

a

dres

b

yłb

y

o

bliczony

błędni

e.

Ins

tru

kcja "JZ S

TA

RT"

spr

awdza

,

cz

y

osiąg

nię

t

y

został

kon

i

e

c

tablicy.

Jeśl

i

ta

k,

to n

as

tępuje

op

uszc

z

e

nie

pętli

.

Następn

ie

po

br

any

element

t

ablicy

zost

aj

e wy

słany

do

port

u

P0.

Prz

ed powt

ór

zenie

m

pętli

mu

simy

jeszcze

zwiększ

adr

es n

as

tępne

go

el

e

mentu

t

ablicy

do

po

br

ani

a

o

1.

W

iem

y

już

,

jak s

i

ę p

rz

edstawia

stopień

komp

lik

a

cji

pro

gra

mu

w

za

leżn

ości

od

użyte

go

j

ęzyk

a

.

Sp

rawdˇmy

te

raz

i

loś

ć m

iejs

ca

zajmowanego

w

pa

mięci

pr

zez

ka

żdy

p

rogr

am

.

-

Basc

om -

185

bajtó

w

(

197

ba

jtów

bez

wy

korz

ystani

a

pętl

i

i

tablicy)

-

C

-

82 bajty

(127

bajtó

w)

-

Asembler

- 4

2 bajty

(93 bajty)

Zgodn

ie

z

oczekiw

a

nia

mi

asembler

w

ypa

da

naj

lepiej. T

ak

że w

poró

wn

an

iu

do popr

zedn

iego

pr

zykładu

be

z pę

tli

i

t

ablicy

w

ase

m

bler

ze zysku

jemy

n

ajwiększą

osz

częd

noś

ć

pa

mięci

prog

ra

mu.

P

rzejdˇmy

te

ra

z

do

ciekaw

s

z

ego

zaga

dn

ien

ia

,

mi

anowicie

do

mu

lti

pleksow

a

neg

o ste

ro

wan

ia

wy

ś

wi

etlaczem

.

Aby

z

aoszc

z

ędzić por

t

y

mik

roko

ntr

olera

,

ba

rdzo c

sto

stos

owane

jes

t

sterowanie

mul

tip

lekso

wane

. O

zna

cza

to,

że

ka

t

ody

odpow

iednic

h

segmentów

s

ą połączo

n

e

ra

ze

m

do

w

ypr

owadz

s

t

e

rujący

ch,

a

an

od

y

są s

terowane

oso

bno. Zap

alając

odpo

wi

ed

nio

szy

bk

o

poszczególne s

e

gme

nty

ot

rzymuj

emy

wraże

nie

świe

cenia

się

w

szy

stkich

wy

św

iet

lac

z

y.

Pr

zyk

ład

3.4

.ASM

NAM

E P0

3_04_ASM_SRC

$

INCL

UDE (AT

MEL/REG825

2.INC

)

P0

3_04_ASM S

EGMENT

COD

E

RSEG

P03_04_ASM

WYSW EQU

P0

W1

EQU

P2.0

W2

EQU

P2.1

W3

EQU

P2.2

W4

EQU

P2.3

MOV

DPTR,#ZNAKI

P

ETLA:

CLR

W1

MOV

A,#9

MOVC

A,@

A+DPTR

MOV

WYS

W,A

ACALL

CZEKAJ

S

ETB W1

background image

CLR

W2

MOV

A,#8

MOVC

A,@

A+DPTR

MOV

WYS

W,A

ACALL

CZEKAJ

S

ETB W2

CLR

W3

MOV

A,#7

MOVC

A,@

A+DPTR

MOV

WYS

W,A

ACALL

CZEKAJ

S

ETB W3

CLR

W4

MOV

A,#6

MOVC

A,@

A+DPTR

MOV

WYS

W,A

ACALL

CZEKAJ

S

ETB W4

SJMP P

ETLA

CZ

EKAJ:

MOV

R1,#255

L2:

MOV

R0,#255

L1:

DJNZ R0,L1

DJNZ R1,L2

RE

T

ZNAKI:

DB

192

,249

,164

,176

,153

,146

,130

,24

8,12

8,1

44,1

36,1

31,

198

,161

,134

,142

,0

E

ND

Pr

zyk

ład

3.4

.C

#

inc

lude <

ATME

L\

REG8252.

H

>

#

de

fi

ne

WYSW

P0

c

har

code

zn

ak

i[

17]

=

{1

92,24

9,164

,176

,153

,14

6,13

0,2

48,1

28,

144,1

36,

131

,198

,161

,134

,142

,0};

sbit

W1 =

P2^

0;

sbit

W2 =

P2^

1;

sbit

W3 =

P2^

2;

sbit

W4 =

P2^

3;

void

czekaj(v

oid)

{

c

har

x,y;

for (

x =

25

5;

x

>

0;

--x)

for (y

=

25

5;

y

>

0;

--y);

}

void

ma

in

(void)

{

code

ch

ar

*

pz

nak

i;

p

zna

ki

=

&z

nak

i;

wh

ile(1)

{

W1

=

0;

WYSW =

(*(

zna

ki

+

4));

czek

aj();

W1

=

1;

background image

W2

=

0;

WYSW =

(*(

zna

ki

+

3));

czek

aj();

W2

=

1;

W3

=

0;

WYSW =

(*(

zna

ki

+

2));

czek

aj();

W3

=

1;

W4

=

0;

WYSW =

(*(

zna

ki

+

1));

czek

aj();

W4

=

1;

}

}

Pr

zyk

ład

3.4

.B

AS

Wys

w

Alias

P0

W1

Alia

s P

2.0

W2

Alia

s P

2.1

W3

Alia

s P

2.2

W4

Alia

s P

2.3

Do

Reset

W

1

Wys

w

=

L

ook

up(0

,

Zna

ki)

Wa

itms

1

00

Set

W1

Reset

W

2

Wys

w

=

L

ook

up(1

,

Zna

ki)

Wa

itms

1

00

Set

W2

Reset

W

3

Wys

w

=

L

ook

up(2

,

Zna

ki)

Wa

itms

1

00

Set

W3

Reset

W

4

Wys

w

=

L

ook

up(3

,

Zna

ki)

Wa

itms

1

00

Set

W4

Loop

Z

naki

:

D

ata

19

2 ,

2

49

,

164

,

176

,

15

3 ,

1

46

,

130

,

248

,

12

8 ,

1

44

,

136

,

13

1

,

19

8 ,

1

61

,

134

,

14

2

E

nd

Efektem

dzi

ała

ni

a

pow

y

ższeg

o

prog

ram

u

jest

w

wi

etlan

ie

c

y

fr na

kolejny

ch

w

y

św

ietlaczach

od p

rawej

d

o

lewe

j

stro

ny.

Celo

wo

zast

os

owan

o du

że opóˇnie

nie

w

pr

zeł

ącza

niu

w

wi

etlaczy,

ab

y

lepiej

uz

m

ysłow

za

sadę

s

terow

a

nia

m

ult

ipl

ekso

wanego. P

rzy

t

ak

d

uży

m opóˇnie

niu

dokł

adn

ie

widać

kolejn

o z

apa

la

ne

segmen

ty.

N

as7tępny

przykła

d

zawiera

już no

rm

al

ne

opóˇnie

nie.

Pr

zyk

ład

3.5

.ASM

NAM

E P0

3_05_ASM_SRC

$

INCL

UDE (AT

MEL/REG825

2.INC

)

P0

3_05_ASM S

EGMENT

COD

E

RSEG

P03_05_ASM

WYSW EQU

P0

W1

EQU

P2.0

W2

EQU

P2.1

background image

W3

EQU

P2.2

W4

EQU

P2.3

MOV

DPTR,#ZNAKI

P

ETLA:

CLR

W1

MOV

A,#9

MOVC

A,@

A+DPTR

MOV

WYS

W,A

MOV

A,#5

ACALL

CZEKAJ

S

ETB W1

CLR

W2

MOV

A,#8

MOVC

A,@

A+DPTR

MOV

WYS

W,A

MOV

A,#5

ACALL

CZEKAJ

S

ETB W2

CLR

W3

MOV

A,#7

MOVC

A,@

A+DPTR

MOV

WYS

W,A

MOV

A,#5

ACALL

CZEKAJ

S

ETB W3

CLR

W4

MOV

A,#6

MOVC

A,@

A+DPTR

MOV

WYS

W,A

MOV

A,#5

ACALL

CZEKAJ

S

ETB W4

SJMP P

ETLA

CZ

EKAJ:

MOV

R0,A

L20

:

MOV

R6,#248

L22

:

DJNZ R6,L22

MOV

R6,#248

L21

:

DJNZ R6,L21

DJNZ R0,L20

RE

T

ZNAKI:

DB

192

,249

,164

,176

,153

,146

,130

,24

8,12

8,1

44,1

36,1

31,

198

,161

,134

,142

,0

E

ND

Pr

zyk

ład

3.5

.C

#

inc

lude <

ATME

L\

REG8252.

H

>

#

de

fi

ne

WYSW

P0

c

har

code

zn

ak

i[

17]

=

{1

92,24

9,164

,176

,153

,14

6,13

0,2

48,1

28,

144,1

36,

131

,198

,161

,134

,142

,0};

sbit

W1 =

P2^

0;

sbit

W2 =

P2^

1;

sbit

W3 =

P2^

2;

sbit

W4 =

P2^

3;

background image

void

czekaj(cha

r

k)

{

c

har

x,y,z;

for (

z

=

k;

z

>

0;

--z

)

for (

x =

10

;

x >

0;

--x)

for (y

=

47

;

y

>

0;

--y)

;

}

void

ma

in

(void)

{

code

ch

ar

*

pz

nak

i;

p

zna

ki

=

&z

nak

i;

wh

ile(1)

{

W1

=

0;

WYSW =

(*(

zna

ki

+

4));

czek

aj(5);

W1

=

1;

W2

=

0;

WYSW =

(*(

zna

ki

+

3));

czek

aj(5);

W2

=

1;

W3

=

0;

WYSW =

(*(

zna

ki

+

2));

czek

aj(5);

W3

=

1;

W4

=

0;

WYSW =

(*(

zna

ki

+

1));

czek

aj(5);

W4

=

1;

}

}

Pr

zyk

ład

3.5

.B

AS

Wys

w

Alias

P0

W1

Alia

s P

2.0

W2

Alia

s P

2.1

W3

Alia

s P

2.2

W4

Alia

s P

2.3

Do

Reset

W

1

Wys

w

=

L

ook

up(0

,

Zna

ki)

Wa

itms

5

Set

W1

Reset

W

2

Wys

w

=

L

ook

up(1

,

Zna

ki)

Wa

itms

5

Set

W2

Reset

W

3

Wys

w

=

L

ook

up(2

,

Zna

ki)

Wa

itms

5

Set

W3

Reset

W

4

Wys

w

=

L

ook

up(3

,

Zna

ki)

Wa

itms

5

Set

W4

Loop

background image

Z

naki

:

D

ata

19

2 ,

2

49

,

164

,

176

,

15

3 ,

1

46

,

130

,

248

,

12

8 ,

1

44

,

136

,

13

1

,

19

8 ,

1

61

,

134

,

14

2

E

nd

Efektem

dzi

ała

ni

a

tego

pro

gra

mu

j

est już

stabil

ny

n

ap

is

.

Stało

się

ta

k

dzię

ki bezwł

a

dności lud

zk

iego

oka.

J

ed

nak

wadą

sterowani

a

mul

tip

leksowanego

jest,

c

o

za

p

ew

ne

widać, m

ni

ejsza

jasność

ś

wiecenia

wy

ś

wi

etlaczy

.

W

bi

ąc

ym

przykła

dzie

zmody

fik

owana

został

a

procedura

op

óˇn

iająca.

Li

c

z

po

wtórzeń

pęt

li

opó

ˇ

niającej

mo

żem

y

te

ra

z

wy

bra

ć

z

za

kre

su od 1

do

256,

poprze

z u

mieszczen

ie w

aku

mul

ato

rze

prz

ed

w

y

wo

łaniem

p

rocedury

lic

zb

y

określającej

il

ć powt

órz

eń.

J

ed

no

po

wtórzen

ie

procedury

t

rwa

ok. 1m

s p

rzy

zegar

ze

12MHz.

T

ak

więc

pr

oc

edur

a

zap

e

w

nia

opóˇnien

ie

od

1 do 25

6ms.

C

zęść

4

- M

agi

stral

a

I2C

W

t

ym ćwiczeniu

w

yk

orzy

stamy

dwa doda

tko

we

uk

łady

scalo

n

e

ty

pu

P

CF8

574A

produ

k

cji fi

rmy

Ph

ilips

.

Ukła

d te

n

je

st

8-bito

wy

m

ekspa

nde

rem

ma

gist

ra

li

I2C

.

Lin

ie SDA i

SCL

na

leży

pod

ł

ączy

ć

odpo

wiednio do

p

inów

P2.0

i

P2.

1 m

ik

rokont

role

ra.

Do

w

y

ć

pierwszego

ukł

adu

podłącz

amy

d

iod

y

LED,

a

do

dr

ugie

g

o u

kłądu

n

as

k

lawiat

urę.

Ze

względu n

a

złożoność

procedur

obs

ług

i

ma

gist

ra

li

I2C

pr

zyg

otowan

o d

la

jęz

yka

asemblera

i

C

oddzi

e

l

ne

p

liki

zw

i

erające

podstawo

w

e

p

rocedury

o

bsługi

tej

mag

ist

ral

i

.

M

a to

na

c

e

l

u

un

ik

ni

ę

c

ie

cią

głeg

o p

rze

pisy

wania

s

t

osun

ko

wo

dużego kodu z

awierającego

nie

zbędne p

roc

edu

r

y.

Zamieszc

z

on

e

poni

żej

plik

i

zawie

rają

procedury

z

apewniaj

ące:

-

w

yge

nerowanie

sekw

encji

"START"

-

w

yge

nerowanie

sekw

encji

"STOP"

-

w

ysłanie n

a

mag

ist

ra

ba

j

tu d

anych

-

odcz

ytan

ie z

m

agis

tr

ali

bajtu

danych

P

roc

edury

te pozwalają

na

komu

nik

ację

z

wi

ększoś

cią

ty

po

wy

ch

ukł

adów

scalonych

z

a

wi

erający

ch i

nte

rfejs

I

2C

p

rac

ując

y

w

t

ryb

ie

"MASTER-SLAVE".

Pl

ik

I2C.

ASM

;

;

P

roc

edur

a

gene

rująca

sekw

encję

START

;

I

2C_START:

S

ETB SDA

S

ETB SCL

ACALL

DELAY

CLR

SDA

ACALL

DELAY

CLR

SCL

RE

T

;

;

P

roc

edur

a

gene

rująca

sekw

encję

STOP.

;

St

an

li

ni

i

S

DA

zostaje

z

ap

ami

ęta

ny

po

zakoń

czeni

u

;

t

ra

ns

mis

ji

w

e

w

skaˇ

niku

prz

eni

esien

ia

C

.

;

I

2C_STOP:

CLR

SDA

ACALL

DELAY

S

ETB SCL

ACALL

DELAY

S

ETB SDA

background image

ACALL

DELAY

MOV

C,SDA

RE

T

;

;

P

roc

edur

a

odcz

ytują

ca

ba

jt

z

mag

ist

ra

li

I2C

.

;

Wa

rtość bitu

ACK

nal

eży

p

rze

kaz

ać do p

roce

d

ury

poprze

z

;

wskaˇn

ik

p

rze

nies

ieni

a

C.

;

O

d

czytany

bajt

j

est um

ieszcza

ny

w

ak

umul

ato

rze

.

;

I

2C_READ:

MOV

ACK,C

S

ETB SDA

MOV

R0,#8

L0:

ACALL

DELAY

S

ETB SCL

ACALL

DELAY

MOV

C,SDA

RLC

A

CLR

SCL

DJNZ R0,L0

MOV

C,ACK

MOV

SDA,C

ACALL

DELAY

CLR

SCL

RE

T

;

;

P

roc

edur

a

w

ys

y

łają

ca

ba

jt

na

ma

gist

ra

I2C.

;

St

an

bitu

ACK jest

zwrac

any

poprze

z

w

skaˇn

ik

p

rze

nie

sieni

a

C.

;

Bajt

d

o wy

słani

a

na

leży

umieścić w

aku

mul

ator

ze.

;

I

2C_WRITE:

MOV

R0,#9

S

ETB C

L1:

CLR

SCL

RLC

A

MOV

SDA,C

ACALL

DELAY

S

ETB SCL

ACALL

DELAY

DJNZ R0,L1

MOV

C,SDA

CLR

SCL

RE

T

D

ELAY:

NOP

NOP

RE

T

Pl

ik

I2C.

C

void

delay(

void

)

{

a

sm{0x

00};

background image

a

sm{0x

00};

}

void

I2C_S

TART(

void)

{

SDA

=

SCL

=

1;

de

la

y();

SDA

=

0;

de

la

y();

SCL

=

0;

}

bit

I2C

_STOP(v

oid

)

{

SDA

=

0;

de

la

y();

SCL

=

1;

de

la

y();

SDA

=

1;

de

la

y();

r

etur

n

(

~SDA);

}

u

nsi

gned

char

I

2C_READ(bit ACK

)

{

u

nsi

gned

char

bit

C

ou

nt

=

8

,

temp;

SDA

=

1;

do

{

de

la

y();

SCL

=

1;

de

la

y();

te

mp

<<=

1;

if

(SDA)

temp

++;

SCL

=

0;

}

while

(--bi

t

Coun

t)

;

SDA

=

ACK;

de

la

y();

SCL

=

1;

de

la

y();

SCL

=

0;

r

etur

n

(

temp);

}

bit

I2C

_WR

ITE

(un

sign

ed

cha

r

b

yt

e)

{

u

nsi

gned

char

bit

C

ou

nt

=

9

;

bit

tem

p;

do

{

SCL

=

0;

SDA

=

b

yt

e

&

0x80

;

by

te

=

(by

te

<

<

1)

+

1;

de

la

y();

SCL

=

1;

de

la

y();

background image

}wh

ile(--bitCou

nt);

te

mp

=

SDA;

SCL

=

0;

r

etur

n

(te

mp)

;

}

Pr

zyk

ład

4.1

Pr

zyk

ład

4.1

.ASM

NAM

E P0

4_01_ASM_SRC

$

INCL

UDE (AT

MEL/REG825

2.INC

)

P0

4_01_ASM S

EGMENT

COD

E

RSEG

P04_01_ASM

SDA

EQU

P2.0

SCL

EQU

P

2.1

ACK

EQU

00h

ACALL

I2C

_START

MOV

A,

#70

h

ACALL

I2C

_W

RITE

MOV

A,

#25

4

ACALL

I2C

_W

RITE

ACALL

I2C

_STOP

SJMP $

$

INCL

UDE (I

2C.ASM)

E

ND

Pr

zyk

ład

4.1

.C

#

inc

lude <

ATME

L/REG8252.H>

#

inc

lude "

I2C.H"

void

ma

in

(void)

{

I

2C_START();

I

2C_WRITE(0x

70);

I

2C_WRITE(0xF

E);

I

2C_STOP()

;

wh

ile(1);

}

P

rzykład

4.1

.BAS

Co

nfig Sda

=

P

2.0

Co

nfig Scl

=

P2.1

I

2cstar

t

I

2c

wb

y

te

&H7

0

I

2c

wb

y

te

&HF

E

I

2cst

op

Do

Loop

E

nd

Efektem

dzi

ała

ni

a

tego

pro

gra

mu

j

est włączen

ie diody

LED D1

.

Troc

hę uwagi

na

leży

poś

wię

cić

prog

ra

mow

i

w

a

semblerze i

zyk

u C.

background image

W

asemblerze

dołączen

i

e

wsp

om

nia

nego wcze

ś

niej

plik

u

z

podstaw

ow

ym

i

procedur

ami

nas

pił

o

pr

zy

u

ż

yciu

dyrekty

w

y

"$INCLUDE". Dyr

ekty

wa

t

a

pow

oduj

e

wstawian

iu

w

je

j

miejsc

e

pr

zez

kompi

lato

r

asemblera

z

awar

toś

ci

plik

u

w

ska

zane

g

o

dyrekt

yw

ą. T

ak

więc

dwa fizy

czne

plik

i

zawier

ające

kod

ˇró

dło

wy

w

czas

ie

komp

ila

c

ji

łączo

n

e

w

j

eden.

Kon

s

ekwenc

tego

j

est fak

t,

że cok

olw

iek z

adekl

aru

jem

y

w

pli

ku

pierwszym

będzie to ob

ow

i

ą

zy

wało

równie

ż w

plik

u

dr

ugi

m.

D

latego pomi

mo

pozorn

ego

niewy

korzy

st

yw

ani

a bitów

SDA i

SCL

pr

zez

prog

ra

m

w

plik

u

P04_0

1_ASM_S

RC.A5

1 um

ieszczona

tam

de

k

lar

acja

jest

koniecz

na

do

pop

rawnego

dzi

an

ia

pr

oc

edu

r

zawar

t

ych

w

p

liku

I

2C.ASM

.

T

rochę

in

acz

ej

ta

spr

awa

pr

zedstawi

a się

w

jęz

yku

C

.

Pli

k I2

C.C

zosta

ł

dodany

d

o p

roje

k

tu

z

a

pomo

cą polecenia

"Ad

d no

de

Source

/

Applic

ation

" z

menu

RI

DE

IDE

.

Pliku

ˇ

ródło

wym

na

szego p

rogr

amu

umiesz

czamy

dyrekty

"#i

ncl

ude "I2

C.H"".J

est

to

dy

re

kt

y

wa

pre

proce

sora

włączająca

plik

n

ag

łówko

w

y

do

plik

u

ˇ

ródłow

ego.

ˇ

ródłow

ego

pli

ku

na

główko

w

ym

umi

e

s

zczone są

pro

tot

yp

y

p

rocedur

zawa

rtych w

plik

u

I2C

.C.

W

Bas

comie

spr

awa p

rz

edstawia

się zu

pełn

ie

pros

t

o,

ponieważ

o

bsługa

magi

str

al

i

I

2C

j

est wbud

owa

n

a

w

komp

ila

tor

i

n

ie

ma

pot

rzeb

y

z

awrac

ani

a

s

obie

głow

y

dołącza

niem

jakichko

l

wiek dodatkow

yc

h pl

ikó

w

a

pr

zede

wszy

stkim

samodzie

lne

g

o op

rogra

mow

y

wania

tra

ns

m

isji.

W

t

ym mo

mencie

prz

e

wa

ga

Ba

scoma n

ad

a

semblerem

i

C

j

est n

ajbar

dzi

ej

wido

czna

.

Aby

korzystać

z

ma

gist

ra

li

I2C

ni

e

potrz

e

bujemy

z

nać

dokł

adn

ie

p

rotokołu

tr

an

sm

isji

,

w

ys

tarc

z

y

t

ylko

podł

ącz

do

procesora

od

powi

ednio

lin

ie

SDA i

SCL

i

możemy

w

p

rost

y

sposó

b

ste

ro

wać

ukła

dam

i

p

rze

z

I2C.

Pr

zyk

ład

4.2

.ASM

NAM

E P0

4_02_ASM_SRC

$

INCL

UDE (AT

MEL/REG825

2.INC

)

P0

4_02_ASM S

EGMENT

COD

E

RSEG

P04_02_ASM

SDA

EQU

P2.0

SCL

EQU

P

2.1

ACK

EQU

00h

S

TART:

ACALL

I2C

_START

MOV

A,

#72

h

ACALL

I2C

_W

RITE

MOV

A,

#0FFh

ACALL

I2C

_W

RITE

ACALL

I2C

_STOP

ACALL

I2C

_START

MOV

A,#73

h

ACALL

I2C

_W

RITE

MOV

A,#0

ACALL

I2C

_READ

ACALL

I2C

_STOP

MOV

R4, A

ACALL

I2C

_START

MOV

A,#70

h

ACALL

I2C

_W

RITE

MOV

A,R4

ACALL

I2C

_W

RITE

ACALL

I2C

_STOP

SJMP S

TART

$

INCL

UDE (I

2C.ASM)

E

ND

Pr

zyk

ład

4.2

.C

#

inc

lude <

ATME

L/REG8252.H>

#

inc

lude "

I2C.H"

background image

void

ma

in

(void)

{

u

nsi

gned

char

tem

p;

wh

ile(1)

{

I

2C_START();

I

2C_WRITE(0x

72);

I

2C_WRITE(0xFF

);

I

2C_STOP()

;

I

2C_START();

I

2C_WRITE(0x

73);

te

mp

=

I2C_READ(1);

I

2C_STOP()

;

I

2C_START();

I

2C_WRITE(0x

70);

I

2C_WRITE(tem

p);

I

2C_STOP()

;

}

}

Pr

zyk

ład

4.2

.B

AS

Co

nfig Sda

=

P

2.0

Co

nfig Scl

=

P2.1

D

im

Temp

As

B

yt

e

Do

I

2cstar

t

I

2c

wb

y

te

&H7

2

I

2c

wb

y

te

&HF

F

I

2cst

op

I

2cstar

t

I

2c

wb

y

te

&H7

3

I

2crb

yte

Tem

p

,

9

I

2cst

op

I

2cstar

t

I

2c

wb

y

te

&H7

0

I

2c

wb

y

te

Tem

p

I

2cst

op

Loop

E

nd

Pow

y

ższ

y

pro

gra

m

odczy

tuje

sta

n

k

lawiat

ury

i

zap

al

a

diodę

LED

o

n

ume

rze

odpowiadając

ym

n

aciś

ni

ętemu

p

rzycisk

owi

kl

awiatu

ry, czyli

odcz

ytuj

e

s

t

an

we

ć

pierwszego

u

kładu

PCF8574

i

pr

zesy

ła go n

a

w

y

cia

d

rug

iego

ukł

adu

PCF857

4

C

zęść

6

- W

yświe

tlac

z

LCD

Pr

zyk

ład

6.1

.ASM

NAM

E P0

6_01_ASM_SRC

$

INCL

UDE (AT

MEL/REG825

2.INC

)

P0

6_01_ASM S

EGMENT

COD

E

RSEG

P06_01_ASM

background image

PORTLCD EQU P2

RS

EQU

PORTLCD.2

E

EQU

P

ORTLCD.3

D7

EQU

PORTLCD.7

D6

EQU

PORTLCD.6

D5

EQU

PORTLCD.5

D4

EQU

PORTLCD.4

CL

EA

R E

Q

U 01H

HOME EQU 02H

IN

C

REM

ENT

EQU

04H

D

ECREMENT

E

QU

0

6

H

SHIFTR

I

G

HT

EQU

07H

SHIFTLEFT

EQU

05H

BLINK

EQU

09H

NOBLINK

E

QU

0

8

H

CURON

EQU 0AH

CUROF

F

EQU

08H

DISPON E

Q

U 0

C

H

DISPOFF E

Q

U

08H

SHIFT_CU

RSOR

_LEFT E

Q

U 10H

SHIFT_CU

RSOR

_RI

GHT

EQ

U 1

4

H

SHIFT_DISPLAY_

LEF

T

EQU

18H

SHIFT_DISPLAY_

RIGH

T EQU 1CH

S

TART:

ACALL

LCD_INIT

MOV

DPTR,#NAPIS1

ACALL

WRITE_T

EXT

SJMP $

WRITE_

TO_LCD:

PUSH

ACC ;

zap

ami

ętaj

zawa

rtość

aku

mul

ator

a

na

s

t

osie

S

ETB E

;u

staw na

l

in

ii

E

sta

n

wy

so

ki

ORL

PO

RTLCD,

#0F0H

;us

taw

4

sta

rsze

bity

port

u P1

ORL

A,#0FH

;ustaw

4 m

łodsze

bity

aku

mul

ator

a

ANL PORTLCD,A

;iloczyn

logicz

n

y

port

u

P1 i

ak

umu

lato

ra

;

po

wo

duje

z

mia

tylko

4

st

ars

z

ych

bit

ów

por

tu

4

młodsze bez z

mia

n

CLR

E;opa

dające

zbo

cze

na

E

z

apisu

j

e do rejestr

u

w

wi

etlacza

POP

ACC ;

przywróć

początkową

zawa

rtość

akum

ula

tor

a

SWAP A

;z

amie

ń

m

iejscami

połó

wki

aku

mul

ator

a

S

ETB E

;u

staw na

l

in

ii

E

sta

n

wy

so

ki

ORL

PO

RTLCD,

#0F0H

;us

taw

4

sta

rsze

bity

port

u P1

ORL

A,#0FH

;ustaw

4 m

łodsze

bity

aku

mul

ator

a

ANL PORTLCD,A

;iloczyn

logicz

n

y

port

u

P1 i

ak

umu

lato

ra

;

po

wo

duje

z

mia

tylko

4

st

ars

z

ych

bit

ów

por

tu

4

młodsze bez z

mia

n

CLR

E

;opad

ające

zb

ocze

n

a

E

zap

isuje

do

rejestru

wy

ś

wie

t

lac

z

a

MOV

A,#1

;opóˇnie

nie

ok. 1

ms

LCALL

DELAY

RE

T

WRITE_

COMMAND:

CLR

RS

;0

na

RS

->

za

pis

do

rejestru

ro

zka

w

LCALL

WR

IT

E_TO_LCD

;za

pis

bajtu do r

e

j

e

st

ru

wy

ś

wi

etlacz

a

RE

T

WRITE_

C

HAR:

S

ETB RS

;1

na

RS

->

za

pis

do

pam

ięci

o

bra

zu

LCALL

WR

IT

E_TO_LCD

;

za

pis

bajt

u

do

rejestr

u

w

wi

etlacza

RE

T

WRITE_

TEX

T:

MOV

R7,#0

;w

yz

eruj r

eje

st

r

r7

M0

:

background image

MOV

A,R7 ;p

rze

nie

ś do ak

umu

lato

ra

rejestr

r7

MOVC

A,@

A+DPTR

;pr

ześlij

bajt z

p

amięci

kodu do

aku

mul

ato

ra

JZ M1

;jeśli

t

e

n

bajt jest ze

rem

to

skocz

do

końca

procedury

LCALL

WR

IT

E_CHA

R

;w

wi

etl z

na

k

n

a

w

y

św

iet

l

aczu

IN

C R7 ;z

w

ięk

s

z

ad

res

zna

ku

o

1

AJMP

M0 ;skocz n

a

p

ocząt

e

k

pętli

M1

:

RE

T

D

EFINE_CHARA

CT

ER

S:

MOV

A,#40H ;u

staw

t

r

yb

z

ap

isu

zna

ków

do

pami

ęci gene

ra

tor

a

zn

aków

LCALL

WR

IT

E_COMMAND

MOV

DPTR,#CHA

R_PL

;d

o

DPTR

wpisz ad

res

tabli

c

y

z

definicja

mi

zn

aków

LCALL

WR

IT

E_TE

XT

;i

z

ap

isz

te z

na

ki

do

pam

ięci ge

ner

ator

a

z

nak

ó

w

MOV

A,#80H ;powróć

do t

r

ybu

zap

isu

zn

aków

do

pam

ięci obrazu

LCALL

WR

IT

E_COMMAND

RE

T

LCD_

CL

S:

MOV

A,#CL

E

AR ;

do

akum

ul

ator

a

z

apisz

kod

rozka

zu

czy

szczeni

a

ekr

anu

LCALL

WR

IT

E_COMMAND

RE

T

LCD_LOWERL

INE

:

MOV

A,#0A

8

H

LCALL

WR

IT

E_COMMAND

RE

T

LCD_SHIFT_LEFT:

MOV

A,#SHIFT_DISPLA

Y_LEFT

LCALL

WR

IT

E_COMMAND

RE

T

LCD_SHIFT_R

I

G

HT:

MOV

A,#SHIFT_DISPLA

Y_RIG

HT

LCALL

WR

IT

E_COMMAND

RE

T

CURS

OR_S

HIFT_

LEF

T:

MOV

A,#SHIFT_CU

RSOR

_LEFT

LCALL

WR

IT

E_COMMAND

RE

T

CURS

OR_S

HIFT_

RIGHT:

MOV

A,#SHIFT_CU

RSOR

_RI

GHT

LCALL

WR

IT

E_COMMAND

RE

T

LCD_INI

T:

MOV

A,#0FH

LCALL

DELAY

CLR

E

CLR

RS

MOV

R0,#3

LL:

S

ETB E

ANL PORTLCD,

#3FH

CLR

E

;z

ap

is do wy

ś

wie

tlacz

a

MOV

A,#5

LCALL

DELAY ;czek

aj

ok. 5

ms

DJNZ R0,LL

;powt

ór

z i

nicja

liz

ację

3

r

azy

S

ETB E

ANL PORTLCD,

#2FH

CLR

E

MOV

A,#01H

LCALL

DELAY

MOV

A,#28H

LCALL

WR

IT

E_COMMAND

background image

MOV

A,#08H

LCALL

WR

IT

E_COMMAND

MOV

A,#01H

LCALL

WR

IT

E_COMMAND

MOV

A,#06H

LCALL

WR

IT

E_COMMAND

MOV

A,#0CH

LCALL

WR

IT

E_COMMAND

;L

CAL

L DEF

INE_CHAR

ACTERS

RE

T

D

ELAY:

MOV

R3,A

L1:

MOV

R2,#10

L2:

MOV

R1,#47

L3:

DJNZ R1,L3

DJNZ R2,L2

DJNZ R3,L1

RE

T

CHAR_

PL:

DB

32,

32,

14

,

1,

15,

1

7,

15

,

2,

;

ą

(8)

DB

2,

4

,

14,

16

,

16,

17

,

14

,

32,

(9)

DB

32,

32,

14

,

17,31

,

16

, 1

4 ,

4,

;ę (

10)

DB

12,

4,

6,

12

,

4,

4,

1

4,

32,

;

ł

(11)

DB

2,

4

,

22,

25

,

17,

17

,

17,

32

,

(12)

DB

2,

4

,

15,

16

,

14,

1,

30,

32,

;ś (

13)

DB

32,

4,

31,

2

,

4,

8,

3

1,

32,

;

ż

(14)

DB

2,

4

,

31,

2,

4,

8,

3

1,

32,

(

15)

DB

0

NAPIS1:

DB

"ABCDEFGH

IJKLM

NO",0

E

ND

Pr

zyk

ład

6.1

.C

#

inc

lude <

ATME

L/REG8252.H>

#

de

fi

ne

PORT P2

sbit

RS

=

PO

RT

^2;

sbit

E

=

PORT^3;

sbit

D4

=

P

ORT

^4;

sbit

D5

=

P

ORT

^5;

sbit

D6

=

P

ORT

^6;

sbit

D7

=

P

ORT

^7;

void

Delay

(cha

r

k

)

{

c

har

x,y;

wh

ile(k)

{

k

--;

for (

x =

24

8;

x

>

0 ;

x

--);

for (y

=

24

8;

y

>

0 ;

y-

-);

}

}

void

Wri

teToLcd(

c

har

X)

{

E

=

1;

PORT

|= 0xF

0;

PORT

&=

(X

|

0x0F)

;

E

=

0;

background image

E

=

1;

X

<<

=

4;

PORT

|= 0xF

0;

PORT

&=

(X

|

0x0F)

;

E

=

0;

Del

a

y(1);

}

void

Wri

teComma

nd

(ch

ar

X)

{

RS

=

0;

W

rit

eTo

Lcd(X);

}

void

Wri

teC

ha

r(c

ha

r

X)

{

RS

=

1;

W

rit

eTo

Lcd(X);

}

void

Wri

teText

(cha

r

*S)

{

wh

ile(*S)

{

W

rit

eCha

r

(*S);

S

++;

}

}

void

De

f

ineCh

ar

acte

rs(ch

ar

*z

na

ki)

{

W

rit

eC

o

mma

nd(

0x40

);

W

rit

eText(z

na

ki

);

W

rit

eC

o

mma

nd(

0x80

);

}

void

Lc

d

Ini

t(void)

{

c

har

i;

Del

a

y(15);

PORT

=

0x0F;

for (

i =

0;

i<3;

i+

+)

{

E

=

1;

PORT

&=

0x3F

;

E

=

0;

Del

a

y(5);

}

E

=

1;

PORT

&=

0x2F

;

E

=

0;

Del

a

y(1);

W

rit

eC

o

mma

nd(

0x28

);

W

rit

eC

o

mma

nd(

0x08

);

W

rit

eC

o

mma

nd(

0x01

);

W

rit

eC

o

mma

nd(

0x06

);

W

rit

eC

o

mma

nd(

0x0C)

;

}

void

ma

in

(void)

{

LcdIn

it(

);

W

rit

eText("ABCDEFGHI

JKLMN

O");

wh

ile(1);

}

background image

Pr

zyk

ład

6.1

.B

AS

Co

nfig Lcd

=

1

6 *

2

Co

nfig Lcdpin

=

Pin

,

Db4

=

P2.4

,

Db5 =

P

2.5

,

Db6

=

P2.6

,

Db7

=

P2.

7 ,

E

=

P2.3

,

Rs

=

P2.2

C

ursor

Off

C

ls

Lcd "ABCDEFGHI

JKLM

NO"

Do

Loop

E

nd


Wyszukiwarka

Podobne podstrony:
Programowanie mikrokontrolerow 8051 w jezyku C
Podstawy Programowania Mikrokontrolera 8051
Galka Galka Podstawy Programowania Mikrokontrolera 8051
Podstawy programowania mikrokontrolera 8051
Podstawy programowania mikrokontrolera 8051(300dpi)
Podstawy programowania mikrokontrolera 8051
Marcin Wiazania Programowanie mikrokontrolerow AVR w jezyku Bascom
Podstawy programowania mikrokontrolera 8051(300dpi)
Galka Galka Podstawy Programowania Mikrokontrolera 8051
Podstawy Programowania Mikrokontrolera 8051
Podstawy programowania mikrokontrolera 8051
Konfiguracja pamięci mikrokontrolera 8051 dla programów napisanych w języku C
Konfiguracja pamięci mikrokontrolera 8051 dla programów napisanych w języku C
kurs programowania w języku ms basic, Programowanie mikrokontrolerów
ZL5PRG Programator mikrokontrol Nieznany
Programowanie współbieżne i rozproszone w języku Java stpiczynski
AVR i ARM7 Programowanie mikrokontrolerow dla kazdego avrar7

więcej podobnych podstron