Programy pro ovládání portů
|
Úkol:
Vytvořte na portu P1.1 obdélníkový tvar signálu o periodě 200us, poměr impulz : mezera=1:1
Možné řešení: program využívá přerušovací systém mikroprocesoru (přerušení od časovače).
Pro všechny následující příklady platí:
Pro vytvoření přesné periody signálu je nutno zavést korekci doby vykonávání instrukcí, které obsluhují přerušení!
Pokud bychom chtěli realizovat program bez využití přerušovacího systému, je nutné v hl. programu vytvořit odpovídající zpoždění (nejlépe cyklem).
ORG 0
JMP START
ORG 30H
START: MOV TMOD,#00000010B ;časovač 0, mód 2
MOV TH0,#155 ;interval 100us při 12MHz
MOV TL0,#155
SETB EA ;povolení přerušení od časovače 0
SETB ET0
SETB TR0 ;spuštění časovače
KONEC: JMP KONEC ;nekonečná smyčka
;OBSLUHA PRERUSENI OD CASOVACE 0
ORG 0BH
JMP PRERUS
ORG 50H
PRERUS: CPL P1.1 ;negace stavu portu
RETI
END
Úkol:
Vytvořte na bitu portu P1.1 takovýto signál (v závislosti na průběhu P1.0 dle obrázku).
Jde např. o ekvivalent zpožděného přítahu relé.
Možné řešení: program využívá přerušovací systém mikroprocesoru (přerušení od časovače)
ORG 0
JMP START
ORG 30H
START: MOV TMOD,#00000010B ;časovač 0, mód 2
MOV TH0,#55 ;interval 200us při 12MHz
MOV TL0,#55
SETB EA ;povolení přerušení od časovače 0
SETB ET0
TEST: JB P1.0,NASTAV ;test P1.0 na log.1
CLR TR0 ;při P1.0 v log.0 zastavení časovače,
CLR P1.1 nulování P1.1 a znovunastavení hodnoty
MOV TH0,#55 časovače
JMP TEST
NASTAV: SETB TR0 ;při P1.0 v log.1 zapnutí časovače
JMP TEST
KONEC: JMP KONEC
;
;OBSLUHA PRERUSENI
ORG 0BH
JMP PRERUS
ORG 50H
PRERUS: SETB P1.1 ;po 200us nastaví P1.1 do log.1
RETI
END
Úkol:
Vytvořte na bitu portu P1.0 takovýto signál. Např. po stisku tlačítka START(P1.1) se začne na bitu P1.0 generovat obdélníkový signál.
Možné řešení: program využívá přerušovací systém mikroprocesoru (přerušení od obou časovačů)
ORG 0
JMP ZACAT
ORG 30H
ZACAT: MOV TMOD,#00010010B ;časovač 1-mód 1, časovač 0-mód 2
CLR P1.0
CLR P1.1
TEST: JB P1.1,START ;test log.1 na P1.1
JMP TEST
START: MOV TH1,#11111110B ;interval 500us
MOV TL1,#00001100B
SETB EA
SETB ET1
SETB TR1
TEST2: JB 2FH.7,START2
JMP TEST2
START2: MOV TL0,#205 ;interval 50us
MOV TH0,#205
SETB ET0
SETB TR0
KONEC: JMP KONEC
;
;OBSLUHA PRERUS
;
ORG 1BH
JMP OBSLUHA1
ORG 60H
OBSLUHA1: SETB 2FH.7
CPL P1.0
CLR TR1
RETI
;
ORG 0BH
JMP OBSLUHA2
ORG 70H
OBSLUHA2: CPL P1.0
RETI
END
Úkol:
Vytvořte na daných bitech portu P1 následující průběhy signálů
Možné řešení: program využívá přerušovací systém mikroprocesoru (přerušení od časovače)
ORG 0
JMP START
ORG 30H
START: MOV R0,#0
MOV R1,#0
MOV TMOD,#00000010B
MOV TL0,#205
MOV TH0,#205
SETB EA
SETB ET0
SETB TR0
KONEC: JMP KONEC
;
;OBSLUHA PRERUSENI
;
ORG 0BH
JMP OBSL1
ORG 60H
OBSL1: CPL P1.0
INC R0
INC R1
CJNE R0,#2,TEST2
CPL P1.1
MOV R0,#0
TEST2: CJNE R1,#4,NAVRAT
CPL P1.2
MOV R1,#0
NAVRAT: RETI
END
Copyright © Michal Fuksa 2001 |