You are on page 1of 29

PIC TANFOLYAM 1.1 AZ INFORMÁCIÓFELDOLGOZÁS ÁLTALÁNOS MODELLJE.

KÖRNYEZET (KÜLVILÁG)
Adatok és utasítások
Dr. Kónya László: memória
(tároló) tárolása
http://alpha1.obuda.kando.hu/~konya BEMENET KIMENET
beviteli központi kiviteli
konya@novserv.obuda.kando.hu eszközök egység eszközök

Utasítások végrehajtása
PIC MIKROKONTROLLEREK
Algoritmus: hogyan hozzuk létre a kimeneti információit a
bemeneti információból.
ALKALMAZÁSTECHNIKÁJA Program: az algoritmus számítógépen történő megvalósítása,
utasítások sorozata
A program határozza meg hogy mit végezzen el, és ez
Tanfolyami tananyag cserélhető!!!
2000 Megvalósítás: digitális áramkörökkel: MIÉRT két állapottal?
2000.09.02
1 PIC TANFOLYAM 3 PIC TANFOLYAM

1. BEVEZETÉS 1.2 A MIKROSZÁMÍTÓGÉPEK ALAPÁRAMKÖREI

BEMENETI

Jelenleg az informatika forradalma zajlik.


KIMENETI
BITEK & S S
BITEK
& 1
+ Logikai Aritmetikai
S műveletvégző
Két sokkoló dátum:
& műveletvégző L
D
&
& C
1 + 1 &

• 1971 - az első 4 bites mikroprocesszor INTEL 4004: &

& A B
& & & +
& C i -1
csak 28 év !!! 1=ENG
TELJES ÖSSZEADÓ
Ci
1
+
KAPUZÁS S=A+B+D & 1 &
&

• 1981 - az IBM PC megjelenése: A B D S C


0 0 0 0 0
Ci
V01 V A B V04 A B
C i -1
D Q 03
0 0 1 1 0 V02

csak 18 év !!! CLOCK


0
0
1
1
0
1
1
0
0
1
V01 V02 V V04
1 0 0 1 0 03
D Q 1 0 1 0 1
• A számítógépek részt vesznek az újabb számítógép- CLOCK
1
1
1
1
0
1
0
1
1
1
& & & &
Vezérlő logika

generációk előállításában - evolúció ?!


V V
0 1
D Q

CLOCK V0 V1
1-bites ALU
A B
BEIRÓJEL UTASITÁS = MŰVELETI KÓD + OPERANDUSOK
TÁROLÓSOR=REGISZTER
2 PIC TANFOLYAM 4 PIC TANFOLYAM
1.3 A MIKROSZÁMÍTÓGÉPEK ÁLTALÁNOS FELÉPÍTÉSE 1.5 CISC PROCESSZOROK - MIKROPROGRAMOZÁS

Vezérlő busz Mikroszámítógép: Vezérlőegység MEMR,MEMW VEZÉRLŐ


IRQ
µProgram tár IOR,IOW BUSZ
IOW
IOR IC-k-ből áll
MEMW
MEMR fejlődés: ALU Regiszterek
- kártyamodulok Utasításregiszter IR
ÓRA µµPP Memória
Memória I/O
I/O
Állapotjelző
- egy kártyán:(SBC)
Léptető Utasításszámláló PC
CÍMBUSZ - egy tokban:
Komplementáló Akkumulátor A

Belső busz
mikrokontroller
ADATBUSZ Latch Adatszámláló DC
= (mikrovezérlő)
Sín, vagy busz: azonos funkciójú vezetékek összessége (cím, Összeadó CÍM BUSZ
Címregiszter A0-A15
adat, és vezérlő busz Boole-logika

a processzor szemszögéből a memória és I/O megkülönböztetés nem indokolt ADAT


Adatregiszter D0-D7
az I/O regiszter olyan memória amelyeknek másik oldala a külvilágra „nyílik” BUSZ
Buffer
A mikrogépek teljesítményének meghatározására elterjedt egy nem teljesen
objektív, de elfogadott jellemző, a MIPS. Ez azt mutatja meg, hogy hány
utasítást képes az adott eszköz egy másodperc alatt végrehajtani. PC-program counter, DC - data counter, IR-utasításregiszter, AC - akkumulátor
5 PIC TANFOLYAM 7 PIC TANFOLYAM

1.4 AZ UTASÍTÁS-VÉGREHAJTÁS FOLYAMATA. PROGRAM=UTASÍTÁSOK 1.6 RISC PROCESSZOROK.


2 utasításlehívás U1 U2 U3 U4 ....

4 operandus lehívás Ha egyszerűbb a felépítés, egyszerűbb, de gyorsabb a hardver is.


UTASÍTÁSCIKLUS
operandus beírás
7
M1 M2 M3
RISC processzorok főbb jellemzői:
program GÉPI CIKLUSOK
cím -
dekó-
ALU ÜTEM ÜTEM ÜTEM ÜTEM
• Kevésbé bonyolult utasítások; a felhasználói terület
doló
adatok DC elemzése alapján a bonyolult utasítások elhagyása. Az
UTASITÁS: 1. UTASÍTÁS LEHÍVÁS
AC
6
CU 2. UTASÍTÁS VÉGREHAJTÁS utasítások végrehajtásához egy gépi ciklust
1
5
PC
Egy utasítás használnak fel.
operandus olvasás
műv. op. cím IR végrehajtásának lépései:
vezérlés
1,2,3 - utasítás lehívás
• Kevés utasítás (<128) és címzési mód(2-4) használata.
3 utasítás olvasás
4,5,6,7 - utasítás
végrehajtás
• Az utasítások végrehajtásához nincs mikroprogram; az
ALU - Aritmetikai- logikai egység utasítás = művelet (mit?) + igen bonyolult fordítóprogram állítja el a végs
CU - Vezérlő egység operandus(ok) (mivel?) formát.
Funkcionális egységek: PC-program counter, DC - data • Az utasítások rögzített hosszúságúak, hosszuk nem
counter, IR-utasításregiszter, AC - akkumulátor változik
Neumann elv: közös program és adatmemória
6 PIC TANFOLYAM 8 PIC TANFOLYAM
1.7 MIKROKONTROLLEREK FELÉPÍTÉSE 2.0 PIC ARCHITEKTÚRA: RISC-TULAJDONSÁGÚ
A nagy teljesítmény okai:
Mikrokontroller vagy mikrovezérlő: mikroszámítógép egy tokban
Harvard architektúra Data Program
CPU
Memory Memory
8 12
CSALÁDOKNÁL KÖZÖS VÁLTOZÓ Eltérő szélességű adat és 14
programbusz 16

Időzítő/számláló egység
Minden utasítás egyszavas
Reset áramkör Aritmetikai - logikai egység
Regiszter fájl szervezés
(ALU) Soros I/O Harvard felépítés két külön
Óragenerátor
Vezérlő egység Párhuzamos I/O LWI (Long Word Instruction) tárolót: egy adat és egy
Utasításszámláló Egyéb Utasítás csővonal (pipelining) programtárolót használ,
Központi egység (CPU)
Egyciklusos utasítások
megszűnik a sorban állás a
Programtároló Adat tároló
memóriáért
Csökkentett utasításkészlet
Cimzés PERIFÉRIÁK
Ortogonális utasításkészlet
A mikrokontroller belső felépítése Nagyobb áteresztő-képesség

A PERIFÉRIÁK HASZNÁLATA CSÖKKENTI A CPU TERHELÉSÉT


(a perifériakezelés hardveres megoldása miatt)
9 PIC TANFOLYAM PIC TANFOLYAM

2. PIC MIKROKONTROLLEREK 2.1 UTASÍTÁS = MŰVELETI KÓD + OPERANDUS


OTP
Gyors utasításvégrehajtás rugalmasság AZ UTASITÁSHOSSZ A DÖNTŐ !!!
INTEL MEGOLDÁS: A MÜVELETI KÓD + OPERANDUS MINDIG EGÉSZ
BÁJT HOSSZÚSÁGÚ, MERT A PROGRAM ÉS ADATMEMÓRIA KÖZÖS
PIC16CXX
PIC: KÜLÖN PROGRAM- ÉS KÜLÖN ADATMEMÓRIA
Data Program
Perifériák széles köre Szabad és CPU
sok forráskód U4 16C54/56 Memory
8 12
Memory

Kis fogyasztás Kódvédelem 1 18


14
Gyors perifériák, órajel @ 20 MHz
RA2 RA1 16
Utasítás-ciklusidő 200 ns 2 17
I/O váltás üteme 200 ns 3
RA3 RA0
16
A NAGYOBB BITSZÁMÚ UTASÍTÁSHOSSZ MIATT EGY SZÓBAN ELFÉR MIND
RTCC OSC1
Komparálási idő 200 ns 4 MCLR OSC2/CLKOUT 15 A MŰVELETI KÓD, MIND AZ OPERANDUS (CÍME) !!!
Input Capture Resolution
(with divide by 16 prescaler)
200 ns
50 ns
5 VSS (GND) VDD 14
FELOSZTÁS A CSALÁDOK SZERINT FONTOS !!!
6 RBO RB7 13
PWM felbontás (8- és 10-bit) 50 ns
PWM frekvencia 8-bit 80 KHz
7 RB1 RB6 12 12 BITES: 7 BIT MŰVELETI KÓD 5 BIT OPERANDUS CÍM 16C5XX
10-bit 20 KHz 8 RB2 RB5 11
9 RB3 RB4 10 14 BITES: 7 BIT MŰVELETI KÓD 7 BIT OPERANDUS CÍM 16CXX
SCI (USART) Aszinkron sebesség 312.5-KBaud
Szinkron sebesség 5000-KBaud
16 BITES: 8 BIT MŰVELETI KÓD 8 BIT OPERANDUS CÍM 17CXX, 18CXX
SPI Master adatsebesség 5 MHz
Slave adatsebesség 2.27 MHz MIND AZ UTASÍTÁSBAN SZEREPLŐ MEMÓRIACÍM, MIND AZ OPERANDUSCÍM
A/D konverziós sebesség 16 - 20 µsec TARTOMÁNYA ERŐSEN BEKORLÁTOZOTT !!! -> EZÉRT LAPOZÁS
Adat EEPROM Írási idő 10 ms (PROGRAMMEMÓRIA), ILLETVE BANKVÁLTÁS (ADATMEMÓRIA)
Irási szám 1 M E/W (Typical)
PIC TANFOLYAM
ALKALMAZÁSA PIC TANFOLYAM
2.4 14 BITES PIC UTASÍTÁSOK
2.2 PIC MIKROKONTROLLEREK FELÉPÍTÉSE FELÉPÍTÉSE
RTCC láb OSC1 OSC2 MCLR
9-11 • Utasítások közvetlen op-code d f f f f f f f
címzéssel
EPROM 9-11 STACK1 Konfigurációs EPROM
6-bit 1 7-bites regiszter cím
512 x 12 PC műveleti kód cél = 128 bájtos adatmemória lap
STACK2 Oscillátor
(f2) WATCHDOG kiválsztás • Utasítások állandóval op-code x x k k k k k k k k
12
2
Oscillátor vezérlő literál = konstans 4-bit 8-bit
WDT/RTCC regiszter műveleti kód literal érték
Utastás op-code k k k k k k k k k k k
CLKOUT • GOTO, CALL
regiszter Előosztó
WDT ki 3-bit 11-bites célcím
12 9 8 műveleti kód = 2K program memória lapméret
Opciós Opció SLEEP Speciális utasítások x x op-code
• 00 0000
regiszter NOP, SLEEP, CLRW
6
Utasítás 8-bit op-code
w regisztertől Általános OPTIONS, TRIS,
dekódoló
Közvetlen cím célú CLRWDT
Közvetlen RAM cím Hogyan tárolhatók a program memóriában adatok (állandók)?
regiszter
8
STATUS (f3)
5 • RETLW utasítás használható állandó értéknek W regiszterbe töltésére
RTCC (f1) FSR (f4) • Nagyon hasznos táblázatoknál
5-7 4
Adat BUSZ CALL TABLE ; W-ben az eltolás (table offset)
MOVWF PORTA ; W now has table value
Literals w •
ALU TRIS 5 8 TRIS 6
4 8 •
w regisztertől
w regisztertől TABLE ADDWF PC ; W = offset, PC=PC+offset
TRISA f5 TRISB f6 RETLW k0 ; A tábla kezdete
RETLW k1 ;

PIC16C56 FELÉPÍTÉSE RA0-RA3 4 RB0-RB7 8 •

RETLW kn ; A tábla vége
PIC TANFOLYAM PIC TANFOLYAM

• Az utasításciklus az órafrekvencia 1/4-e


2.3 UTASÍTÁSCIKLUS, 2.4.1 UTASÍTÁSTÍPUSOK
PIPELINE
• A cikluidő 200 ns 20 MHz-es óránál, 1 mikrosec 4 MHz-nél

Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
LOGIKAI: AND, OR, XOR, NOT
OSC1 ARITMETIKAI + SHIFT: ADD, SUB, CLR, DEC, DECSZ,
Q1 INC, INCSZ,RL,RR, SWAP, TEST
Q2
BIT: CLRB, SETB, SB, SNB
Q3

Q4
ADATMOZGATÓ: MOV
OSC2 PROGRAMVEZÉRLŐ: CALL, JMP, NOP, RET, RETI,
1
instruction RETLW
cycle

Megjegyzés:: általában: Q1 = Dekódolás Q2 = Olvas Q3 = Végrehajt Q4 = Írás


RENDSZERVEZÉRLŐ: SLEEP
Operandussorrend:
Honnan -> hova 1. MOVLW 55h Fetch 1 Execute 1 PIPELINE
MOV=mozgasd 2. MOVWF PORTB Fetch 2 Execute 2
L = literal (konstans) 3. CALL SUB_1 Fetch 3 Execute 3
F = fájlregiszter 4. BSF PORTA,BIT3 Fetch 4
B = bit Fetch SUB_1
S = set (1-be ír)
Bármelyik program elágazás (pl. GOTO, CALL vagy a PC-be írás) két ciklusos!
PIC TANFOLYAM PIC TANFOLYAM
2.4.2 VEREMKEZELÉS 2.5.1 PIC UTASÍTÁSOK VÉGREHAJTÁSA, STATUS
Belső adat busz <8>
REGISZTER
•Mikor egy CALL utasítást végrehajtunk, az azt A műveletek eredménye állítja a Indirect Addr 00h Indirekt címre hivatkozásnál használt
5
követő utasítás címe a verem tetejére 8 STATUS regiszter bitjeit RTCC Időzítő/számláló regiszter
Utasításszámláló
PC
másolódik, és az alatta lévő tartalmak a PCLATH Status Program státusz regiszter
FSR Indirekt címet tartalmaz
veremben lefelé mozognak.
5 PortA A port
•RETURN végrehajtásakor verem tetején lévő W regiszter PortB
PortC
B port
PCH PCL C port (ha van)
cím kerül az utasításszámlálóba
•Helytelen veremkezelés (pl CALL RETURN 16 Általánosan
felhasználható
nélkül hibás program működést eredményez ALU regiszterek
VEREM (File registers)
8 x 14 (RAM)
(24-72)
STATUS WORD REGISZTER (f3)
(7) (6) (5) (4) (3) (2) (1) (0)
PIC16C5X-nél csak külön 2 x 11 bites hardver verem PA2 PA1 PA0 T0 PD Z DC C PA0-PA2: adatmemória bankválasztás
PIC16CXX-nél külön 8 x 14 bites hardver verem TO: time out (watchdog)
RESET feltételek:
PD: power down (sleep)
Verembe rakunk: CALL vagy megszakítás = PA2, PA1, PA0 törlődnek, értékük
. "0" Z: zéró bit
= Jelzik a RESET okát.
Veremből veszünk: RETURN, RETLW, RETFIE = Z, DC, C értéke nem változik meg. DC: half carry (4. biten túlcsord.)
C: carry
A verem: (last in first out) – LIFO
TÚLÍRÁSKOR AZ UTOLSÓ KIPOTTYAN OPERANDUSOK: W, REGISZTER(fr), #literal (KONSTANS), bit
PIC TANFOLYAM PIC TANFOLYAM

2.5 PIC 16CXX UTASÍTÁSKÉSZLET 2.5.2 ILLUSZTRÁCIÓ: PIC PROGRAMRÉSZLETEK


A kivonások (SUBWF and SUBLW) a PIC-eknél egy kicsit másképp használhatók mint ahogy megszoktuk
más 8 bites kontrollereknél. A számítás a PIC-eknél (memória - W) módon történik a (W - memória helyett).
P IC 1 6 C X X U ta s ítá s k é s zle t - Ö ss ze fo g laló Pl. Ha W-ből 3-at ki akarunk vonni, és azt írjuk: SUBLW 3 valójában 3-ból vonjuk ki a W tartalmát
A jó megoldást az ADDLW utasítással érjük el a kettes komplemens fel-használásával:
B yte-O rie nte d O pe ration - bá jtos ut a sítá so k B it-O rie nte d O pe rations - bit uta s ítás ok ADDLW 256-3 vagy ADDLW 253 esetleg ADDLW -3
N o O p e ra tio n NO P - B it cle a r f B CF f,b Emiatt a W regiszter tartalma kettes komplemensének képzése: SUBLW 0
M ove W to f M O VW F f B it se t f B SF f,b utasítással történhet a szokásos XORLW 0ffh
C le a r W C LR W - B it te st f, skip if c lea r B TFS C f,b ADDLW 1 utasítások helyett.
C le a r f C LR F f B it te st f, skip if s et B TFS S f,b
S ub trac t W from f S UB W F f,d A másik fontos dolog: kivonáskor a carry "nincs kölcsönvétel” bitként működik ("NOT borrow"). Azaz ha
Lite ra l and C ontrol O pe ra tions egy kivonási művelet kölcsönvétet okoz a carry törlődik!!! (egyébként 1)
D e crem e nt f D E CF f,d K on sta ns k ez elő é s ve zé rlő uta sítá sok
Inclus ive O R W a nd f IO R W F f,d
A ND W a nd f A ND W F f,d G o into sta n d by m od e S LEE P - Feladat: egy bájt bitjeinek megfordítása ; 32 bites regiszter (hh:mh:ml:ll) eltolása jobbra 4 bittel
E xc lusive O R W a nd f X O RW F f,d C le a r W a tc hd o g Tim er CLR W D T - ;pl.: 11000000 -ből 00000011 legyen ; hh a legmagasabb helyiértékű bájt
A dd W a nd f ADD W F f,d R e tur n, pla ce L ite ral in W R E TL W k
M ove f M O VF f,d R e tur n fro m inte rr up t R E TFIE - shr4
C o m ple me nt f CO MF f,d R etur n R E T UR N - MOVLW 0 ; eredményregiszter (W) = 0
MOVLW 0xf0
Incre m e nt f INC F f,d C a ll S u b ro utine C AL L k BTFSC NORMAL, 7 ; MSb set? ANDWF ll,F
D e crem e nt f, skip if zero DECFSZ f,d G o to a dd ress (k is 9 b it) G O TO k IORLW 00000001B ; Set LSb
M ove L itera l to W M O V LW k SWAPF ll,F
R o ta te rig ht f R RF f,d BTFSC NORMAL, 6 ; bit set?
R o ta te left f R LF f,d Inclus ive O R Lite ral a nd W IO R LW k SWAPF ml,F ;alsó-felső 4bit csere
S w a p ha lve s f S W APF f,d A dd L ite ra l to W A DD L W k IORLW 00000010B ; Set bit ANDWF ml,W ;felső (alsó volt)
Incre m e nt f, s kip if zero INC F SZ f,d S ub trac t W from Lite ral S UB L W k BTFSC NORMAL, 5 ; bit set? XORWF ml,F ;ml-ben törölni
A ND L ite ra l W A ND L W k IORLW 00000100B ; Set bit IORWF ll,F ;ll-hez hozzáadni
E xc lusive O R Lite ral W X O R LW k MOVLW 0xf0
BTFSC NORMAL, 4 ; bit set?
IORLW 00001000B ; Set bit SWAPF mh,F
Je lö lés e k :: f = a R A M (file ) reg iszte r cím e
d = a m űvele t e red m é nye ho va k erü l; 0 = W re g iszte r, 1 = R A M (file) re giszte r ANDWF mh,W
BTFSC NORMAL, 3 ; bit set?
k = eg y 8 b ite s fix é rték (ko nsta ns ) va gy eg y uta sít ásra m uta tó c ím (ez ho s za b b m int 8 b it!) XORWF mh,F
IORLW 00010000B ; Set bit
M egje g yzés: A szürké ve l je lö lt uta sítá so k a 16 C X X típ uso k "új" uta sítá sai a P IC 1 6 C 5 X típus h o z ké p es IORWF ml,F
BTFSC NORMAL, 2 ; bit set? MOVLW 0xf0
IORLW 00100000B ; Set bit SWAPF hh,F HÁZI FELADAT !!!
BTFSC NORMAL, 1 ; bit set? ANDWF hh,W
IORLW 01000000B ; Set bit XORWF hh,F
BTFSC NORMAL, 0 ; bit set? IORWF mh,F
IORLW 10000000B ; Set bit RETURN
PIC TANFOLYAM ; az eredmény W-ben, NORMAL változatlan. PIC TANFOLYAM
2.5.3 PÉLDA: SOROS ADATÁTVITEL 2.6.2 PIC16CXXX PROGRAM-MEMÓRIA
TÉRKÉP
• • •
Clock Csak 11 szó a program !!! PCLATH<4:3>=00 PCLATH<4:3>=10 ! Maximum 8K szó (13 bit)
0 1000h
74 utasítás ciklus = 14.6µ s @ 20 MHz RESET
program memória. Jelenlegi
• • • típusok kapacitása: 4K
Data • • •
Ez megfelel 540 Kbit/sec-nek
INTERRUPT 4
! 4 darab 2K szavas lap (11 bit)
Egy egyszerű szinkron (SPI) soros adatátviteli program: Page 0 Page 2 ! Lap váltás: PCLATH<4:3>
! Reset vektor: 0000h
XMIT MOVLW 08h ; 8 bites átvitel 7FFh 17FFh
MOVWF bit_count ; ! Megszakítás vektor: 0004h
PCLATH<4:3>=01 PCLATH<4:3>=11
XM_LOOP BCF PORTB, bit0
; 0 ® Adata láb 800h 1800h Belső adat busz <8>
BCF PORTB, bit1
; 0 ® Clock láb
RRF XDATA ; Forgatás carry-n keresztül 5
8
; XDATA = küldendő adat PCLATH
BTFSC STATUS, CARRY ; teszt carry bit Page 1 Page 3
BSF PORTB, bit0 ; 1 ® Adat láb 5

BSF PORTB, bit1 ; 1 ® Clock láb FFFh PCH PCL


1FFFh
DECFSZ bit_count ;
16
GOTO XM_LOOP ; vissza
BCF PORTB, bit1 ; clock láb = L VEREM
Példaprogram: ADVPAGE.ASM 8 x 14

PIC TANFOLYAM PIC TANFOLYAM

2.6.1 PROGRAM-MEMÓRIA 12 BITES ESZKÖZÖKNÉL 2.6.3 PROGRAM MEMÓRIA LAPOZÁS (PAGING)


PIC16/17 Word Code Page Current Register Current
GOTO, CALL
op-code k k k k k k k k k Lap / Bank határok Family Size Boundary Max code Bank Max RAM
(Bits) (Words) Size Boundary Size
3-bit 9-bites célcím -> 512 szó címzhető meg (Words) (Bytes) (Bytes)

PC RETLW 16C5XX 12 512 2K 32 73


(f2) A09 A08 A07-A00 STACK1
1 8 RETLW 16CXXX 14 2048 4K 128 192
STACK2
000 17CXXX 16 8192 8K 256 454
Első 0FF " A PCLATH lapozó bitjeinek értéke határozza meg az aktív lapot
0 lap
100 " A lapozásra CSAK akkor kell figyelni, ha CALL vagy GOTO utasítást
1FF 0.5K
A PIC hajtunk végre
200
Második 16C56 " A lapozó biteket CSAK akkor kell módosítani, ha más lapra ugrunk
2FF
lap EPROM " Lap bitek definiálják az aktuális lapot
1 300
memóriája " Utasítások, amelyeknél a lapozó bitekre tekintettel kell lenni:
3FF 1K
" GOTO <address (0...8 bit) >
lapozásos technika! " CALL <address (PC8=0)>
" <Utasítás> PCL,F ; e.g. ADDWF PCL,F (PC8=0)
14 bites eszköznél a célcím 11 bites, ezért a megcímezhető memória 2048 szó
PIC TANFOLYAM PIC TANFOLYAM
2.7.1 ADATMEMÓRIA:
2.6.4 ADDWF PCL CÍMZÉS
FÁJL REGISZTEREK II.
# ADDWF PCL, F nyolc bites (256 szavas) címtartományt
fog át, és mivel PC8=0, ezért csak a program memória
lapok első 256 szavas részére hivatkozhatunk
# PIC16C5XX-nél PA0, PA1 határozza meg az aktuális
lapot, de CALL és számított PC esetén:
# PC 8- bitje törlődik
# A célcím a lap első 256 címe lehet
A tok működésében alapvető szerepet játszanak
# PIC16CXXX/17CXXX-nél, PCLATH használható a felső W - akkumulátor - műveletek operandusa
címekre INDF - INDirect File register Álcíme: 00H ??? A 0 című regiszterre
Célcím akárhol lehet
#
történő hivatkozás ténylegesen az FSR regiszterben lévő
# Olyan tábláknál amelyek átlépik a 256
szavas laphatárt PCLATH-ot állítani kell tartalom által meghatározott című regiszterre utal
RTCC (01H) - 8 bites számláló túlcsordulása IT-t okoz külső impulzus,
Összefoglalás: vagy belső órajel növelheti
#PCL-t az ADDWF PCL utasítással módosítjuk PC (02H) - az utasításmutató alsó 8bites része
STATUS (03H) - ld. később
#ADDWF PCL eredménye nem lépheti át a 8-bites címhatárt (lapok miatt!)
FSR (04H) - File Select Register (04H) - tartalma határozza meg az
#PIC16C5XX - PA0 és PA1 inicializálandó indirekt utasításban szereplő regiszter címét, felső három bitje
#PIC16CXXX - PCLATH inicializálandó az aktuális regiszter bankot
#PIC17CXXX - PCLATH inicializálható a MOVFP PCL,PCL utasítással RA,RB,RC (05,06,07) portok !RA,!RB,!RC - portvezérlő regiszterek
MODE - portkonfigurálás mutató regisztere,
PIC TANFOLYAM OPTION - ld. később PIC TANFOLYAM

2.7.1 ADATMEMÓRIA: FÁJL 2.7.2 ADATMEMÓRIA LAPJAI: A BANKOK


REGISZTEREK I. RP1,0 Opkódból
• Utasítások közvetlen op-code d f f f f f f f Közvetlen memória bank kezelés
címzéssel 87 6 0
6-bit
műveleti kód
1
cél
7-bites regiszter cím # 4 darab 128 bájtos adatmemória bank
Bank Select # Speciális Funkcióju Regiszterek (SFR)
A 7 bites címrész miatti korlátozás feloldható a adatmemória bankok 00 01 10 11 ebben a RAM-ban vannak
0
alkalmazásával, ezek összessége alkotja a fájlregiszter tömböt. Azaz egy cím # Bankok kiválasztása a Státusz
egy adott bankbeli címet jelent! Regiszter RP0 és RP1 bitjeivel történik
Fájl Cím
76543210 Bank Bank Bank Bank
cím választás
A regisztermező két részre tagozódik. 00 Indirekt cím. reg. 0 1 2 3
10 9 8 7 6 5 4 3 2 1 0 10 9 8 7 6 5 4 3 2 1 0
1.működtető fájlregiszterek ( belső működéshez és I/O- RTCC
hoz) más néven Speciális Funkcióju Regiszterek
01
PC
STACK 1 STACK 2 Közvetett memória bank kezelés
02 10 9 8
RETLW 7 6 5 4 3 2 1 0 7F
(SFR) STATUS
03
FSR
TRISA 5 4 3 2 1 0 Indirekt címzés # Az indirekt címzendő bankot a
• A valósidejű óra / számláló regisztere ( RTCC ) 04
TRISB OPTION IRP FSR-ből
• programszámláló ( PC, Program Counter ) 05
PORT A Status regiszter IRP bitje határozza
PORT B INDF 8 meg
• állapotregiszter ( Status Register ) 06
* 7 0
07 Általános w
• I/O regiszter ( I/O Registers, PORTs ) célú fájl 10 # Az INDF regiszter-rel végzett
• fájlregisztert választó regiszter ( FSR, File Select Bank Select
0F
reg.-ek
A program műveleteket az FSR regiszter által
Register ) memórából 0 1
Általános 0 mutatott adatokkal hajtjuk végre
• További speciális regiszterek szolgálnak az I/O PORT célú fájl 17
konfigurálására és az előosztó kezelésére. * Az ALU-n keresztül regiszterek Bank Bank kiválasztott
2.általános célú regiszterek ( General Purpose -a fájl regiszterekből 0&1 2&3 cím
Registers ). -a fájl regiszterekhez (BANK 0)

RAM FELÉPÍTÉSE 1F
7F Példaprogram:ADVBANK.ASM
PIC TANFOLYAM PIC TANFOLYAM
2.8 ÓRAJEL 2.9.1 MICROCHIP RESET ÁRAMKÖRÖK
GENERÁLÁS The Microchip Supervisor
Device Family
Utáp ÚJ!!!
PIC PIC Külső órajel PIC
Ez általában: 4 MHz Push-Pull Push-Pull Open-Drain Open-Drain
OSC1 OSC1 OSC1 Két láb felszabadul (Active Low) (Active High) (no pull-up) (internal pull-up)
Nincs külső RF MCP100/MCP809 MCP101/MCP810 MCP120 MCP130
fosc/4
OSC2 OSC2 OSC2 sugárzás

• CMOS Push-Pull kimenet


LP, XT, HS órajel kialakítás Külső RC órajel kialakítás Külső órajel használata Belső RC oszcillátor • 7 feszültség szintű reset pont
használata.
Órajel generálás PIC kontrollereknél
• (MCP100, MCP809)
• Aktív magas reset (MCP101, MCP810) (pl.8051-hez!!!)
• T0-92 és SOT23 3-pin tokozás
A belső oszcillátor -- kisebb pontossága és frekvenciastabilitása miatt olyan • Ipari hőmérséklet tűrésű minden eszköz
alkalmazásokban használható – ahol ezek nem okoznak problémát. A frekvenciát a • Lábkiosztás és a specifikáció kompatibilis
tápfeszültség változása és a hőmérséklet változása befolyásolja.
a Maxim és Dallas hasonló eszközeivel
FONTOS!!!
A tokban gyárilag beállítanak egy kiolvasható értéket, amely mellett a belső
oszcillátor a legpontosabb (gyári jusztírozás). Ezt az értéket a tok égetésekor is be
kell írni. (EPROM-os változat).

PIC TANFOLYAM PIC TANFOLYAM

2.9.2 BROWN-
2.9 RESET KEZELÉS OUT
RESET FELADATA A BELSŐ TÁROLÓK ALAPÁLLAPOTBA HOZÁSA. EHHEZ A HA A TÁPFESZÜLTSÉG RÖVID IDŐRE LEESIK, AZ RESET-ET OKOZ.
BELSŐ ÓRAJEL STABIL MŰKÖDÉSE SZÜKSÉGES!
MI VAN, HA A RESET ALATT ISMÉT LEESIK A FESZÜLTSÉG ? HIBÁS RESET !!!
BEKAPCSOLÁSKOR ELINDUL EGY FÜGGETLEN BELSŐ RC OSZCILLÁTORÓL
A MEGOLDÁS: MINDIG AZ UTOLSÓ TÁPCSÖKKENÉSTŐL INDUL A RESET
MŰKÖDŐ SZAMLÁLÓ (POWER UP TIMER). ENNEK SZEREPE AZ ESETLEGES LASSÚ
FOLYAMAT!
TÁPFESZÜLTSÉG NÖVEKEDÉSÉNEK A KOMPENZÁLÁSA.
AMIKOR EZ TÚLCSORDUL, ELINDUL EGY, AZ OSZCILLÁTOR ESETLEGES LASSÚ
BEREZGÉSE MIATTI HIBÁS MŰKÖDÉS KIVÉDÉSÉT CÉLZÓ MÁSODIK KÉSLETETÉST V DD
BIZTOSÍTÓ SZÁMLÁLÓ (OSC START-UP TIMER) Ez majdnem mindig elegendő ! BV DD Max

Vdd BV DDMin
Internal
Tápfesz (VDD)
V DD Reset 72 ms
MCLR PIC
V DD
További megoldások: BV DDMax
MCLR
BV DDMin
TPWRT •Tranzisztoros áramkör használata
Internal
Power-up Reset
<72ms 72 ms
Timer V DD
TOST BV DDMax
OSC Start-up BV DDMin
Timer
Internal
Reset 72 ms
Reset Működés
Brown-Out védelem
•Külső reset áramkör használata Ez majdnem mindig elegendő !
PIC TANFOLYAM PIC TANFOLYAM
2.10 A TOKOK FELPROGRAMOZÁSA 3. PIC PERIFÉRIÁK
FOGALMAK: PÁRHUZAMOS PROGRAMOZÁS, SOROS PROGRAMOZÁS FEJLESZTŐI VANNAK KÖZÖS ELEMEK („SZÉRIATARTOZÉKOK” ;-)) )
PROGRAMOZÓ, IPARI PROGRAMOZÓ
I/O LÁBAK
PROGRAMOZÓI ÁLLAPOTBA KERÜLÜNK: HA AZ MCLR LÁBAT VPP FESZÜLTSÉGRE
8 BITES SZÁMLÁLÓ/IDŐZÍTÓ (RTCC vagy TMR0)
(12V) EMELJÜK. EZUTÁN A PROGRAMOZÓ BERENDEZÉS A CLOCK LÁBON
ÓRAJELEKKEL ÉRVÉNYESÍTVE ELKÜLD EGY PARANCSOT (PL. 6 BITES A PARANCS), WATCHDOG
MAJD A TOK AZ ÓRAJELLEL ÜTEMEZVE AZ RB7 LÁBÁN KERESZTÜL VÁLASZOL.
CSALÁDELVET MEGVALÓSÍTÓ PERIFÉRIÁK: CSALÁDELV:
HÁROM TOKTÍPUS: OTP (=One Time Programming), EPROM, (ABLAKOS), FLASH TMR1, TMR2 időzítők CPU AZONOS
A/D ADAT ÉS
Soros programozás SOROS I/O PROGRAM MEMÓRIA
PWM MÉRETE
• Csak 2 láb kell a programozáshoz CAPTURE/COMPARE PERIFÉRIÁK SZÁMA
MCLR/VPP
PÁRHUZAMOS (SLAVE) PORT FAJTÁJA
VPP
• RB6 az órajel bemenet I2C/SPI KÜLÖNBÖZIK
VDD VDD
• RB7 az adat be/ki- vagy a parancs bemenet A PERIFÉRIÁK MŰKÖDTETÉSE ÁLTALÁBAN NÉGY REGISZTER SEGÍTSÉGÉVEL
VALÓSÍTHATÓ MEG, EZEK:
VSS VSS
• Parancsok: BEMENETI
KIMENETI
RB6 Clock - Load data (adatírás) ÁLLAPOT (STÁTUSZ)
RB7
- Read data (adatolvasás) VEZÉRLŐ (CONTROL) REGISZEREK
Data/in/out - Begin programming (programozás indul)
PIC16CXX
Command in - End programming (programozás vége) EZEK A REGISZTERFÁJL ADOTT CÍMEIN HELYEZKEDNEK EL
- Increment address (memóriacím növelése)
PIC TANFOLYAM PIC TANFOLYAM

2.11 PICSTART PLUS PROGRAMOZÓ 3.0.1 WATCHDOG

"CLRWDT" Túlcsordulás
A programozó engedélyezése Reset reseteli
a chip-et
RC 8 bites számláló
Programozás, a beírt program ellenőrzése oscillator
Utóosztó
A programozóba helyezett PIC tok olvasása
A tok ürességének (memória + konfigurációs bitek) vizsgálata • Segít, ha a program „elkószál”
OTP tok ürességének vizsgálata
• Saját szabadonfutó RC oszcillátors van
A programozás vagy ellenőrzés során kiírt hibák megnézése
A program memória puffer törlése • WDT programból nem kezelhető, csak a CLRWDT utasítással, ami törli
Konfigurációs bitek törlése • WDT túlcsordulás reszeteli és újraindítja a kontrollert
• Programozható időtartam (time-out period): 18 ms-tól 2.5 sec-ig
Programozó alaphelyzetbe állítása
• SLEEP-ben is működik. A túlcsordulás felébreszti a CPU-t
EPROMOS ÉS FLASH EPROMOS TOKOK PROGRAMOZÁSÁRA IS • WDT egedélyezés/tiltása a programozható biztosítékkal (WDT_ON/OFF)
ALKALMAS !
• Egyszerű 8 bites számláló
FEJLESZTŐI ÉS IPARI PROGRAMOZÓK VANNAK, PICSTART AZ ELŐBBI
KATEGÓRIÁBA TARTOZIK • Mivel saját belső RC oszcillátor működteti, ezért kristályhibát is jelez

Hogyan lehet a programozót az új tokok programozására is képessé tenni?


34 PIC TANFOLYAM PIC TANFOLYAM
3.0.2 SLEEP (POWER-DOWN) MÓD 3.0.4 PIC16CXX MEGSZAKÍTÁSOK
$ MEGSZAKÍTÁS: SPECIÁLIS SZUBRUTINHÍVÁS Esemény hatására PC-be egy cím
(vektor) kerül)
SLEEP utasítással kerül a PIC16CXX SLEEP (power-down) állapotba. $ Egyszintű IT (egyszerre csak egyet)
Ilyenkor: $ egyidőben bekövetkező megszakítás esetén a prioritást a IT-ben való lekérdezési
sorrend határozza meg. Több belső és külső megszakítás forrás
Minden belső óra és oszcillátor lekapcsol $ A megszakításoknak csak egy vektorcíme van (04h)
Prioritás: a
Watchdog Timer, ha engedélyezett, tovább fut $ A prioritás és azonosítás programból lehetséges
$ Globális és egyedi megszakítás engedélyezés kiszolgálás sorrendje
a kimenetnek konfigurált I/O lábak tovább vezérelnek
$ Több megszakítás a processzort a szundi (sleep módból ébreszti
A/D konvertál, ha A/D órajele RC oszc. $ Megszakítás felismerés 3 utasításciklus, illetve 4 ciklus külső megszakításoknál
Ébredés (Wake up): $ A megszakítás kiszolgálásakor fontos megőrizni a STATUS a W regiszter (valamint
PCLATH regiszter ha 4K-s vagy nagyobb memóriájú tokot használunk) tartalmát.
Külső reset (MCLR lábat L-re, majd H-ra)
Rutinok a ‘push’ (mentés) és ‘pop’(visszatöltésre):
Watchdog Timer időtúllépése tempW equ 0x20 ;W mentése bank 0 & 1-be
Megszakítás tempStatus equ 0x21 ;STATUS mentése bank 0-ba
tempPclath equ 0x22 ;PCLATH mentése bank 0-ba (16c74)
ORG 0x04 pop movf tempPclath,W
A PROGRAM A SLEEP UTASÍTÁST KÖVETŐ UTASÍTÁSSAL FOLYTATÓDIK push movwf tempW movwf PCLATH
swapf STATUS,W bcf STATUS,RP0
bcf STATUS,RP0 swapf tempStatus,W
Fogyasztás: 1.5 µA typical @ 4V movwf tempStatus movwf STATUS
movf PCLATH,W swapf tempW,F
movwf tempPclath swapf tempW,W
bcf PCLATH,3 retfie
PIC TANFOLYAM PIC TANFOLYAM

3.0.3 MELEG RESET 3.0.4 MEGSZAKÍTÁSOK (FOLYT)

Meleg reset: tápfesz. megvan, és úgy reset !!! ! Az egyes megszakításforrások engedélyezése/tiltása az INTCON, PIE1 és
PIE2 regiszterek segítségével lehetséges
! A megszakítások globális engedélyezése/tiltása GIE bittel lehetséges
A STÁTUSZ regiszter T0 (watchdog állítja) és PD (sleep állítja)
! A megszakítás kiszolgálásának kezdetekor a hardver törli a GIE bitet és a
bitje alapján dönthető el: visszatérési címet a verembe rakja
TO PD RESET oka ! A megszakítási esemény az INTCON, PIR1 és PIR2 regiszterek bitjeit állítja
be, Ezeket programból kell törölni!
0 0 WDT időtúlfutás energiatakarékos (SLEEP) üzemben
! RETFIE utasítás GIE-t 1 be állítja és verem tetején lévő címet a PC-be tölti
0 1 WDT időtúlfutás normál üzemben ! HARDVER MEGOLDÁSA: TÖBBI
1 0 külső RESET (MCLR) energiatakarékos SLEEP) üzemben MEGSZAKÍTÁSFORRÁS

1 1 Power-On, Bekapcsolás IRQ CPU IT KISZOLGÁLÁSHOZ


„1” D Q
X X külső RESET (MCLR) normál üzemben & 1
MEGSZAKÍTÁST IE
KIVÁLTÓ
CLOCK CPU
GIE
ESEMÉNY CLEAR
ÖSSZES IT ENGEDÉLYEZÉSE
EGYEDI IT ENGEDÉLYEZÉSE
IT KÉRÉS TÖRLÉSE

PIC TANFOLYAM PIC TANFOLYAM


3.1 I/O PORTOK 3.2.2 TMR1
Portok: kapuk a külvilág felé - bemenetek vagy kimenetek • Aszinkron számláló mód
• Sleep ideje alatt is működik
BÁRMELYIK UTASÍTÁS, AMELYIK A RÉGI ÉRTÉKÉT HASZNÁLVA ÁLLÍTJA ELŐ A • Ha TMR1 túlcsordul, ébreszti a processzort (külső órajel
REGISZTER ÚJ ÉRTÉKÉT READ-MODIFY-WRITE, AZAZ BEOLVAS - MÓDOSÍT - lépteti)
VISSZAÍR UTASÍTÁSNAK HÍVJUK. • 16-bites szaámláló/időzítő, 3 bites elősztó (÷ 1, 2,4,8)
• SLEEP módban is fut az idő
AZAZ AZ ILYEN UTASÍTÁSOK - MÉG HA CSUPÁN A REGISZTER EGYETLEN • LP oszcillátor
BITJÉRŐL IS VAN SZÓ - ELŐSZÖR BOLVASSÁK A REGISZTER TARTALMÁT, • A CCP capture és comparátor (CCP) modul(ok) időalapja
ELVÉGZIK A MŰVELETET ÉS AZ EREDMÉNYT VISSZAÍRJÁK A REGISZTERBE. • Aszinkron számláló mód
PL.: CLR FR.BIT, ADD FR,W, DEC FR, STB. • Direkt 32 KHz - 200 KHz kvarc működés RC0 és RC1-en
I/O PORT FELÉPÍTÉSE VDD
keresztül
Synchronized
Q1 Overflow 0
Adatbuszról P interrupt clock input
D Q
Adat
latch
TMR1H TMR1L
írás CK Q 1
TMR10N
Az adatbuszhoz on/off T1INSYNC
RC0/ T1OSC
Olvas ás I/O T1OSO/ 1
W regiszterből
Q
láb T1CKI Előosztó Synch.
I/O Q2
Vezérlő T10SCEN OSC/4 ¸ 1, 2, 4, 8 det
N
"TRIS 1" latch Q
RC1/ Enable Internal 0
Vss T1OSI/ Oscillator†Clock 2
RESET
CCP2
TMR1CS TICKPS <10> Sleep input

Ha T1OSCEN törölve van, akkor az inverter és az ellenállás kikapcsolódik. (Nincs fogyasztás)
Kimeneti tárolóba írunk, de lábat olvasunk!!!
PIC TANFOLYAM PIC TANFOLYAM

3.2.1 TMR0 = REAL TIME CLOCK COUNTER (RTCC) 3.2.3 TMR2


• 8 bites időzítő
Adat Busz • 4 bites előosztó (÷ 1, 4, 16)
Az RTCC egyszerűsített rajza
RTCC fosc/4 túlcsorduláskor • 4 bites utóosztó (÷ 1 to ÷16)
láb (8)
0 megszakítás
• Az utóosztó túlcsordulása megszakítást okoz
0
1 Programozható Belső • A Szinkron Soros Port (SSP) modul baud-rate generátora
szinkron RTCC (8)
előosztó 1 órával
Timer2
(2 ciklusos késleltetés ) Timer2 interrupt
RTE PS2, PS1, PS0 output* TMR2IF

RTS PSA

• Olvasható és írható OSC/4


Prescaler
TMR2
• Túlcsordulásakor megszakítást generál a 14 és 16 bites családnál, a 12 ÷ 1, 4, 16

biteseknél nincs megszakítás 2 Postscaler


Comparator
• Az előosztója programozható (de a watchdog is használja!) EQ 1:1 →1:16
• Időzítőként: Az órajel frekvencia: OSC/4 (5 MHz @ 20 MHz-es kontroller
órajelnél inkrementálódik , 4
Period
• Előosztóval a külső órajel 50 Mhz-ig mehet
• Számlálóként:programozható az élváltás, amire lép (fel- vagy lefutó él) * TMR2 output can be software selected by the SSP module as baud clock.
PIC TANFOLYAM PIC TANFOLYAM
3.3 A/D 3.4 ANALÓG
• A/D konverter modul:
• Maximum 8 analóg bemenet multiplexelődik egy A/D konverterre KOMPARÁTOR
• Mintavevő-tartót tartalmaz
• 11 µs-os mintavételi idő (10K forrás impedanciánál) # 2 analóg komparátor van egy tokban
• 16 µsec konverziós idő csatornánként (20 µsec PIC16C71-nél)
# Programozható referencia feszültség
• 8 bites felbontás (±1 LSB accuracy (±2 LSB @ VDD=3VA/D
• konverzió sleep alatt. A/D kész ébresztheti a processzort # 8 programozható működési mód (reset komparátor, kikapcsolva, két
• Külső referencia bemenet, VREF független komparátor, közös referenciájú, stb.)
• Bemenő feszültség tartomány: VSS-VREF # Komparátor I/O multiplexelve van a digital I/O-val
• A port lábai programból konfigurálhatók (analóg vagy digitális bemenet
• Az analóg bemeneteknek konfigurált lábak digitális kimenetként is működhetnek ha # Komparátor kimenet megszakítást okozhat,
a TRIS bitjeiket töröljük # és ez ébresztheti a tokot sleep-ből
• Digitális bemenetként konfigurált lábra analóg feszültséget téve, a bemeneti puffer
árama miatt túlterhelődhet CSH<2:0> 16 tagból áll
111 RE2/AIN7
110 RE1/AIN6 8R R R R R
101 RE0/AIN5
VREN • • • • • • • •
000 RA0/AIN0
Vin 8R VRR
(Input voltage) 001 RA1/AIN1
A/D 010
Converter RA2/AIN2
011 RA3/AIN3/VREF
VDD 000 or VR3
010 or 100 RA5/AIN4 V REF 16:1 analog mux
Vref 100 VR0
(Reference Input channel mux
voltage) 001 or
011 or
PCFG<2:0> 101

V DD Sampling # VREF 16 lépésből álló feszültséget ad ki


switch

RS
RA x
V T = 0.6V
Ric = 1Kž SS R SS # VREN kapcsolja (ON/OFF) a feszültséget a referencia áramkörre
VA Cpin V T = 0.6V I leakage
Chold = DAC # D/A átalakítónak használható
capacitance
5 pF ±500nA
51.2 pF

V SS
PIC TANFOLYAM PIC TANFOLYAM

3.3.1 MCP320X 12 BITES AD KONVERTER


3.5 CAPTURE/COMPARE/PWM (CCP) MODUL I.
Capture: adott feltétel teljesülése esetén egy számláló értékének beírása egy regiszterbe
• TMR1 és TMR2 számlálókat használják
• Capture mód: TMR1 16 bites értéke a capture regiszterbe
• 12-bit +/- 1 LSB pontosság íródhat:
• 1,2,4 és 8 analog bemeneti csatorna - Minden lefutó élnél
- Minden felfutó élnél
• 2.7 - 5.5V működési tartomány - Minden 4.-edik felfutó élnél
- Minden 16.-adik felfutó élnél
• 2.0 MHz-s SPI™ illesztés • Komparátor mód: egy 16-bites értéket TMR1-hez hasonlít,
• 100 000 minta másodpercenként és egyezéskor generálhat:
- CCPX lábon magas szintet,
• -86 dB typical THD - CCPX lábon alacsony szintet,
- Szoftver megszakítást, vagy
• 72 dB jel-zaj és torzítás (Signal to Noise and Distortion) - kiválthat speciális eseményt (TMR1 törlését, vagy
• A/D GO bit-jét 1-be)
• Olcsó 8-, 14- and 16-lábú SOIC and DIP tokozás PWM Mód
8 vagy 10-bit felbontás: 80 KHz frekvencia 8-bites felbontásnál
20 KHz frekvencia 10-bites felbontásnál
ÖNÁLLÓ TOKBAN 12 BITES AD ÁTALAKÍTÓ !!! max. 50 nsec-os felbontás (@ 20 MHz, 10 bites felbontás)
R
Fbw
AN - KI = Uk
DIG - BE Fpwm
R C LP SZŰRŐ
Nem kivánt
harmonikusok
Uk=Ub*W/T

Ub
DC 1/T 3/T 5/T
FOURIER SPEKTRUM
W T
PIC TANFOLYAM PIC TANFOLYAM
3.5 CAPTURE/COMPARE/PWM (CCP) MODUL II. 3.7.1 I2C BUSZ (FAKULTATIV)
Capture Mód
Az adatforgalom két vezetéken történik. Az SCL vezeték az órajelet szolgáltatja , az SDA jelű végzi az
CAPTURE (BEÍRÁS): Egy lábon
Prescaler Set CCPxIF adatforgalmazást. A közös potenciált a GND összekötés biztosítja. Az SCL és SDA vonalak kimenetei nyitott
÷ 1, 4, 16
interrupt
fellépő szintváltás hatására a
RCy/CCPx
PIR<2>
CCPRxH CCPRxL kollektoros megoldásúak, így a vonalak alaphelyzetben magas állapotban vannak. Ennek elônye ebben
Capture
TMR1 számláló 16 bites tartalmát a rejlik, hogy nem csupán két , hanem számos eszközt köthetünk össze.
and
edge detect Enable <CCPRxH:CCPRxL> 16 bites Minden egység lehet Adó ill Vevô. Ezen felül megkülönböztetünk Master és Slave eszközöket.:
TMR1H TMR1L
regiszterbe írjuk. A funkciók: TRX = Transmitter (adó): Az az egység amelyik adatot küld a buszra. RCV = Recevier (vevô): Az az
Q's CCPCONx
<3:0> egység amelyik adatot fogad a buszról.
A szerepek: MST = Master (mester): Az az egység amelyik kezdeményezi az átvitelt, az átvitelhez az órajelet
Compare Mód COMPARE (ÖSSZEHASONLÍTÁS): generálja, és be is fejezi az átvitelt. SLV = Slave (szolga): A mester által megcímzett egység.
Trigger Set CCPxIF
A TMR1 számláló 16 bites
VCC
Special event † interrupt ADAT stabil
PIR<2>
CCPRxH CCPRxL tartalmát a <CCPRxH:CCPRxL> SDA
SDA
SCL
Q S Output Comparator
16 bites regiszterben lévő SDA1 KI SCL1 KI SDA2 KI SCL2 KI
Logic match SCL
RCy/CCPx R tartalommal hasonlítjuk össze.
SDA1 BE SCL1 BE SDA2 BE SCL2 BE
TMR1H TMR1L
TRISC<y> CCPxCON<3:0> Egyezés esetén egy lábon kiadunk BIT átvitel az I2C buszon
Output Enable Mode Select
† For CCP1 (if enabled), reset Timer1.
egy jelet, illetve megszakítást EGYSÉG I. EGYSÉG II.

For CCP2 (if enabled), reset Timer1 one set GO bit (ADCON0<2>).
generálunk. SDA
Bit szintű átvitel: az eredetileg magas szinten lévő SDA vonalra
Duty cycle registers CCPxCON<5:4>
PWM Mód kerül a 0 vagy 1 szint. Az SCL vonal magas szintje alatt
CCPRxL A KITÜLTÉSI TÉNYEZŐ SCL
S P érvényes az adat. Az adat csak az SCL vonal alacsony szintje
A FREKVENCIÁTÓL START
START és STOP feltételek
STOP alatt változhat.
CCPRxH (Slave) FÜGGETLEN, DE A A busz aktív és inaktív állapotát a START és STOP
feltételekkel tudjuk definiálni.
Comparator R Q FREKVENCIA A SDA
START feltétel akkor lép fel és a busz aktív lesz amikor SCL
TMR2 (Note 1)
S
RCy/CCPx FELHARMONIKUS TAR- SLAVE KÜLDI AZ ADATOT
magas állapotában az SDA vonalon egy H-L átmenet van.
Comparator
Reset
Timer TRISC<y>
TALMAT SLAVE VESZI AZ ACK- OT STOP feltétel akkor lép fel, amikor SCL magas állapotában az
BEFOLYÁSOLJA SDA vonalon egy L-H átmenet van.
PR2 SCL 1 2 8 9 A START és STOP állapotokat csak a mester generálhatja. A
(SZŰRÉS) S ACK
Note: 8-bit timer is concatenated with 2-bit internal Q clock MASTER ADJA busz aktív a START és STOP állapot között.
or 2 bits of the prescaler to create 10-bit time base.
BÁJT átvitel az I2C buszon
PIC TANFOLYAM PIC TANFOLYAM

3.6 SSP MODUL 3.7.2 SPI BUSZ (FAKULTATIV)


Képes vagy SPI vagy I 2 C™/ACCESS.bus módban működni MOTOROLA mikroprocesszoroknál vezették be
Internal
data bus
Read Write • Az SPI lényegében egy két vonalon összekötött • Két javasolt protokoll van: egy mesteres -
SPI Mód SSPBUF shift regiszter,
többmesteres
Max baud ütem (20 MHz)-nél • Egy mesteres (kontroller – perifériák)
• Az adatátvitelnél egy master és több szolga lehet. A
Mester 5 MHz SDI
SSPSR mester vezérli a folyamatot, adja az órajelet. A mester kiküldi a szolga címét a
Szolga 2.27 MHz SDO bit0
Shift
clock • Az SPI két adat és két vezérlő vonalból áll. keretben. A megcímzett eszköz a
Programozható baud ütem.
• Master Out Slave In – MOSI MISO vonalon küldi be a csomag
(OSC ÷ 4, 16, 64, vagy
TRISA<5> • Master In Slave Out – MISO elfogadását, míg a többi eszköz a
TMR2 output ÷ 2)
Programozható órajel
SS Edge
Select • Serial Clock – SCLK a mester által küldött saját MISO vonalait kikapcsolja.
polaritás adás/vételnél SSPM<3:0> órajel • Több-mesteres protokoll: mesterek
Clock select
(SSPM<3:0>) Timer2 output • Slave Select - SS a szolgát jelöli ki
2 ütközésének elkerülése - arbitráció
Prescaler Tcy
4, 16, 64
SCK
Data to TX/RX in SSPSR
TRISC<3>

I 2 C™/ACCESS.bus Mód
MSB MESTER LSB MSB SZOLGA LSB
Internal
• 7 vagy 10 bites cím data bus MISO MISO
Rea Write SHIFT REGISZTER SHIFT REGISZTER
• Standard (100 KHz) d
(8BIT) (8BIT)
• gyors (400 KHz) mód támogatás SSPBUF MOSI MOSI
Shift
RC3/SCK clock
SSPSR SCK SCK
RC4/SDA MSB
SPI
Match detect Addr Match ÓRAJEL SS SS
• A szolga funkciók teljes HW
SSPADD
kialakítása VCC GND
• HW segíti a mester és a multi- Start and
Stop bit detect Set, Reset S, P
mester funkciókat bits
(SSPSTAT Reg)
PIC TANFOLYAM PIC TANFOLYAM
3.8 PÁRHUZAMOS SZOLGA PORT 3.10 BELSŐ FLASH EEPROM PROGRAM ÉS ADAT MEMÓRIA

Parallel Slave Port Blokkvázlata MEMÓRIÁK A PIC16F87X TÍPUSOK ESETÉN

Data bus
D Q RDx pin
"WR
Port"
CK

Q D

"RD Port" CK
One bit of PortD

Set interrupt flag


PSPIF (PIR1<7>)

TTL
Read
RD

Chip Select
CS
EZ KISEBB
Write
WR PROGRAM
Note: I/O pins have protection diodes to V DD and V SS .
MEMÓRIÁJÚ
TÍPUSOKNÁL
8 bites mikroprocesszor adatbuszához direkt köthető
CSAK 128
Aszinkron működés (a külvilág felé) BÁJT
A párhuzamos port külső írásakor vagy olvasásakor megszakítás generálódik
A Port D és Port E portokat használja
A PROGRAM-MEMÓRIA PROGRAMBÓL ÍRHATÓ, OLVASHATÓ !!!
Port D Adatbusz
Port E vezérlő jelek (read, write, és chip select)
PIC TANFOLYAM PIC TANFOLYAM

3.9 SCI MODUL 3.11 KÜLSŐ ESZKÖZÖK: EEPROM ILLESZTÉS


SCI blokkvázlata DOUT Serial
TXD8 TXEN SYNC EEPROM
SREN CSRC DIN
SSP
TXIE TXREG CREN CLK
TX8/9 SPEN
Interrupt CS
TXDATA
TXIF TSR RC6/TX/CK 93LCXX
TXCLK

PIC16CXX
OERR FERR
RC7/RX/DT • 93LCXX család 3(4)-vezetékes SPI interfészű
RSR
RXDATA • Max. 16Kbit EEPROM
RCCLK TO RC6, RC7 • Egyszerű rutin ≈ 20 sor !!!
I/O Port Logic
RC8/9 RCD8
RCREG Baud Rate
Clock
RCIF
I 2 C Bus • • •
SPBRG Tcy SSP • • •
RCIE SDA Serial
EEPROM
SCI Aszinkron Mód SCI Szinkron Mód
Adás Adás SCL
Adó regiszter kettős pufferelésű Adó regiszter kettős pufferelésű
Ha az adó kész az adatátvitelre, megszakítást Egymást követő bájtokat úgy viszi át, hogy PIC16CXX 24LCXX
generál lehetséges 16 bites szavak átvitele, vagy akár
8/9 bites adás hosszabbakat is • 24LCXX család 2-vezetékes I2 C buszt használ
Vétel 8/9 bites adás • Maximum 64 Kbit EEPROM
Vevő regiszter kettős pufferelésű Vétel •
• Program: ≈ 100 sor
Felülírási hiba jelzőbit Vevő regiszter kettős pufferelésű Több periféria esetén jó választás
Keretezési hiba detektálása 8/9 bites vétel
Minden adatbit többségi detektálása (zajvédelem) Egymást követő bájtokat úgy veszi, hogy
Ha bejött egy teljes adat, megszakítást generál lehetséges 16 bites szavak vétele, vagy akár
hosszabbaké is
PIC TANFOLYAM PIC TANFOLYAM
4. PIC CSALÁD (RÉGEN)
4.2 PIC16F87X FLASH EEPROM-OS KONTROLLER TULAJDONSÁGAI
TIPUSOK PIC16C5X PIC16CXX PIC17CXX
Utasítás-
hossz (bit): 12 14 16
Jellemzők 54 54A R54 55 56 57 57A 58A 61 64 71 74 84 42
SEBESSÉG 20 20 20 20 20 20 20 20 20 20 20 20 10 20
EPROM 512 512 512 1K 2K 2K 1K 2K 1K 4K 2K
ROM 512 2K
EEPROM 1K
RAM 25 25 25 25 25 72 72 72 36 128 36 192 36 232
EEPROM 64
IDŐZÍTŐK 1+WDT 1+WDT 1+WDT 1+WDT 1+WDT 1+WDT 1+WDT 1+WDT 1+WDT 3+WDT 1+WDT 3+WDT 1+WDT 4+WDT
CAPTURE/COM-
PARE/PWM 1 2 2
SOROS PORT SPI/I2C SCI
PÁRHUZAMOS
SLAVEPORT IGEN IGEN
8 bites A/D 4 8
MEGSZAKÍTÁ-
SOK 3 8 4 12 4 11
I/Ovonalak 12 12 12 20 12 20 20 12 13 33 13 33 13 33
Tápfesz (V) 2.5-6.2 2.5-6.2 2.0-6.2 2.5-6.2 2.5-6.2 2.5-6.2 2.5-6.2 2.5-6.2 3.0-6.0 2.5-6.0 3.0-6.0 3.0-6.0 2.0-6.0 4.5-5.5
Utasításszám 33 33 33 33 33 33 33 33 35 35 35 35 35 55

PIC TANFOLYAM PIC TANFOLYAM

4.1 ÚJ ESZKÖZÖK A MICROCHIP-TŐL 4.3 PIC16F87X CSALÁD

• Flash EEPROM program-memóriájú eszközök megjelenése Device PIC16F873 PIC16F876 PIC16F874 PIC16F877
• Gyors és egyszerű újra programozhatóság Operating Freq. DC-20MHz DC-20MHz DC-20MHz DC-20MHz
Resets/Delays POR,BOR POR,BOR POR,BOR POR,BOR
• In-Circuit Debugging (ICD) - azaz lépésenkénti ill.
PWRT,OST PWRT,OST PWRT,OST PWRT,OST
töréspontos programfuttatás
Prog. Mem 4K FLASH 8K FLASH 4K FLASH 8K FLASH
• Választható belső oszcillátor Data Mem 192 368 192 368
• Nagyobb órajelsebesség - nagyobb teljesítmény (MIPS) EEPROM 128 256 128 256
• Nagyobb kapacítású belső EEPROM-os adatmemória Interrupts 13 13 14 14
• Programozható, feszültségcsökkenést figyelő áramkör I/O Ports 22 22 33 33
• Új eszközök: Timers 3 3 3 3
CCP 2 2 2 2
• RESET áramkörök
SPI Y, Enh. Y, Enh. Y, Enh. Y, Enh.
• Műveleti erősítők I2C Mstr/Slave Mstr/Slave Mstr/Slave Mstr/Slave
• 10 és 12 bites AD átalakítók USART Y, 9-bit Y, 9-bit Y, 9-bit Y, 9-bit
• CAN interfész (MCP2510 CAN kontroller SPI illesztéssel) Parallel Port N N Y Y
• RFID : rádiófrekvenciás azonosító eszközök 10-bit A/D 5 ch 5 ch 8 ch. 8 ch.
ICSP/ICD Y/Y Y/Y Y/Y Y/Y

PIC TANFOLYAM PIC TANFOLYAM


4.4 PIC16C7XX CSALÁD TULAJDONSÁGAI 4.6 PIC16F62X CSALÁD TULAJDONSÁGAI

Device PIC16C712/716 PIC16C717 PIC16C770/771 Device PIC16F627 PIC16F628


Operating Freq. DC - 20MHz DC - 20MHz DC - 20MHz Operating Freq. DC - 20MHz DC - 20MHz
Resets BOR P.BOR, PLVD P.BOR, PLVD Resets BOR BOR, RLVD
Channels A/D 4 x 8-bit 6 x 10-bit 6 x 12-bit Comparators 2 + VREF 2 + VREF
Serial communications USART USART
Serial Communications None SSP SSP
I/O Ports 16 16
I/O Ports 13 16 16
Program Memory 1024 x 14 2048 x 14
Program Memory 1K/2K X 14 2K X 14 2K/4K X 14
Data Memory (Bytes) 224 224
Data Memory (Bytes) 128 128 256 EEPROM Data Memory (Bytes) 128 128
CCP Module 1 1 w/Enh. PWM 1 w/Enh. PWM CCP module 1 1
Timers 1 x 16-bit 1 x 16-bit 1 x 16-bit Timers 1 x 16-bit 1 x 16-bit
2 x 8bit, WDT 2 x 8bit, WDT 2 x 8bit, WDT 2 x 8-bit, WDT 2 x 8-bit, WDT
Packages 18P,18SO, 18P,18SO, 20P, 20SO, Packages 18P,18SO, 18P,18SO,
18JW, 20SS 18JW, 20SS 20JW, 20SS 20SS 20SS
Internal RC System Clk No 4MHz 4MHz Internal RC System Clk 4MHz 4MHz

PLVD: Programmmable Low Voltage Detect (IT-t okozhat!)


PIC TANFOLYAM PIC TANFOLYAM

4.5 ÚJ ÉS RÉGI TÍPUSOK ÖSSZEHASONLÍTÁSA 4.7 PIC18CXXX CSALÁD

Device PIC16C74A PIC16C74B PIC16F874 PIC16C77 PIC16F877


Device PIC18C242 PIC18C442 PIC18C252 PIC18C452
Operating Freq. DC-20MHz DC-20MHz DC-20MHz DC-20MHz DC-20MHz
Max Clk Speed 40MHz 40MHz 40MHz 40MHz
Resets/Delays POR,BOR POR,BOR POR,BOR POR,BOR POR,BOR
Resets POR,PBOR POR,PBOR POR,PBOR POR,PBOR
PWRT,OST PWRT,OST PWRT,OST PWRT,OST PWRT,OST
Prog. Mem 4K EPROM 4K EPROM 4K FLASH 8K EPROM 8K FLASH LVD & Vref Y Y Y Y
Data Mem 192 192 192 368 368 Prog. Mem 8K X 16 8K X 16 16K X 16 16K X 16
EEPROM 0 0 128 0 256 Data Mem 512 512 1536 1536
Interrupts 12 12 14 12 14 Hardware MPY 8X8 8X8 8X8 8X8
I/O Ports 33 33 33 33 33 Interrupts 13 13 14 14
Timers 3 3 3 3 3 I/O Ports 23 23 34 34
CCP 2 2 2 2 2
Timers 3 3 3 3
SPI Y Y Y, Enh. Y, Enh. Y, Enh.
CCP 2 2 2 2
I2C Slave Slave Mstr/Slave Slave Mstr/Slave
SPI Y, Enh. Y, Enh. Y, Enh. Y, Enh.
USART Y Y Y, 9-bit Y Y, 9-bit
Parallel Port Y Y Y Y Y
I2C Mstr/Slave Mstr/Slave Mstr/Slave Mstr/Slave
8-bit A/D 8 ch. 8 ch. 8 ch. USART Y, 9-bit Y, 9-bit Y, 9-bit Y, 9-bit
10-bit A/D 8 ch. 8 ch. Parallel Port N N Y Y
ICSP/ICD Y/N Y/N Y/Y Y/N Y/Y 10-bit A/D 5 ch 5 ch 8 ch. 8 ch.
ICSP Y Y Y Y
PIC TANFOLYAM PIC TANFOLYAM
4.8 MŰVELETI ERŐSÍTŐK 4.10 RFID - READER

• 1, 2 ill. 4 erősítő/tok, erősítő egedélyező bemenettel


• 2.7V - 5V működési tartomány!!!
• 2mV ofszet
• teljes kimeneti vezérelhetőség (Rail-to-Rail)
• Tokozás: PDIP, 150mil SOIC és SOT-23

DC Specifications(1) LMC6492A OPA2337A TLC2262 MCP602


Input Offset Voltage(mV) 3.8 3.0 2.5 2.0
IB @ 85 deg C (pA) 200 10 100 80
Input Voltage Swing (V) 0 to 5 -0.2 to 4.8 0 to 4.2 -0.2 to 3.8
Aol (dB) 100 98 100
PSR (uV/V) 562 125 100 178
CMRR (dB) 65 74 70 80
Output Voltage Swing (V) 0.18 to 4.8 0.125 to 4.875 0.15 to 4.85 0.1 to 4.9
Power Supply Current (uA) 2100 750 500 325
Power Supply Voltage (V) 5 to 15 2.7 to 5.5 4.4 to 16 2.7 to 5.5
AC Specifications
Gain Bandwidth Product (MHz) 1.5 3.0 0.71 3.0
Slew Rate (SR, V/us) 1.3 1.2 0.55 1.8
Settling Time (us) 2.5 6.4 8.0
Input Voltage Noise (nV/rt Hz) 37 26 12 27
PIC TANFOLYAM PIC TANFOLYAM

4.9 RFID - TAG 5. RENDSZERFEJLESZTÉS


Single, MCRF200/202/250 RFID = RENDSZERFEJLESZTÉS

PARALLAX MICROCHIP ..
125kHz, passzív (nem kell elem), 128 vagy 96 bit RÁDIÓFREK- Szövegszerkesztővel A KÖVETELMÉNYEK ALAPJÁN
A RENDSZERTERV ELKÉSZÍTÉSE
VENCIÁS forráskód megírása
MCRF200: EM, Temic, Philips kompatibilis AZONOSÍTÓ *.SRC *.ASM
A HARDVER KIALAKITÁSA
MCRF202: Binaris érzékelő bemenet ELEM PASM MPASM
Assemblálás

MCRF250: Többszörös olvasás, ütközést kivédő *.LST - szimulátornak *.OBJ - szimulátornak PROGRAMTERVEZÉS
KÓDOLÁS
PSIM program MPSIM program
MCRF355/360 Clearview ICE PICMASTER ICE
A PROGRAM MEGIRÁSA
All: 13.56MHz, paszív, anti-collision, cloaking A fordítás eredménye (EDITOR)

*.OBJ - programozónak *.HEX - programozónak


MCRF355: Ipari vezető csak olvasható típus A PROGRAM FORDITÁSA
PIC16Cxx Programmer
MCRF360: 100pF tokon belüli rezonancia kapacitás TrueFlight PRO MATE Programmer (ASSEMBLER)

RÉSZEK KIPROBÁLÁSA
(SZIMULÁTOR)

HOGYAN LEHET KONTROLLERREL EGY


ADOTT FELADATOT MEGOLDANI? A GÉPI KÓDÚ PROGRAM ÁTVITELE
A FEJLESZTENDŐ RENDSZERBE

• Mit akarunk megvalósítani?


• Megvalósítható-e mikroszámítógéppel? KIPRÓBÁLÁS, TESZTELÉS
HIBAKERESÉS
• Ember-gép kapcsolat megtervezése !!!!!!
• Be- és kimenetek száma, típusa (analóg, digitális) VÉGE

• Programtár nagysága
A RENDSZERFEJLESZTÉS BLOKKVÁZLATA
• A megfelelő mikroszámítógép kiválasztása
PIC TANFOLYAM PIC TANFOLYAM
% Harvard architektúra, külön program és @ Insert one line of assembly language code. ON INTERRUPT Execute BASIC subroutine on an interrupt.
5.1 PIC16/17 adatmemória ASM..ENDASM Insert assembly language code section. OUTPUT Make pin an output.
MIKROKONTROLLEREK: % Kis áramfelvétel (15 mA tipikusan 3V, 32 KHz-nél) BRANCH Computed GOTO (equiv. to ON..GOTO).
BRANCHL BRANCH out of page (long BRANCH).
PAUSE Delay (1mSec resolution).
Teljes statikus kialakítás PAUSEUS Delay (1uSec resolution).
HARDVER ÁTTEKINTÉS %
BUTTON Debounce and auto-repeat input on specified pin. PEEK Read byte from register.
% Kisfogyasztású SLEEP (szundi) üzemmód (< 1 mA CALL Call assembly language subroutine. POKE Write byte to register.
3V-nál) CLEAR Zero all variables. POT Read potentiometer on specified pin.
% Minden utasítás egyszavas COUNT Count number of pulses on a pin. PULSIN Measure pulse width on a pin.
% Minden utasítás (kivéve az ugrások) egy ciklusú DATA Define initial contents of on-chip EEPROM. PULSOUT Generate pulse to a pin.
% Watchdog időzítő belső RC oszcillátorral DEBUG Asynchronous serial output to fixed pin and baud. PWM Output pulse width modulated pulse train to pin.
DISABLE Disable ON INTERRUPT processing. RANDOM Generate pseudo-random number.
% Kódvédelem
DTMFOUT Produce touch-tones on a pin. RCTIME Measure pulse width on a pin.
% A digitális I/O vonalak nagy meghajtó/nyelő árama EEPROM Define initial contents of on-chip EEPROM. READ Read byte from on-chip EEPROM.
(25 mA) ENABLE Enable ON INTERRUPT processing. RESUME Continue execution after interrupt handling.
% Beépített reszet, feszültségcsökkenés figyelő END Stop execution and enter low power mode. RETURN Continue at statement following last GOSUB.
(brown-out) FOR..NEXT Repeatedly execute statements. REVERSE Make output pin an input or an input pin an output.
FREQOUT Produce up to 2 frequencies on a pin. SERIN Asynchronous serial input (BS1 style).
&Duál 10-bit / 20 KHz, 8-bit / 80 KHz PWM
GOSUB Call BASIC subroutine at specified label. SERIN2 Asynchronous serial input (BS2 style).
&8-bites max 8 csatornás, 26 msec konverziós idejű SAR A/D GOTO Continue execution at specified label. SEROUT Asynchronous serial output (BS1 style).
&16-bites 16 csatornás integráló A/D HIGH Make pin output high. SEROUT2 Asynchronous serial output (BS2 style).
&Duál 5 mV-os ofszetű komparátor HSERIN Hardware asynchronous serial input. SHIFTIN Synchronous serial input.
&8-bites DAC HSEROUT Hardware asynchronous serial output. SHIFTOUT Synchronous serial output.
&Belső hőméréséklet érzékelő I2CREAD Read bytes from I2C device. SLEEP Power down processor for a period of time.
&Belső feszültség referencia I2CWRITE Write bytes to I2C device. SOUND Generate tone or white-noise on specified pin.
&Belső oszcillátor IF..THEN..ELSE..ENDIF Conditionally execute statements. STOP Stop program execution.
&116 pixeles 32 X 4 multiplexelt LCD meghajtó INPUT Make pin an input. SWAP Exchange the values of two variables.
&8/9-bites soros USART {LET} Assign result of an expression to a variable. TOGGLE Make pin output and toggle state.
&Telepes óra LCDOUT Display characters on LCD. WHILE..WEND Execute statements while condition is true.
&Duál 16-bites 200 nsec-os capture regiszter
LOOKDOWN Search constant table for value. WRITE Write byte to on-chip EEPROM.
LOOKDOWN2 Search constant / variable table for value.
&Duál 16-bites 200 nsec-os komparátor kimenet XIN X-10 input.
LOOKUP Fetch constant value from table. XOUT X-10 output.
&SPI / I2C busz illesztés
LOOKUP2 Fetch constant / variable value from table.
&Párhuzamos slave port
&64 bájtos EEPROM adatmemória
LOW Make pin output low. 5.3 PICBASIC- PRO COMPILER
NAP Power down processor for short period of time.
PIC TANFOLYAM UTASÍTÁSOK PIC TANFOLYAM

AN D fr1 ,fr2 AN D fr,W AN D W ,# lit PARALLAX CÉG '


'
50 MIPS (millió utasítás mp.-ként) sebesség
DC-50MHz működési tartomány
5.4 SX – A VILÁG
AN D W ,fr CALL a d d r8 CJA fr,# lit,a d d r9
CJA
CJB
fr1 ,fr2 ,a d d r9
fr,# lit,a d d r9
C J AE
CJB
fr,# lit,a d d r9
fr1 ,fr2 ,a d d r9
C J AE
CJBE
fr1 ,fr2 ,a d d r9
fr,# lit,a d d r9
UTASÍTÁSKÉSZ '
'
1 utasítás órajelenként (ugrás 3 órajel)
20ns utasításciklusidő, 60ns megszakítási válaszidő LEGGYORSABB
CJBE
CJNE
fr1 ,fr2 ,a d d r9
fr,# lit,a d d r9
\C J E
CJNE
fr,# lit,a d d r9
fr1 ,fr2 ,a d d r9
CJE
CLC
fr1 ,fr2 ,a d d r9 LETE '
'
E2 Flash Eprom Technológia
Helyben programozható az OSC lábakon MIKROVEZÉRLŐJE
CLR fr CLR W CLR W DT
' 10,000 irás olvasási ciklus
CLRB b it CLZ CSA fr,# lit Gyors megszakításkezelés
CSA fr1 ,fr2 C S AE fr,# lit C S AE fr1 ,fr2 A MNEMONIKOK ' Megszakításkor a PC, W, STATUS, és FSR regiszterek automatikus mentése
CS B fr,# lit CS B fr1 ,fr2 CSBE fr,# lit ' A belső időzítő/számláló (RTCC) túlcsordulás 3 órajel hosszúságú megszakítást generál
CSBE fr1 ,fr2 CSE fr,# lit CSE fr1 ,fr2 NAGYON ' RB port lábain a jelváltás megszakítást generálhat, vagy felébredést a kisfogyasztású (szundi) állapotból
CSNE
D E C S Z fr
fr,# lit CSNE
DJNZ
fr1 ,fr2
fr,a d d r 9
DEC
IJ N Z
fr
fr,a d d r 9
HASONLÓAK AZ Számos be/kimeneti (B/K) lehetőség
' Az összes portláb egyenként állítható be- vagy kimenetnek
IN C fr IN C S Z fr JB b it,a d d r9 MCS-51-ES ' A bemenetek állíthatóan TTL vagy CMOS szint kompatibilisek
JC a d d r9 JM P a d d r9 JM P PC+W
JM P W JN B b it,a d d r9 JN C a d d r9
UTASÍTÁSKÉSZLETÉ ' Minden lábon aktivizálható egy belső felhúzó ellenállás (~20kohm a tápfeszre (VDD))
' RB és RC bemeneteknél választható Schmitt triggeres működés
JNZ a d d r9 JZ a d d r9 L C A L L * a d d rll HEZ ' Az összes kimenet 30mA-es áramot képes elnyelni/kiadni Új megoldás: virtuális
LJM P* a d d r ll LS E T* a d d r ll MOV fr,# lit ' perifériák
RA kimenetek szimmetrikus meghajtóként viselkednek (azonos Vdrop +/-)
MOV fr1 ,fr2 MOV fr,W MOV O P T IO N ,# lit ' Analóg komparátor az RB porton (RB0 a komparátor kimenete, RB1: in-, RB2: in+)
MOV O P T IO N ,fr MOV O P T IO N ,W MOV !p o rt fr,# lit
MOV !p o rt fr,fr MOV !p o rt fr,W MOV W ,# lit Járulékos komponensek csökkentése
MOV W ,fr MOV W ,/fr MOV W ,fr-W ÚJJÁSZÜLETÉS: ' Belső oszcillátor (off, 4MHz…32768Hz 8 lépésben) elektromágneses sugárzást (EMI) csökkenti
MOV W ,+ + fr MOV W ,--fr MOV W ,< < fr ' Beépített rövid idejű tápfeszcsökkenés zavar (brown-out) érzékelés (off, 4.0V)
' Bekapcsoláskor belső reset áramkör
MOV
MOVB
W ,> > fr
b it l,/b it2
MOV W ,< > fr
M O V S Z W ,+ + fr
MOVB b it1 ,b it2
M O V S Z W ,--fr
A SCENIX CÉG SX www.scenix.com
NEG* fr NO P NOT fr KONTROLLERÉBEN PIC16C5x kompatibilitás
NOT W OR fr,# lit OR fr1 ,fr2 ' A hatékonyabb kódolás érdekében tíz új utasítás www.parallaxinc.com
OR fr,W OR W ,# lit OR W ,fr ' Könnyen kezelhető nagysebességű megszakítás alpha1.obuda.kando.hu/~konya
RET RE TW lit,1 it,... RL fr ' 8 szintű veremkezelés is választható
RR fr SB b it SC ' A Carry jelzőbitet az összeadásnál és kivonásnál figyelembe vehetjük (megfelel az ADDC ,SUBB utasításoknak, az eredeti ADD
SE TB b it S K IP SLEEP és SUB a műveletvégzéskor a Cy - t nem veszi figyelembe!)
SN B b it SNC SNZ ' W akkumulátor az RTCC regiszter helyébe kerülhet, egyszerűsítve a számláló kezelését
STC STZ SU B fr,# lit ' A kód memória programból olvasható, lehetővé téve a program sérülésének a detektálását (‘98 UL compliance)
SU B fr1 ,fr2 SU B fr,W SU BB * fr,b it ' E2Flash programmemória és a fájl-regiszter RAM biztosítóval a ‘54 *- ’58 elemknél található méretrekorlátozható
SW AP fr SZ TEST fr ' A Turbo biztosítóval állítható 1utasítás/1órajel vagy 1utasítás/4órajel utasítás végrehajtás
XO R fr,# lit XO R fr1 ,fr2 XO R fr,W
XO R W ,# lit XO R W ,fr
Általános jellemzők
' E2Flash kódmemória: 2048 x 12 bit
J e lö lé s e k : fr - file re g is z te r, # lit - k o n s ta n s , W - w re g is z te r, a d d r 8 - 8 b ite s c ím ,
' RAM regiszterek száma: 136 bájt
' Működési feszültség: 3.7V - 6.25V
(A k i ism e ri a 5 1 -e s u ta sítá sk é szle te t, a n n a k n a g y o n sze m b e tű n ő a ' Fogyasztás: csak 12mA @ 50MHz, 5V !!!
h a so n ló sá g .) ' A Parallax Inc. - től komplett fejlesztőrendszer vásárolható (SX-Key)
PIC TANFOLYAM PIC TANFOLYAM
5.5 MPLAB FEJLESZTŐ RENDSZER 5.5.0.1 ASSEMBLER
Az gépi kódú bináris utasításokat és paramétereit könnyen megjegyezhető szavakkal
helyettesíti. Ezekkel és az adatokhoz rendelt szimbólumokkal írjuk meg a programot az
Compile
Simulate ún. assembly nyelven. Az így megírt program forrásszövegét assembler-rel fordítjuk
MPLAB-Sim
Assemble
MPASM /
le.
MP-C
2 Egy assembler sor négy mezőből áll: (lényegében egy 4 oszlopos táblázat)
1 Edit Project
MPLAB
3
CIMKE UTASÍTÁS OPERANDUS MEGJEGYZÉS
4
Emulate
PICMASTER Például:
Program
PRO MATE
PICSTART UJRA: MOV A,45H ;A ÉRTÉKE
Kereszfordító: (cross assembler): a gépi kódot előállító program egy másik gépen fut.
Egy assembler program utasítássorokat és direktívákat tartalmaz
Mit akarunk megvaló-
sítani? Az assembler direktívák tulajdonképpen a fordítóprogramnak szóló, a fordítást vezérlő
Fejlesztés lépései Megvalósítható-e parancsok. Ezek segítségével:

" Hardver és szoftver tervezés mikroszámítógéppel? • definiálhatók szimbólumok (pl. EQU, DATA)
Ember-gép kapcsolat HATAR EQU 120 ; pl. MOV A,#HATAR A tartalma 120 lesz
" Programírás (editálás) (forráskód készítése) megtervezése !!!!!! BEM1 DATA 20H ;20H mem.címre BEM1 néven hivatkozunk
" Gépi kód (tárgykód) előállítása assembler, compiler Be- és kimenetek száma, • foglalhatók le és inicializálhatók mem. területek (pl. DS, DB, DW)
típusa (analóg, digitális) DS 20 ;20 bájt lefoglalása a memóriában
" program jóságának ellenőrzése
Programtár nagysága SZOV: DB ’EZT ÍROM KI’ ;szöveg definiálása
– szimulátor (program) A megfelelő • állíthatók be címek (ORG, END)
– emulátor (hardver) mikroszámítógép START ORG 1000H ;1000H címen kezdődik a program
– programozó kiválasztása END ;ez a program vége
PIC TANFOLYAM PIC TANFOLYAM

5.5.0 MPLAB FEJLESZTÉS 5.5.1 MPASM UNIVERZÁLIS ASSEMBLER: JELLEMZŐI


Az MPLAB-ban a projekt egy projekt objektum (ez a
node, azaz csomópont) egy vagy több forrás
objektumból (node-ból) épül fel. Ezek a források ! Univerzális assembler minden PIC16/17 típushoz
általában MPASM assembler, illetve magas szintű C ! Windows alatt futtatható
vagy BASIC forrásfájlok, előre lefordított könyvár
fájlok, más tárgykódok (object fájlok), illetve az ezek ! Makrózási lehetőség
összekapcsolását végző linker script vezérlő ! Sztring helyettesítő makró (C stílusú #define)
szövegfájlok (hasonlók a DOS batch fájljaihoz). ! Kód makró
Linkeléskor az összelinkelni kívánt ún. object ! Feltételes assemblálás
fájlokból hozzuk létre a végleges lefordított ! Include fájlok használata
tárgykódot, vagyis egy .HEX fájlt ilyen node-ok építik
fel. Egy node egy forrásprogramot és egy
! C stílusú kifejezés kezelés
fordítóprogramot (BASIC, C) vagy assembler ! Több szabványos Intel hex formátum generálása
programot is meghatároz ezeket hívjuk nyelvi
eszközöknek ( Language Tool = Nyelvi eszköz).
Fájlok létrehozása
1. Új projekt létrehozásakor először a program fejlesztési 2. Utána a Project>New Project menüpontnál kell
módját, és a használt PIC processzor típusát kell megadni a projekt fájl nevét (pl.: minta.pjt), és a " Automatikus assemblálás a MAKE projekt módszerrel (MPLAB)
megadni az Options>Development Mode menüpontban: könyvtárát, ahol el fogjuk helyezni.
3. Ezek után az Edit Project párbeszédes doboz jeleneik " Gépi kód generálása a programozók és emulátorok számára
• Editor Only - csak program írás és fordítás meg, ahol a benne lévő Project Files ablakban már
• MPLAB-SIM – szimulator látjuk a minta[.hex] bejegyzést. (Itt adhatjuk meg az " A bemenet:
• MPLAB-ICE Emulátor Include, Library és Linker Script fájlok útvonalát, *.ASM forrásfájl
• PICMASTER Emulátor változathatjuk meg a már beállított fejlesztési módot,
• SIMICE Simulator kontroller típust, valamint a használt nyelvi eszközt " A kimenet:
• ICEPIC (fordító, vagy assembler programot)). *.HEX fájl (programozó, emulátor, szimulátor számára)
• MPLAB-ICD Debugger - ez az új lehetőség ! 4. Ha rákattintunk a minta[.hex] bejegyzésre, megjelenik
a NODE Properties párbeszédes ablak, ahol *.LST fájl listához
• A megadás után a RESET-re kattintva történik meg a megnézhetjük illetve átállíthatjuk a nyelvi eszköz *.ERR hibafájl
kiválasztás. beállított alapértelmezéseit: *.COD fájl a szimulátor, emulátor szimbólumokhoz
PIC TANFOLYAM PIC TANFOLYAM
5.5.1.1 MPASM UNIVERZÁLIS ASSEMBLER: LIST DIREKTÍVÁK 5.5.1.3 MPASM UNIVERZÁLIS ASSEMBLER : KONFIGURÁCIÓS
BITEK DIREKTÍVA
Minden parancssorban megadható direktíva az .ASM fájl LIST kulcsszava után is megadható
Szintakszis:
Oszcillátor típus, kódvédelem, WDT beállítása
LIST <OPTION>=<VALUE>, .... __CONFIG direktíva állítja be a biteket, mikor “Processzor definíció”-t pl.
P16C74.INC használjuk
Opció Default érték Leírás Csak az eszközben megtalálható bitek definiálása
P Nincs Processzor típus-Megadni kötelező! A konfigurációs bitek között a & karaktert kell használni
16C54, 17C42, etc.. Például: PIC16C54 - XT oszcillátor, WDT off, CP on, IDLOCS = 1234
E ON Eng./Tiltás Hiba fájl generálás
L ON Eng./Tiltás Lista fájl generálás #include “P16C5X.INC”
__CONFIG _XT_OSC & _WDT_OFF & _CP_ON __IDLOCS 1234
M ON Eng./Tiltás Makró kiterjesztés
Példaprogram: ADVGENIC.ASM
C ON Eng./Tiltás Kis/nagybetű megkülönb.
Q OFF Eng./Tiltás hibaüzenetek kijelzése Szöveg tárolása
( Az alkalmazásokban sokszor kell szövegeket megjeleníteni
R HEX Radix definiálása (HEX,DEC,OCT)
( A szövegeket RETLW utasításokat tartalmazó táblázatokban tároljuk
X OFF Eng./Tiltás keresztreferencia fájl
generálás ( DT direktíva (define table) minden szövegkarakter elé teszi a RETLW
F INHX8M HEX output fájl formátum utasítást:
INHX8M használt a MCHIP-nél DT “JOE”,0 ; Hello szöveg tárolása
Példa: LIST P=16C74 Ami azonos a következővel:
....
END RETLW ‘J’
Megj.: RETLW ‘O’
Processzor “P=<proc>“ mindig az első sor RETLW ‘E’
END mindig az utolsó sor RETLW 0
PIC TANFOLYAM PIC TANFOLYAM

5.5.1.2 MPASM UNIVERZÁLIS ASSEMBLER : INCLUDE DIREKTÍVA 5.5.1.4 MPASM UNIVERZÁLIS ASSEMBLER: MACRO, ENDM
# Speciális funkcójú regisztereket, (STATUS, PORTok, stb.) a “Processor Definition” include
fájlokban kell megadni, pl.: DIREKTÍVÁK
#P16C74A.INC ) Felhasználó által definiált utasítás sorozat forrásszövegbe illesztése
#P17C44.INC
) Makrók előnyei:
) Gyakran használt megoldások következetes alkalmazása
# A felhasználói könyvtárak, szubrutinok szintén include fájlba helyezhetők
) A forráskód egyszerűbb módosíthatósága
# Assembler az include fájlokat úgy kezeli, mint forráskódot ) Könyebb tesztelhetőség
# Szintaktika: ) Használat előtt kell definiálni !!!
Szintakszis:
# #include <path><FILENAME.INC> ! Definíció:
# #include C:\MPLAB\P16C74.INC <macro_name> MACRO [<arg1>, ... ,<argn>]
...
# A proceszort az #include előtt kell definiálni ENDM
! Használat:
ORG, CBLOCK, EQU direktívák <macro_name> [<arg1>, ... , <argn>]

ORG: Beállítja a program kezdőcímét ! Pl.: LEDon MACRO ; ledon makró megadása
ORG 0x04 ; a követekező utasítás 4H címen lesz BSF PORTA,1 ; LED világít
ENDM
EQU: Értékhez szimbólumot rendel, adatmemória címek helyett szimbólumok használhatók ....
LEDon ; LED be, makróhívás
COUNT EQU 0x020 ; COUNT használható 20H című regiszter helyett Feltételes assemblálás
INPULSES EQU 0x021 ; INPULSES használható 21H című reg. helyett A forráskód feltételtől függően fordítható
CBLOCK: Szimbólumtömböt definiál, jól használható regiszterek megadására Moduláris programírást tesz lehetővé
Szimulátoros hibakeresés
CBLOCK 0x20 ; A definíció a 20H című regiszternél kezdődik IF - Ezzel kezdődika feltételes blokk
COUNT ; COUNT a 20H cimű fájlregisztert használja
INPULSES ; INPULSES pedig a 21H-t Szintakszis: IF <expr>
ENDC ENDIF - a feltételes blokk vége ENDIF
PIC TANFOLYAM PIC TANFOLYAM
5.5.2.1 MPLAB-SIM I. 5.5.2.3 MPLAB-SIM III.
" Univerzális szimulátor PIC16/17 családhoz
" PC Windows és MPLAB-kompatibilis * A nyomkövetés során fájlban tárolhatjuk el az
Diszkrét esemény, utasítás alapú szimuláció
"
utasításokat és a regiszterek állapotát
" Teljes forrásszintű hibakeresés (debugging)
" Korlátok nélküli összetett töréspontok
" Megszakítás és perifériaműködés szimulációja (A/D és soros I/O nem!) * A fájlt a szimulátor hozza létre és többek között
" Stimulus fájlok tartalmazza:
" A DOS alapú MPSIM-et helyettesíti * Lépésszám

Stimulus Fájl * A stopper által mutatott időpontot


)Stimulus fájlban adható meg bármelyik bemenet adott időpontba történő gerjesztése * Megváltozott regiszter értékeket
)Utasítás szinten szimulálja a láb bemeneti feltételeit
)MPLAB-ban <FILENAME>.STI fájl szerkesztése * A nyomkövetés adatai a képernyőn fognak megjelenni
)Meg kell adni a portot, időt, állapotot és egy generált ASCII szövegfájlba kerülnek
)Szintakszis:
)STEP <PORT#> <PORT#>
)<TIME> <VALUE> <VALUE>
Példaprogram: ADVSTIM.ASM
)Például:
STEP RA0 RA1 ! Portdefiniálás
3 0 1 ! 3. lépésnél, RA0=0, RA1=1
12 1 1 ! 12. lépésnél, RA0=1, RA1=1

PIC TANFOLYAM PIC TANFOLYAM

5.5.2.2 MPLAB-SIM II. 5.6.1 ICD=IN-CIRCUIT DEBUGGER


Billentyű és időpont bemeneti gerjesztés • Az ICD az MPLAB-ba van illesztve
# Aszinkron, billentyű megnyomáshoz rendelt bemenet • a program letölthető, és teljes sebességgel végrehajtható
# Funkcióbillentyű I/O láb állapothoz rendelése
# Mikor a Stimulus Dialog dobozban egy gombot megnyomunk, az I/O láb állapotot vált, az
• egy töréspont helyezhető el
állapotok: • választható a töréspont alatt a perifériák felfüggesztése
# High - magas
• töréspont esetén:
# Low - alacsony
# Pulse - impulzus
•a 0x1F00 címen kezdődő debug program végrehajtódik
# Toggle - ellentétére vált •a RAM vagy SFR-ek tartalma letölthető az MPLAB-ba
# Szinkron ismétlődő órajel esemény bemenet • lépésenkénti futtatás is lehetséges
# I/O lábhoz óra rendelhető MPLAB-ICD Header
# Frekvenciája, periódusideje választható

Állapotváltás regiszter fájllal


# Perifériamodulok szimulálásakor hasznos
# Register Stimulus új regiszterértéket tölt a regiszterekbe, mikor egy adott címet elértünk
TO RS-232
# Pl. az A/D átalakítás eredményét tartalmazó ADRES reigszter tartalmát egy fájlból töltjük, mikor
kiolvassuk a tartalmát Target Socket
MPLAB-ICD Module ........................
........................
# Példaprogram: ADVAL.INJ: ........................
........................
........................
........................
0x16 Első híváskor 16 HEX-et tölt ........................
Power In ........................
........................
0x84 Másodikra 84 HEX
... stb. Target Application or Demo Board
MPLAB-ICD Demo Board
PIC TANFOLYAM PIC TANFOLYAM
5.6.2 MPLAB-ICD KEZELÉSE 6. PROGRAMOZÁS: ARCHITEKTÚRA (ISMÉTLÉS)
# Harvard architektúra Minden # Egyciklusos utasítások
Kell: MPLAB V4.11 vagy nagyobb utasítás egyszavas (Long # Utasítás vonal (pipelining )
Options-Development Mode: word) # Redukált utasításkészlet
MPLAB-ICD Debugger
Programírás: Open vagy New Project Szoftver architektúra:
# Program memórai lapozása (paging) nagy programoknál
• Reset vector címen ‘NOP’-nak kell
lenni # Fájlregiszter bankváltás (banking) nagy SRAM esetén
• 1 verem szintet felhasznál # Ugró utasítások 2 ciklus hosszúak
• Felhasználja a program memória Műveleti kód és operandus egy program-szóban
utolsó 256 szavát, (1F00h-1FFFh)
Programszó hossza típusfüggő:
• 6 bájt adatmemóriahelyet (70h,
1EBh - 1EFh) használ
16C5XX = 12 bit, 16CXXX = 14 bit, 17CXXX = 16 bit
• továbbá két SFR-ben: Bennfoglalt utasításra példa:
• RB6 és RB7 lábakat, ezért
MOVLW #imm<8> 1100XX imm<8>
• csak a PORTB (006h) & TRISB
(086h) 0-5 bitje használható Közvetlen címzésre példa:
MOVWF #faddr<7> 0000001 faddr<7>
Magyarázat szóban !!! Programvezérlő utasításra példa:
PIC TANFOLYAM
GOTO #location<11> 101 location<11> PIC TANFOLYAM

5.6.3 LETÖLTŐ (DOWNLOADER) 6.1PROGRAMOZÁS: RAM KIOSZTÁS (ALLOKÁCIÓ)


# A közvetlenül címzett regisztereket a 0-ás Bankban célszerű tartani
A PIC16F87x családnál nem csak az adatmemória, hanem a 14 bites
# Adatstruktúrákat, szoftver vermet, és más közvetetten (FSR-en) keresztül címzett
programmemória is programmal írható, és így az eredeti program regisztereket az 1-es Bank-ba célszerű tárolni
módosítható. Ehhez a memória nem használt területén el kell helyezni # Más további bankváltás nem szükséges (kivéve a perifériák inicializálását)
egy valamilyen perifériális eszközt (soros, I2C busz, SPI ) kezelő hexa
; Bank 0 Direkt regiszterek ; Bank 1 Indirekt regiszterek
letöltő programot, amely képes a periférián érkező INTEL hexa CBLOCK0x20 SWSTACKSTART EQU 0xA0
programfájlt fogadni, és a benne lévő programszavakat a flash program COUNTLO
memóriába írni. A monitorprogram: COUNTHI
Parancs Bemenet Kimenet Magyarázat SWSTACKPTR
I XX YY XX című fájlregiszter tartalma (YY) a képernyőre ...
ENDC
O XX YY ---- XX című fájlregiszterbe YY hex tartalom bevitele Példa szoftver veremre
D ---- ---- A PC-ről töltött hexa fájl memóriába írása és
futtatása # Bejövő, vagy kimenő adatok tárolására használható
Itt XX és YY hexa formátumú billentyűzetről beírt illetve kijelzett számok. # Létrehozható egy szoftver “stack” adat struktúra
initswstack
PROGRAM MEMÓRIA
; PROCESSZOR MOVLW SWSTACKSTART ; SW verem kezdőcím W-be
Első lépésként, a már kész 0 GOTO MONITOR ORG 0X0000
; RESET VEKTOR MOVWF FSR ; FSR regiszter inicializálása
3 GOTO MAINPRG
monitorprogramot egy FŐPROGRAM
.......
MOVLW 0X018 ;HOSSZÚ
PIC16F87X memóriájába írjuk pushswstack
egy programozó (vagy ICD) MOVWF PCLATH ;UGRÁS A MONITOR MOVWF INDF ; adat az SW verembe (Push)
; PROGRAMRA INCF FSR ,F ; FIFO mutató növelése
segítségével. A program a GOTO MONITOR
RETURN ; PUSH vége
memóriában a következő módon MONITOR:
START_PRG ;3-MAS CÍM, popswstack
helyezkedik el: ; PROGRAMKEZDET DECFFSR,F ; SW verem mutató csökkent.
MOVF INDF,W ; Adat W-be
PROGRAM MEMÓRIA VÉGE RETURN ; POP vége
86 PIC TANFOLYAM PIC TANFOLYAM
6.2 PROGRAMOZÁS: TÁBLAKEZELÉS 6.4 PROGRAMOZÁS: PARAMÉTER ÁTADÁS
Táblák az ADDWF PCL and RETLW utasításokkal kezelhetők ! Szubrutinoknál szükséges a változók értékeinek az átadása
ORG 0x10 ; Page 0 ! Matematikai rutinoknál, pl. szorzás és osztás
MOVF offset,W ; w = ofszet (eltolás) ! Soros adó és vevő rutinoknál pl. PUTCHAR vagy GETCHAR
CALL Table ! Globális változók
... ! Közvetlen címzésű regiszterek használata
ORG 0x20 ; Page 0 ! A legjobb néhány paraméter esetén
Table ! W regiszter
ADDWF PCL,F ; hely=Tábla kcim + ofszet
! Egy paraméter átadásához a W-t használjuk
DT “ABCD” ; RETLW sorozat def.
! A paramétert W-be tesszük
TableEnd ; Page 0
! Meghívjuk a szubrutint. PÉLDA:
IF ((Table&&0xFF00)!=(TableEnd-1 && 0xFF00))
MOVLW ‘M’ ; ASCII M karakter W-be
ERROR „A tábla átlépte a 256 szavas laphatárt” CALL putchar ; Karaktert a kijelzőre
ENDIF ! FSR - összetett adatstruktúrákhoz
Ugrótáblák ! Nagyszámú paraméter esetén
# Különféle bemenő feltételtől függő rutinra való ugrásra használható ! Csak a kezdőcímet kell átadni

# Hasonló az előbbi táblához GOTO utasítás van a CALL és RETLW helyett ! FSR használható az első adatelemre mutatónak. Példa:
# Használatával a veremszintek száma csökkenthető CLK_MIN_LD EQU 0x0C ALM_MIN_LD EQU 0x10
CLK_MIN_HD EQU 0x0D ALM_MIN_HD EQU 0x11
MOVF NEXT_STATE,W CLK_HOUR_LD EQU 0x0E ALM_HOUR_LD EQU 0x12
GOTO jump_table CLK_HOUR_HD EQU 0x0F ALM_HOUR_HD EQU 0x13
...
jump_table ; PC felső felét inicializáni kell MOVLW CLK_MIN_LD
ADDWF PCL, F MOVWF FSR
GOTO state0_routine CALL inc_time
MOVLW ALM_MIN_LD
GOTO state1_routine MOVWF FSR
GOTO state2_routine CALL inc_time
Példa: ADVJUMP.ASM
PIC TANFOLYAM PIC TANFOLYAM

6.3 PROGRAMOZÁS: PWM 6.5 PROGRAMOZÁS: TASZK KEZELÉS


CCP PWM mód # Szubrutinok adott időközönkénti futtatására használható
Period Period
! A periódus végén a kimenet # Gyakran a TMR0 timert használják ütemadóként
magas lesz # Vagy a lekérdezéses (polling) (PIC16C5XX) vagy megszakításos (PIC16CXXX /
! A kitöltési ciklus (Duty Cycle PIC17CXXX) technikát lehet használni
(D.C.)) végén a kimenet
alacsony színtű lesz Taszk kezelés lekérdezéssel
PIC16C5XX TMR0 regiszterének olvasása
D.C. D.C. ! A periódus végén egy új
kitöltési tényező tölthető # TMR0 aktuális és az előző értékének az összehasonlítása
Uátl=U*(D.C./Period)
Annak meghatározása, hogy melyik bit változott
Példaprogram: ADVPWM.ASM #

# A változott bit tesztelése alapján a megfelelő taszk (szubrutin) hívása


PWM mint D/A átalakító

org 0x10 MOVF TMR0,W ; TMR0 aktuális értéke W-be


R
Vout CLRF PCLATH XORWF PrevTMR0,W ; Nézzük melyik bit változott...
PIC16CX C MOVF Vout,W MOVWF ChaTMR0 ; Minden megváltozott bit ChaTMR0-ba
XX CALL OutputVoltage
MOVWF CCPR1L
XORWF PrevTMR0,F ; Az aktuális lesz az előző érték...
GOTO Continue
OutputVoltage Példaprogram: ADVPOLL.ASM
ADDWF PCL,F
RETLW 0x00 ; Vss
Vout RETLW 0x3F ; (Vdd*255) / 64
RETLW 0x7F ; (Vdd*255) / 127
fJEL Frekvencia fPWM RETLW 0xBF ; (Vdd*255) / 191
RETLW 0xFF ; Vdd
PIC TANFOLYAM PIC TANFOLYAM
6.6 PROGRAMOZÁS: TASZK KEZELÉS MEGSZAKÍTÁSSAL 6.8 PROGRAMOZÁS: SOROS VONAL, SPI
# A hatékony bitkezelő és forgató utasításokkal egyszerűn valósítható
# TMR0 felhasználása periodikus megszakításra
meg a szoftver UART
# A következő taszk számontartása
# Az időszeletelés felhasználható a soros kommunikációra, stb. # Fél duplex rutinok a biteket időzítve tolják
# Két megvalósítási lehetőség:
# Az ADÓ és VEVŐ rutin összesen csak 50 szó hosszúságú!
# Taszk mutató növelése a megszakítási programban (ISR-Interrupt Service
Routine) # Az adattátviteli sebesség max. 115Kbit/sec lehet
# A taszk végrehajtása az ISR-ben
VAGY:
Példaprogram: ADVUART.ASM
# Jelzőbitek állítása a taszkmutató alapján
# Egy fő programbeli hurokban figyeljük a jelzőbiteket és futtatjuk a Soros adatátvitel - SPI-vel
taszkot ha kell
# Ha a timer megszakít, a taszkok az ISR-ben futnak
# Számos perifériaáramkör használja a 4 vezeté-kes SPI szinkron soros
# Pontos és precíz időzítést biztosít a valós idejű taszkok számára protokollt
# A megszakítási rutin hosszú lesz, ezért rövid taszkok esetén előnyös a használata # A hatékony bitkezelő és forgató utasításokkal egyszerűn valósítható
# Példa: meg a szoftver SPI
# TMR0 megszakít 4 msec-ént # A teljes duplex rutinban a kimeneti bitek egyszerű kitolásával egyszerre
# Billentyűzet figyelése 52 mse.-ként történik a bemeneti bitek betolása
# Forgatási taszk 1 mp-ként # Az ADÓ és VEVŐ rutin összesen csak 17 szó hosszúságú!
Példaprogram: ADVTASKI.ASM # Az adattátviteli sebesség max. 373Kbit/sec lehet
Példaprogram: ADVSPI.ASM
PIC TANFOLYAM PIC TANFOLYAM

6.7 PROGRAMOZÁS: ADATBEVITEL AZ I/O FORGATÁSSAL 6.9 PROGRAMOZÁS: WATCHDOG SZOFTVER


# Az adatbemenet az I/O portok LSB (bit 0) vagy az MSB (bit 7) kivezetése $ A watchdog hatékonysága függ a felhasználói program jól megírtságától
# RRF utasítás (LSB) vagy RLF utasítás (MSB) a bemenet értékét a carry-be tolja $ Az egész programban csak egy CLRWDT utasítást használjunk!
$ A CLRWDT utasítást a főhurokba tegyük
# Ugyanezen RRF vagy RLF utasítások a biteket egy fájl regiszterbe tolják $ Ne tegyük a CLRWDT-t ISR( megszakítási) vagy egyéb szubrutinba
$ Olyan minimális WDT túlcsordulási időt válasszunk, amit a fő hurok végrehajtási
RRF PORTB,W ; RB0 bit Carrybe ideje megenged
RB0 RRF DReg,F ; Adatbit mentése DReg-be $ A nem használt memórát töltsük fel a GOTO wdtreset utasítás kódjával
Adat be $ Ha a PC értéke elromlik, akkor valószínűleg ez az utasítás végrehajtódik, és újra
indítja a kontrollert
$ FILL direktíva használható a feltöltésre:
Adatkivitel forgatással FILL (GOTO wdtreset), (400h-$)
# Adatkimenet az I/O port LSB (bit 0) vagy MSB (bit 7) bitje ORG 3FFh
wdtreset
# A port többi bitje csak bemenet lehet !!!
WDT reset törlése
# RRF vagy RLF -el a kimeneti bitet carry-be $ Bekapcsoláskor a WDT végrehajtatása:
# RRF ( MSB) vagy RLF (LSB) utasítással a carry-ből a kimenetre mozgatjuk $ a RAM memória minta ellenőrzése tápfesz. Bekapcsoláskor, Ha a minta nincs a
a bitet RAM-ban: először a RAM minta feltöltése, utána a WDT reset végrehajtása
RB7 bemenetek Szubrutin számlálás
RB6 $ Két számláló: szubrutin hívó és végrehajtó számláló
RB5 $ Hívó számláló inkrementálása minden rutinhíváskor
RB4 RRF DReg,F ; Kimeneti bit Carry-be
RLF PORTB,F ; Onnan a kimenetre
$ Végrehajtó számláló inkrementálása minden szubrutin kezdetén
RB3
RB2
$ A fő hurok elején a két számláló egyezőségének a vizsgálata, ha nem egyformák,
RB1
akkor WDT reset
RB0 kimenet PIC TANFOLYAM
Példaprogram: ADVRELSW.ASM PIC TANFOLYAM
6.10 PROGRAMOZÁS:UTASÍTÁSSZÁM CSÖKKENTÉSE 7.1.1 EGY MEGOLDOTT FELADAT I.
DIESEL AUTÓKNÁL A MOTOR TÚLPÖRGETÉSE KÁROS A MOTORRA. A FELADAT EGY OLYAN
! Egy utasítás megtakarítható két egymásutáni NOP esetén FORDULATSZÁM MÉRŐ KÉSZÍTÉSE, AMELY 1000-5000 FORD/PERC KÖZÖTT 500-AS
! GOTO “következő utasítás”-t használjuk LÉPÉSENKÉNT EGY LED KIGYUJTÁSÁVAL JELZI AZ AKTUÁLIS FORDULATSZÁMOT. 4000-ES
FORDULAT TÚLLÉPÉSE ESETÉN A MEGFELELŐ LEDEKET BEKAPCSOLVA ÉGVE HAGYJA,
NOP GOTO $+1 JELEZVE A TÚLLÉPÉST. AZ ÍGY KIGYÚJTOTT LEDEK TÖRLÉSE CSAK EGY SPECIÁLIS
NOP 1 utasítás, 2 ciklus ELEKTRONIKUS KULCCSAL LEHETSÉGES. (Tápfesz. kikapcsolása után is megőrzi az állapotát!)
2 utasítás, 2 ciklus KIMENETEK SZÁMA: 9 LED + 2 KULCS
# A célbit meghatározza, hogy az eredmény a W vagy az F(ájl) regiszterbe kerüljön BEMENETEK SZÁMA: 1 FORD.SZÁM IMPULZUS, 1 KULCS BEM.
# Célszerű az adatmozgatást átgondolni VCC
EEPROM KELL A TÚLLÉPÉS TÁROLÁSA MIATT 13 I/0 + EEPROM => PIC16F84
5. LAB = GND

Példa: A + B -> A U1
14. LAB = VCC
17
RA0 18 imp. be
VCC

kodbe R10
MOVF A,W MOVF B,W 4 RA1
MCLR RA2 1
RA3 2
kodaki
kodbki
RA4 3
ADDWF B,W ADDWF A,F RB0 6
7
R1 D1 VCC
RB1
MOVWF A REZONATOR 16 RB2
OSC1 RB3
8
9
10
470
R2 D2
A+B
RB4
3 utasítás 2 utasítás 15 OSC2 RB5
RB6
RB7
11
12
13
470
R3 D3 TÖRLŐ KULCS
4 MHz
+ Egy bit átvitel két regiszter között (REGA-ból REGB-be) PIC16C84 470 4
U2B
R4 D4 6
+ REGB bit előzetes beállítása A
U2A
5
U2D
470 1 12
+ REGA bit-je tesztelése alapján a bitet esetleg megváltoztatjuk IC1
R5 D5
2
3 7400
U2C
13
11

+ Portok esetén, két ciklus hosszúságú váltás (glitch) lehetséges!!! +12V


C2
7812 VCC 470
R6 D6 B 7400
9
10
8 7400
C1
C C 470
R7 D7 7400
BTFSS REGA,2 BCF REGB,5
470
BCF REGB,5 BTFSC REGA,2 R8 D8 A KULCS
ZÖLD SÁRGA PIROS
BTFSC REGA,2 BSF REGB,5 470
R9 D9 100015002000250030003500 4000 45005000
BSF REGB,5 470
4 utasítás 3 utasítás PIC TANFOLYAM PIC TANFOLYAM

6.11 PROGRAMOZÁS: UTASÍTÁSSZÁM CSÖKKENTÉSE 7.1.2 EGY MEGOLDOTT FELADAT II.


MILYEN RÉSZFELADATOKAT KELL MEGOLDANI:
# A kimeneti bit állítása egyforma ideig tartson (szinkronizálás), ha ez fontos •ÜZEMKÉPESSÉG ELLENŐRZÉSE EEPROM
• FORDULATSZÁM MÉRÉS
# LSB vagy MSB esetén a ROTATE utasítás használható
• MÉRT ADATOK ALAPJÁN LED KIJELZÉS KEZELÉSRE
BTFSC OutBit,0 ; Átlépés ha kimenet nulla
• TÚLLÉPÉS TÁROLÁSA ÉS KIJELZÉSE VIGYÁZNI !!!
• TÚLLÉPÉS TÖRLÉSE KULCCSAL ÉLFIGYELÉS
GOTO kim1 ; Ugrás 1-be állításra NEM RAM !!! T

NOP ; Egy cikl. késl. a szink. miatt PORTOK BEÁLLÍTÁSA JEL


ELŐBB
INICIALIZÁLÁS ÖSSZES LED KIGYUJTÁSA EGYENKÉNT (régi)
BCF PORTA,1 ; Kimeneti bit törlése EEPROMBÓL RAM-BA ÍRÁS
JEL (új)
GOTO kimkesz ; végére ugrás FORDULATSZÁM MÉRÉS POZITIV ÉL
kim1 régi XOR új
NEGATÍV ÉL
BSF PORTA,1 ; kimeneti bit 1 MÉRÉS ALAPJÁN KIJELZÉS

GOTO kimkesz ; Végrehajtási idő szink. miatt I


(régi XOR új) AND új

kimkesz KÓDSOROZAT KI-BE TÖRLÉS ?

N figyel mov w,ra


OK ? N
! Regiszterek hasonlítása and w,#01 ;ra.0.bitje a JEL
I mov uj,w ;első minta
! A két folytatás egy GOTO-val elvar
TÖRLÉS mov regi,uj ;uj := regi
MOVF REGB,W ;REGB tartalma W-be N
>4000 ? nop
XORWF REGA,W ; REGA & REGB hasonlítása nop
BTFSS STATUS,Z ; Átlép ha REGA=REGB I mov w,ra
GOTO NotEqual ; Ugrik ha nem egyenlő RAM-BAN ?
I and w,#01 ;0.bit a fordszám
Equal mov uj,w
xor w,regi
. N
jz elvar ;regi=uj, nincs váltás
RAM TÁROLÓBA ÍRNI
. valtas
NotEqual További ötletek a programok tanulmányozása alapján! EEPROM-BA ÍRNI
and w,uj ;élváltás jó?
jz elvar ;nem
. ;ÉL FELDOLGOZÁSA
PIC TANFOLYAM PIC TANFOLYAM
7.1.3 EGY MEGOLDOTT FELADAT III.
FORDULATONKÉNT EGY IMPULZUS 7.2.2 MPLAB-ICD DEMO BOARD
fordulatszám periódusidő *4 fszam 3sec
1. EMULÁTOR FÉSZEK
(ford/perc) (msec) sec-ként alatt
----------------------------------------------------------- 2. LEDEKET
500 120 480 8.3 25 BEKAPCSOLÓ DIP SOR
-----------------------------------------------------------
1000 60 240 16.6 50 3. LEDEK A C PORTON
1500 40 160 24.9 75
2000 30 120 33.3 100 4. NYOMÓGOMBOK:
2500 24 92 41.7 125 RESET+PB0-RA
3000 20 80 50 150
3500 17.1 69 58.3 175 5. POTMÉTER RA0 BEME-
INT_SERVICE
4000 15 60 66.7 200
CALL SISWS ;"PUSH" W AND STATUS REGISTRS
NETEN (ANALÓG)
4500 13.3 53 75 225 RTCCPOL
5000 12 48 83.3 250 6. SZABAD TERÜLET
BTFSS INTCON,2 ;RTCC INTERRUPT?
------------------------------------------------------------- GOTO EX67 ;IF NOT, (FALSE INTERRUPT?) EXIT 7. PIC16F87X KIVEZETÉ-
HA PERÓDUSIDŐT MÉRÜNK, AKKOR: MOVLW 218 ;INNEN INDUL A SZÁMLÁLÓ
A mérést érdemes 0.25 msec-os megszakítással SEI EGY CSATLAKO-
MOVWF RTCC ZÓN
végezni (=4kHz) BCF INTCON,2 ;CLEAR RTCC INTERRUPT FLAG
Nem lineáris! (1/x függvény) setb kodaki ;hogy lássuk az it-t
HA IDŐEGYSÉG ALATT BEJÖVŐ
8. RC OSZCILLÁTOR (KB.
clrb kodaki 2 MHz) KIVÁLASZTÓ
IMPULZUSSZÁMOT MÉRÜNK, AKKOR: setb kodaki
jobb a 3 mp alatti fordulatszámot mérni, vagy 3 ÁTKÖTÉS
RTCCSER
impulzus/fordulat ez lineáris !!! INCF INT_COUNT,1 ;10 Hz INT RATE 9. KÜLSŐ KRISTÁLY
MOVLW 100 FOGLALATA Az 1. jelű helyre természetesen egy, az ICD-
SUBWF INT_COUNT,0
BTFSS STATUS,2 ; 1 SEC. ELTELT?
vel beprogramozott példányt is be tudunk
10. 9 V 0.75A TÁPEGYSÉG
GOTO EX67 ;IF NOT, EXIT CSATLAKOZÓJA, A dugni, és így azt a tokot tudjuk élesben
CLRF INT_COUNT ;IF YES, CLEAR
dec sec
KÖZEPE A POZITÍV kipróbálni
EX67 11. RS232 SOROS VONAL
CALL SIRWS ;"POP" W AND STATUS REGISTERS KIALKÍTÁSÁHOZ
RETFIE ;ENAB. GLOBAL INT AND RETURN
PIC TANFOLYAM 103 PIC TANFOLYAM

7.2.1 MPLAB-ICD 7.2.3 MPLAB-ICD


HASZNÁLATA: A PROGRAM HASZNÁLATA: AZ
• Reset vector címen ‘NOP’-nak ÁRAMKÖR
kell lenni
• 1 verem szintet felhasznál 8 LED

• Felhasználja a program 1 NYOMÓGOMB (PB1)


memória utolsó 256 szavát, RC OSZCILLÁTOR
(1F00h-1FFFh)
• 6 bájt adatmemóriahelyet (70h,
1EBh - 1EFh) használ
• továbbá két SFR-ben:
•RB6 és RB7 lábakat, ezért
MEGOLDANDÓ FELADATOK:
•csak a PORTB (006h) &
TRISB (086h) 0-5 bitje 1. MINDEN GOMBNYOMÁS HATÁSÁRA EGY
használható BELSŐ REGISZTER TARTALMA EGYENKÉNT
NÖVEKSZIK (BINÁRIS SZÁMLÁLÁS) ÉS A
==== Lásd: ICDTEMP.ASM FÁJL ==== REGISZTER TARTALMA A 8 LED KIJELZŐRE
KERÜL.
2. FUTÓFÉNY SZOFTVER IDŐZÍTÉSSEL.
3. FUTÓFÉNY MEGSZAKÍTÁSOS IDŐZÍTÉSSEL
4. A TANFOLYAMVEZETŐ ÖTLETEI….

VÉGE
PIC TANFOLYAM PIC TANFOLYAM
AZONOSITÓ RÉSZ
HOZZÁNYÚLÁST ÉS MÓDOSÍTÁST MUTATÓ SORSZÁM
VERZIÓSZÁM 7.2.4 ASM
UTOLSÓ MODOSÍTÁS DÁTUMA
FÁJLNÉV
PROGRAM ;===================[ F Ő P R O G R A M K E Z D E T E ]============
;
SZERZŐ FELÉPÍTÉSE ;------------------[ INICIALIZALASOK ]------------------------------
CÉG INI_MAIN
A PROGRAM RÖVID LEIRÁSA
INI_PORT
A PROGRAM TÖRTÉNETE DÁTUMOZVA
A PROGRAM RÉSZLETESEBB LEÍRÁSA ÉS SPECIFIKÁCIÓJA BANKSEL TRISC 7.2.5
CLRF TRISC ;PORTC mind kimenet
DEFINICIÓK, DEKLARÁCIÓK BANKSEL PORTC FUTÓFÉNY SW
PROCESSZOR TÍPUS, KONFIGURÁCIÓ, INCLUDE FÁJLOK INI_REG
I/O PORTOK CLRF SEG ;SEG=0 IDŐZÍTÉSSEL
BEMENETEK INI_BITS
KIMENETEK BSF SEG,0 ;SEG='00000001'B II.
ALLANDOK INI_MISC
;------------------[ PROGRAM TENYLEGES KEZDETE ]--------------------
VALTOZOK MAIN
BITES VALTOZOK ;ADOTT REGISZTER ROTÁLÁSA CARRY KIHAGYÁSÁVAL
MAKROK RRF SEG,W ;ELŐTTE:SEG=76543210 UTÁNA:W=C7654321 CY=.0
PROGRAM KEZDETE RRF SEG,F ;SEG=07654321 CY=CY
MEGSZAKITASVEKTOR MOVF SEG,W ;W=SEG
MEGSZAKITAS AZONOSITAS, FELDOLGOZAS
REGISZTEREK VISSZAALLITASA MOVWF PORTC ;PORTC-N VANNAK A LEDEK
CALL WAIT ;SW KÉSLELTETÉS
FOPROGRAM KEZDETE GOTO MAIN ;UJRA
INICIALIZALASOK ;==================[ S Z U B R U T I N O K ]========================
PORTOK WAIT
REGISZTEREK CLRF TIMER1
BITEK CLRF TIMER2
EGYEB DLY1
NOP
TENYLEGES FOPROGRAM KOD DECFSZ TIMER1,F
SZUBRUTINOK GOTO DLY1
MI A FELADATA DECFSZ TIMER2,F
BEMENET GOTO DLY1
KIMENET RETURN FELADAT:
HASZNALT REGISZTEREK END ;PROGRAM VÉGE
NYOMOGOMBRA
KOD
PROGRAM VÉGE LÉPKEDJEN!!!
105 PIC TANFOLYAM 107 PIC TANFOLYAM

; PORTC => LEDEK


;#1 MINDEN FAJLHOZ-NYULASKOR 1-EL NOVELNI!!!
;VER: 1.0 DATE: 00.01.18 UTOLSO MODOSITAS 7.2.5 FUTÓFÉNY ;------------------[ ALLANDOK ]------------------------------------
;FAJLNEV: FFENYSW.ASM NOTE: ;
;IRTA: DR. KONYA LASZLO KONYA@NOVSERV.OBUDA.KANDO.HU SW IDŐZÍTÉSSEL I. RTCBE EQU D'105' ;EZT KELL A SZAMLALOBA TENNI
;CEG: KKMF ;
;------------------[ MI EZ? ]--------------------------------------- ;------------------[ VALTOZOK ]------------------------------------
;FUTOFENY SW IDOZITESSEL W_TMP EQU 0X20 ; VARIABLE USED FOR CONTEXT SAVING
;A panelen lévő SW3 DIP kapcsoló mindegyikének STA_TMP EQU 0X21 ; VARIABLE USED FOR CONTEXT SAVING
;ON állásban kell lennie. SEG EQU 0X22
;------------------[ TORTENET IDE KERUL MINDEN INFORMACIO ]---------
;00.01.12 ELSO VALTOZAT CBLOCK 0X23
; ;IT-BEN HASZNALTAK
;------------------[ SPECIFIKACIOK, KIEGESZITESEK ]----------------- MS1 ;1MS SZAMLALO 7.2.6 FUTÓFÉNY
; MS10 ;10MSEC SZAMLALO
;==================[ D E F I N I C I O K ] =========================
;
SEC ;1SEC SZAMLALO MEGSZAKITÁSSAL
SEGEDRI ;SEGÉDREGISZTER AZ IT-BEN
;------------------[ PROCESSZOR + KONFIGURACIO + INCLUDE ]----------
; ENDC I.
LIST P=16F877 ;PROCESSZOR DEFINICIO
#INCLUDE <P16F877.INC> ;A SZÜKSEGES INCLUDE FAJL ;------------------[ BITES VÁLTOZÓK ]------------------------------
;
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & #DEFINE CY STATUS,C
_RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_ON & _CPD_OFF ;
; ;------------------[ MAKRÓK ]--------------------------------------
;------------------[ I/O PORTOK ]---------------------------------- ;
;PORTC A LED PORT
; JNZ MACRO ADDR ;JUMP IF ZERO BIT IS NOT SET A PROGRAM
;------------------[ ALLANDOK ]------------------------------------ BTFSS 3,2
; GOTO ADDR ELEJE A
;------------------[ VALTOZOK ]------------------------------------ ENDM
TIMER1 EQU 20H HELYHIÁNY
TIMER2 EQU 21H MOV MACRO REG1,REG2 ;R2->R1
SEG EQU 22H MOVF REG2,W
MIATT
;------------------[ BITES VÁLTOZOK ]------------------------------
; MOVWF REG1 LEMARADT,
;------------------[ MAKRÓK ]-------------------------------------- ENDM
; LÁSD ELŐZŐ
;==================[ P R O G R A M K E Z D E T E ]================ SUBRK MACRO REG,KONST
; MOVLW KONST
ORG 0X000 ;PROCESSZOR RESET VEKTOR SUBWF REG,F
NOP ;DEBUG MIATT ENDM
CLRF PCLATH ;PAGE BITEK BIZTOS TORLESE
GOTO INI_MAIN ;UGRAS A PROGRAM KEZDETERE
; ;==================[ P R O G R A M K E Z D E T E ]================
;==================[ M E G S Z A K I T A S V E K T O R ]=========== ;
;NEM HASZNÁLJUK! ORG 0X000 ;PROCESSZOR RESET VEKTOR
; ORG 0X004 ;EZ A 4H CIM NOP ;A DEBUG MIATT
CLRF PCLATH ;PAGE BITEK BIZTOS TÖRLÉSE
106 PIC TANFOLYAM 108 GOTO INI_MAIN ;UGRÁS A PROGRAM KEZDETÉRE PIC TANFOLYAM
;==================[ M E G S Z A K I T A S V E K T O R ]============
7.3.1 LDR-KEY HASZNÁLATA I.
PCSOROSPORT
; VCC R1 5
ORG
MOVWF
0X004
W_TMP
;EZ A 4H CIM
;W MENTÉSE 7.2.6 FUTÓFÉNY 4.7k 9
4
8
MOVF
BCF
STATUS,W ;
STATUS,RP0 ;BIZTOS REGISTER BANK SET TO 0 MEGSZAKITÁSSAL
D1
LED
3
7
2
A PROGRAMLETÖLTŐ KULCS A SAJÁT PROGRAM-
MOVWF STA_TMP ;STATUS MENT‚SE
II. SW1
6
1 MEMÓRIÁJUK ÍRÁSÁRA ÉS OLVASÁSÁRA KÉPES
;
;------------------[ MEGSZAKITAS AZONOSITAS, FELDOLGOZAS ]---------- PB1 R2 TÍPUSOK PROGRAMFEJLESZTÉSÉRE ILLETVE
; 2.2k

CALL RTCINT NPN


T1
FRISSÍTÉSÉRE HASZNÁLHATÓ: PIC16F870/871,
;
PIC16F872, 16F873/874/876/877.
1N4148
;------------------[ REGISZTEREK VISSZAÁLLÍTÁSA ]------------------- PIC-HEZ D2
BCF STATUS,RP0 ; ENSURE FILE REGISTER BANK SET TO 0
MOVF STA_TMP,W ;STATuS VISSZAALLITAS
MOVWF
SWAPF
STATUS
W_TMP,F
A CD /LDRKEY KÖNYVTÁRÁBAN TALÁLHATÓ A LDRKEY.ASM FÁJLT - A
SWAPF W_TMP,W ;W VISSZAÁLLÍTÁSA LETÖLTŐ-LÁBAT MÓDOSÍTVA – KELL AZ MPLAB SEGÍTSÉGÉVEL
RETFIE ;VISSZATÉRÉS IT-BŐL
; LEFORDÍTANI, ÉS A PIC TOKBA ÍRNI. EZEK UTÁN MÁR A LEÍRT MÓDON
;===================[ F Ő P R O G R A M K E Z D E T E ]============
; KÉPES MŰKÖDNI. AZ ALKALMAZÁS HEXA FÁJLJÁT A SZINTÉN AZ EBBEN
;------------------[ INICIALIZALASOK ]------------------------------
INI_MAIN A KÖNYVTÁRBAN LÉVŐ DOWNLDR.EXE (WINDOWS ALATT FUTÓ)
INI_PORT PROGRAM SEGÍTSÉGÉVEL KELL LETÖLTENI. A LETÖLTENI KÍVÁNT
BANKSEL
CLRF
TRISC
TRISC ;PORTC mind kimenet PROGRAM MEGÍRÁSAKOR FIGYELEMBE VENNI:
BANKSEL PORTC
INI_REG
CLRF PORTC ;Clear PORTC A PROGRAMMEMÓRIA ELSŐ HÁROM ILL. UTOLSÓ 256 SZAVA A
INI_BITS
CLRF SEG MONITORPROGRAM SZÁMÁRA VAN FENNTARTVA. (PL.:PIC16F877 ESETÉN
BSF SEG,0 ;SEG=00000001 EZ A 0X0000-0X0002 ILL. 0X1F00-0X1FFF CÍMEKET JELENTI) HA MÉGIS
INI_MISC
OLYAN HEX FÁJLT PRÓBÁLNÁNK LETÖLTENI, AMELY EZT A TERÜLETET
INI_RTC
BSF STATUS,RP0 ;BANK1 HASZNÁLJA A MONITORPROGRAM HIBÁT JELEZ ÉS AZ ÉRINTETT
MOVLW B'11010001' ;ELEMEZZÜK!
MOVWF OPTION_REG TERÜLET FELÜLÍRÁSA NÉLKÜL BEFEJEZI A LETÖLTÉST. (EZZEL
BSF INTCON,5 ;TMR0 IT ENG
BSF INTCON,GIE ;GENERAL IT ENG MEGAKADÁLYOZVA A MONITORPROGRAM MŰKÖDÉSKÉPTELENNÉ
109
BCF STATUS,RP0 ;BANK0
PIC TANFOLYAM
TÉTELÉT)
111 PIC TANFOLYAM

7.2.6 FUTÓFÉNY P ROG RA M M E M ÓRIA 7.3.2 LDR-KEY HASZNÁLATA II.


MEGSZAKITÁSSAL 0
3
GO T O L E T ÖL T Ő
GO T OROG
M AINP A FELHASZNÁLÓ PROGRAMJÁNAK A 0X0003 CÍMEN KELL
MAIN FŐP RA MRG
III. KEZDŐDNIE, MERT A MONITORPROGRAM IDE ADJA ÁT A
UJ GOTO UJ ;JÓ KIS FŐPROGRAM, MONDHATOM
; VEZÉRLÉST INDULÁSKOR.
;==================[ S Z U B R U T I N O K ]========================
;TMR0 MEGSZAKÍTÁS A MEMÓRIA 0 CÍMÉN LÉVŐ UTASÍTÁS ELUGRÁS A LETÖLTŐ-
;4 MHZ ÓRA 1 MIKRO 1 LÉPÉS 4-ES ELŐOSZTÓ
RTCINT PROGRAMRA, RESET UTÁN AZONNAL EZ HAJTÓDIK VÉGRE. A
MOVLW RTCBE ;INNEN INDUL A SZÁMLÁLÓ
MOVWF TMR0 KEZDŐ PROGRAMRÉSZLET:
L ET ÖL T Ő :
BCF INTCON,2 ;CLEAR RTCC INTERRUPT FLAG
INCF MS1,F ;1MSEC NÖVEL ORG 0X0000 ;PROCESSZOR RESET VEKTOR
MOVLW 0X018
MOV SEGEDRI,MS1 ;
SUBRK SEGEDRI,D'10' ; P ROG RA M M E M ÓRIA VÉGE MOVWF PCLATH ;HOSSZÚ
JNZ ITVEG ; GOTO MONITOR ;UGRÁS A MONITOR PROGRAMRA
MSEC10
CLRF MS1 ; START_PRG ;3-MAS CÍM, PROGRAMKEZDET
INCF MS10,F ;10 MSEC NOVEL
MOV SEGEDRI,MS10 A MONITORPROGRAM NEM HASZNÁL MEGSZAKÍTÁSOKAT, AZOK MEGKÖTÉSEK
SUBRK SEGEDRI,D'100'
JNZ ITVEG NÉLKÜL ALKALMAZHATÓAK A SAJÁT PROGRAMBAN. AZ INTERRUPT VEKTOR IS
SEC1 VÁLTOZATLANUL A 0X0004 CÍMRE MUTAT.
;ADOTT REGISZTER ROTÁLÁSA CARRY KIHAGYÁSÁVAL
RRF SEG,W ;ELŐTTE:SEG=76543210 UTÁNA:W=C7654321 CY=.0 AZ ELŐRE FELPROGRAMOZOTT ÁRAMKÖRÖK KONFIGURÁCIÓS SZAVA IS BE LETT
RRF SEG,F ;SEG=07654321 CY=CY
MOVF SEG,W ;W=SEG ÉGETVE, AZOKAT A LETÖLTŐ KULCS SEGÍTSÉGÉVEL NEM LEHET MÓDOSÍTANI.
MOVWF PORTC ;PORTC-N VANNAK A LEDEK AZ ELŐRE FELPROGRAMOZOTT ÁRAMKÖRÖK AZ RB7 PORTOT HASZNÁLJÁK A
CLRF MS10 LETÖLTÉSRE!
INCF SEC,F ;1 SEC NOVEL
ITVEG A RESET FOLYAMAT ALATT A LETÖLTŐ KULCS GOMBJÁNAK LENYOMVA
RETURN
END ;PROGRAM VÉGE
;ENABLE GLOBAL INT AND RETURN TARTÁSÁVAL LEHET A LETÖLTŐ PROGRAMOT AKTIVIZÁLNI, MELYET A LED
KÉTSZERI FELVILLANÁSA JELEZ.
A HIBÁS LETÖLTÉST A LED FOLYAMATOS VILÁGÍTÁSA JELZI, MÍG A SIKERES
PROGRAMOZÁS UTÁN A LED HÁRMAT VILLAN, MAJD AZ ÁRAMKÖR RESET-
110 PIC TANFOLYAM ELÉSÉVEL INDÍTHATÓ A FELHASZNÁLÓI PROGRAM.
112 PIC TANFOLYAM
7.3.3 MINIÁRAMKÖR AZ 7.3.5 VALTVIL.ASM PROGRAM
LDRKEY-HEZ ;A PROGRAM AZ A/D EGYSÉG 0. ;---------------[ VILLOGTATO RUTIN ]--------------------
KÉT 40 ILLETVE 28 LÁBÚ TOKOKHOZ CSATORNÁJÁN LÉVŐ FESZÜLTSÉGET ALA- UJRA
KÍTJA ÁT DIGITÁLIS ÉRTÉKKÉ, ÉS EZ A SW BSF PORTC,4
MEGRAJZOLT ÁRAMKÖR A KEZDŐ IDŐZÍTÉST ÁLLÍTJA. IGY A PORTC,4 BITJÉNEK ;PORTC,4 BITJE 1
KAPCSOLÁS AZ LDR-KEY HASZNÁ- VILLOGÁSI SEBESSÉGE VÁLTOZIK
CALL WAIT ;VÁRAKOZÁS
LATÁHOZ. LIST P=16F877
INCLUDE "P16F877.INC" BCF PORTC,4
HÁROM „PERIFÉRIÁJA” VAN: TIMER1 EQU 20H ;PORTC,4 BITJE 0
TIMER2 EQU 21H CALL WAIT ;VÁRAKOZÁS
EGY LED: SEG EQU 22H GOTO MAIN ;CIKLUSBAN
;START AT THE RESET VECTOR ;---------------[ SZOFTVER KÉSLELTETÉS ]-----------
RC4 PONTRA KAPCSOLÓDIK ORG 0X003 WAIT MOVFW ADRESH
START BTFSC STATUS,Z
• EGY NYOMÓGOMB: BANKSEL TRISC INCF ADRESH,F
CLRF TRISC
LDR-KEY NYOMÓGOMBJA MOVWF TIMER2
MOVLW B'00001110‘
;LEFT JUSTIFY,1 ANALOG CHANNEL CLRF TIMER1
• EGY ANALÓG BEMENET (A POTI) MOVWF ADCON1 DLY1
;VDD AND VSS REFERENCES NOP
CÉLSZERŰ EGY KIS „CSUPALYUK” BANKSEL PORTC NOP
PANELRE PIC-NEK EGY 40(28) LÁBÚ IC MOVLW B'01000001' NOP
FOGLALATOT FELFORRASZTANI, ÉS ;FOSC/8, A/D ENABLED NOP
ENNEK A KIVEZETÉSEIHEZ FORRASZ- MOVWF ADCON0 DECFSZ TIMER1,F
MAIN GOTO DLY1
SZUK A TÖBBI ALKATRÉSZT. AZ ;---------------[ A/D KONVERZIÓ ]-------------------------
DECFSZ TIMER2,F
ÁRAMKÖRI RAJZON A PIC BEKÖTÉSE A BSF ADCON0,GO
;START A/D KONVERZIÓ GOTO DLY1
FELÜLNÉZETI TOKOZÁSI KIALAKÍTÁSÁ- RETURN
WAITAD BTFSS PIR1,ADIF
VAL EGYEZIK MEG. ;VÁRAKOZÁS, MÍG KÉSZ NEM LESZ END
GOTO WAITAD
113 PIC TANFOLYAM 115 PIC TANFOLYAM

7.3.4 MINIPROGRAMOK
AZ ELKÉSZÍTETT ÁRAMKÖR KIPRÓBÁLÁSÁHOZ (ÉS A
GYAKORLÁSHOZ) HÁROM PROGRAM KÉSZÜLT.
VILLOG.ASM: AZ RC PORT 4. LÁBÁRA KÖTÖTT LED-ET
KAPCSOLJUK PERIODIKUSAN KI ÉS BE, SZOFTVER IDŐZÍTÉST
HASZNÁLVA.
LEPTET.ASM: A LETÖLTŐ KULCS NYOMÓGOMBJÁT NYOMKODVA
A AZ RC PORT 4. LÁBÁRA KÖTÖTT LED-ET KAPCSOLJUK KI ÉS BE.
VALTVIL.ASM: A PROGRAM AZ A/D EGYSÉG 0. CSATORNÁJÁN
LÉVŐ FESZÜLTSÉGET ALAKÍTJA ÁT DIGITÁLIS ÉRTÉKKÉ, ÉS EZ A
SW IDŐZÍTÉST ÁLLÍTJA. ÍGY A PORTC, 4. BITJÉNEK VILLOGÁSI
SEBESSÉGE FOG VÁLTOZNI
EZT A HÁROM PROGRAMOT AZ MPLAB PROGRAMMAL
LEFORDÍTVA, AZ LDR-KEY-EL LETÖLTHETJÜK. A KÉNYELME-
SEBBEKNEK MEGTALÁLHATÓK A KÖZVETLENÜL LETÖLTHETŐ
VILLOG.HEX, LEPTET.HEX VALTVIL.HEX FÁJLOK IS.
LETÖLTÉSI HELY: http://alpha1.obuda.kando.hu/~konya
114 PIC TANFOLYAM

You might also like