Vajad kellegagi rääkida?
Küsi julgelt abi LasteAbi
Logi sisse

Mikrokontrollerite programmeerimine Assembleris (0)

1 Hindamata
Punktid
TALLINNA TEHNIKAÜLIKOOL 
Elektriajamite ja jõuelektroonika instituut 
 
 
 
 
 
 
 
 
 

MIKROPROTSESSORTEHNIKA - PRAKTIKUM 
Laboratoorne töö 
Mikrokontrollerite  programmeerimine  Assembleris 
 
 
 
 
 
 
 
 
 
 
Juhendaja :  
Üliõpilased:  
 
 
 
 
 
 
 
Ülesanne: 
1)  Süüdata  esimene  valgusdiood  nupplüliti  1.  vajutusega  ning  kustutada  nupplüliti  2. 
vajutusega. 
2) Juhul kui hoida nupplülitit 1. all, siis peavad hakkama LED lambid reas üksteise järgi 
süttima ja kustuma “ jooksev  tuli”. LED 1. süttib, põleb pool sekundit ja  kustub , LED 2. 
süttib, põleb pool sekundit ja kustub ja  niimoodi  kõik 8 LED-i. 
 
1)  Algoritm  
Portide/registrite 
määramine 

mainloop 
PORTA,2 

PORTA,3 
goto in 


goto mainloop 
goto out 
out 
in 
LED0 välja 
LED0 sisse 
goto mainloop 
goto mainloop 
 
Seadme juhtprogrammi väljatrükk 
 
 
list p=16f877a 
 
; defineeritakse kontrolleri tüüp 
 
include  "p16f877a.inc"  ;lisatakse kontrolleri infot sisaldav 
 
 
 
 
 
;*.inc fail 
 
 
org 0x00 
 
 
;määrab kindlaks programmi algusvektori 
 
 
 
bsf STATUS ,RP0 
 
;valitakse mälupank nr 1 (00,10,01,11) 
 
bcf STATUS,RP1 
 
;TRIS register asub pangas1!   
 
movlw b'00000000'  
;tööregistrisse omistatakse binaararv  
;00000000 
movwf TRISD 
;pordis D määratakse kõik viigud 
; väljunditeks  
 
 
movlw 0x06   
 
;tööregistrisse antakse nr 6 
movwf ADCON1 
;PORTA seadistatakse digitaalsisendiks 
;(00000110) 
 
movlw b'11111111'  
;tööregistrile omistatakse binaararv 
;11111111 
movwf TRISA 
;pordis A määratakse kõik viigud 
;sisenditeks 
 
 
bcf STATUS,RP0 
 
;Valime mälupanga 0 
 
bcf STATUS,RP1 
 
;PORTD asub pangas 0! 
 
movlw .0 
 
 
;tööregistrisse omistatakse 10nd nr 0 
 
movwf PORTD  
 
;PORTD väärtused sätitakse nulliks 
 
mainloop 
btfss PORTA,2 
;Kontrollime PORTA2 väärtust, kui väärtus 
;võrdub 1, siis minnakse PORTA,3 
;kontrollima vastasel juhul liigutakse 
;programmi in 
 
goto in 
btfss PORTA,3 
;Kontrollime PORTA3 väärtust, kui väärtus 
;võrdub 1, siis minnakse tagasi 
;algusesse, vastasel juhul programmi out 
 
goto out 
 
 
goto mainloop 
 
in 
 
bsf PORTD,0  
 
;LED0 lülitatakse sisse 
 
goto mainloop 
 
out 
 
bcf PORTD,0  
 
;LED0 lülitatakse välja 
 
goto mainloop 
 
end 

2) Algoritm 
Portide/ registrit
e määramine 
mainloop 
PORTA,2 


goto out 
goto blink 
out 
blink 
LED0-7 välja 
LED0 sisse 
call  Delay  
goto mainloop 
Delay 
LED0 välja 
Delay1 
LED…sisse 
decfsz Pause,1=0 
Delay2 
… 
decfsz Pause_tmp,1=0 
goto mainloop 
 
Seadme juhtprogrammi väljatrükk 
 
list p=16f877a 
 
 
;defineeritakse kontrolleri tüüp 
include "p16f877a.inc" 
;lisatakse kontrolleri infot 
;sisaldav *.inc fail 
 
 
Pause  
equ 0x20 
 
;pausile omistatakse mingi aadress 
Pause_tmp 
equ 0x21 
 
;paus_temp’ile omistatakse mingi 
 
 
 
 
 
 
;aadress 
 
org 0x00 
;määrab kindlaks programmi 
;algusvektori 
 
 
bsf STATUS,RP0 
;valitakse mälupank nr 1 
;(00,10,01,11) 
 
bcf STATUS,RP1 
 
 
;TRIS register asub pangas1!   
 
movlw b'00000000'  
;tööregistrisse omistatakse 
;binaararv 00000000 
 
movwf TRISD  
 
 
;pordis D määratakse kõik viigud 
 
 
 
 
 
 
;väljunditeks 
 
 
movlw 0x06   
 
 
;tööregistrisse antakse nr 6 
movwf ADCON1 
;PORTA seadistatakse 
;digitaalsisendiks (00000110) 
 
movlw b'11111111'  
;tööregistrile omistatakse 
;binaararv 11111111 
movwf TRISA 
;pordis A määratakse kõik viigud 
;sisenditeks 
 
 
bcf STATUS,RP0 
 
 
;Valime mälupanga 0 
 
bcf STATUS,RP1 
 
 
;PORTD asub pangas 0! 
movlw .0 
;tööregistrisse omistatakse 10nd nr 
;0 
 
movwf PORTD  
 
 
;PORTD väärtused sätitakse nulliks 
 
mainloop 
btfss PORTA,2 
;Kontrollime viigu PORTA2 väärtust, 
;kui PORTA2=1 mine alamprogrammi 
;out 
goto blink 
;kui PORTA2=0, siis minnakse a.p. 
;blink 
 
goto out 
 
out 
 
bcf PORTD,0  
 
 
;LED välja 
 
bcf PORTD,1  
 
 
;LED välja   
 
bcf PORTD,2  
 
 
;LED välja   
 
bcf PORTD,3  
 
 
;LED välja 
 
bcf PORTD,4  
 
 
;LED välja 
 
bcf PORTD,5  
 
 
;LED välja 
 
bcf PORTD,6  
 
 
;LED välja 
 
bcf PORTD,7  
 
 
;LED välja 
 
 
 
goto mainloop 
 
blink 
 
bsf PORTD,0  
 
 
;LED sisse 
 
call Delay   
 
 
;paus 
 
bcf PORTD,0  
 
 
;LED välja   
 
call Delay   
 
 
;paus 
 
 
bsf PORTD,1  
 
 
;LED sisse 
 
call Delay   
 
 
;paus 
 
bcf PORTD,1  
 
 
;LED välja   
 
call Delay   
 
 
;paus 
 
 
bsf PORTD,2  
 
 
;LED sisse 
 
call Delay   
 
 
;paus 
 
bcf PORTD,2  
 
 
;LED välja   
 
call Delay   
 
 
;paus 
 
 
bsf PORTD,3  
 
 
;LED sisse 
 
call Delay   
 
 
;paus 
 
bcf PORTD,3  
 
 
;LED välja   
 
call Delay   
 
 
;paus 
 
 
bsf PORTD,4  
 
 
;LED sisse 
 
call Delay   
 
 
;paus 
 
bcf PORTD,4  
 
 
;LED välja   
 
call Delay   
 
 
;paus 
 
 
bsf PORTD,5  
 
 
;LED sisse 
 
call Delay   
 
 
;paus 
 
bcf PORTD,5  
 
 
;LED välja   
 
call Delay   
 
 
;paus 
 
 
bsf PORTD,6  
 
 
;LED sisse 
 
call Delay   
 
 
;paus 
 
bcf PORTD,6  
 
 
;LED välja   
 
call Delay   
 
 
;paus 
 
 
bsf PORTD,7  
 
 
;LED sisse 
 
call Delay   
 
 
;paus 
 
bcf PORTD,7  
 
 
;LED välja   
 
call Delay   
 
 
;paus 
 
 

goto mainloop 
 
Alamprogramm viivituse tekitamiseks 
Viivituse tekitamiseks läbitakse alamprogrammi Delay2 muutujas 
Pause_tmp määratud arv kordi . Kogu tsüklit korratakse muutujas Delay 
määratud arv kordi, (kui võimalik siis on soovitav kasutada viivituste 
tekitamiseks riistvaralisi timereid). 
 
Delay 
 
movlw .50 
 
 
 
movwf Pause 
 
Delay1 
 
movlw .500 
 
movwf Pause_tmp 
decfsz Pause,1 
;pausi väärtust vähendatakse 1 
;võrra, kui väärtus on 0, siis 
;hüpatakse järgmisest käsust üle 
 
goto Delay2 
 
return 
 
 
 
;väljutakse alamprogrammist Delay 
 
Delay2 
 
 
clrwdt 
 
 
 
;valveloenduri nullimine 
 
nop 
 
 
 
 
; viivitus  no operation  
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
nop 
 
 
decfsz Pause_tmp,1 
 
goto Delay2 
 
goto Delay1  
 
 
end 
 
 
Kokkuvõte: 
Algoritmide  joonistel  ei  ole  programmi  lõpp  ühendatud  ühegi  elemendiga,  kuna  see  on 
ainult  tinglik  lõpp  –  programm  ei  jõua  selleni  kunagi.  Antud  juhul  oli  viimases 
programmis kasutatud natuke pikemat moodust, et LEDid „jooksma” saada, tegelikkuses 
on  võimalik  see  kood  palju  lühemalt  ja  kompaktsemalt  koostada,  kuid  hetkel  puudub 
teadmine kuidas kasutada Assembleris matemaatilisi funktsioone. Mõlemad programmid 
töötavad  ja  vastavad  ülesande  püstitusele.  Programmeerimine  Assembleris  ei  ole 
iseenesest keerukas, kui teada kõiki käske, siis on see nagu iga teine keelgi, küll aga on 
sellega tülikas keerulisi lahendusi teha. 
LISA: 
Tabel 1: Programmis kasutatavad mikrokontrolleri digitaalsisendid ja –väljundid. 
 
 
 
Joonis1. Mikrokontrolleri viikude asetus õppeplaadil. 
Vasakule Paremale
Mikrokontrollerite programmeerimine Assembleris #1 Mikrokontrollerite programmeerimine Assembleris #2 Mikrokontrollerite programmeerimine Assembleris #3 Mikrokontrollerite programmeerimine Assembleris #4 Mikrokontrollerite programmeerimine Assembleris #5 Mikrokontrollerite programmeerimine Assembleris #6 Mikrokontrollerite programmeerimine Assembleris #7 Mikrokontrollerite programmeerimine Assembleris #8
Punktid 50 punkti Autor soovib selle materjali allalaadimise eest saada 50 punkti.
Leheküljed ~ 8 lehte Lehekülgede arv dokumendis
Aeg2016-02-09 Kuupäev, millal dokument üles laeti
Allalaadimisi 10 laadimist Kokku alla laetud
Kommentaarid 0 arvamust Teiste kasutajate poolt lisatud kommentaarid
Autor AnnaAbi Õppematerjali autor
MIKROPROTSESSORTEHNIKA - PRAKTIKUM

Sarnased õppematerjalid

Sissejuhatus digitaaltehnikasse praktikum-AD-muunduri aruanne
3
docx

Sissejuhatus digitaaltehnikasse praktikum, AD-muunduri aruanne

Ülesanne: Analoog-digitaalmuunduri lugemine ja tulemuse väljastamine kahendkoodis Käik: Analoog/digitaalmuundurid (analoogsisendid) võimaldavad mõõta pinget 0-5 V. 8-bitise muunduri korral jagatakse mõõtepiirkond 255ks osaks ning mõõdetavale pingele vastav väärtus kirjutatakse mikrokontrolleri mälus olevasse registrisse. AD-muundur võimaldab sisendi pinge 0-5 V muundada kahendkoodi ning sealt edasi. Kui LED- lambid on ühenduses, võimaldab kuvada need vastavalt kahendkoodile . Programm kuvab AD-muundur väärtust seitsmesegmendilise indikaatoriga. Plokkskeem: Joonis 1: AD-muunduri plokkskeem Juhtprogrammi väljatrükk: ;Mikrokontrolleri registrinimede lisamine list p=16f877a include "p16f877a.inc" ;Muutujate defineerimine cblock 0x20 Pause Pause_tmp temp_var endc ;Programm alates aadressist 0 org 0x00

Tehnoloogia
Mikroprotsessortehnika
282
pdf

Mikroprotsessortehnika

TALLINNA TEHNIKAÜLIKOOL ELEKTRIAJAMITE JA JÕUELEKTROONIKA INSTITUUT ROBOTITEHNIKA ÕPPETOOL MIKROPROTSESSORTEHNIKA TÕNU LEHTLA LEMBIT KULMAR Tallinn 1995 2 T Lehtla, L Kulmar. Mikroprotsessortehnika TTÜ Elektriajamite ja jõuelektroonika instituut. Tallinn, 1995. 141 lk Toimetanud Juhan Nurme Kujundanud Ann Gornischeff Autorid tänavad TTÜ arvutitehnika instituudi lektorit Toomas Konti ja sama instituudi dotsenti Vladimir Viiest raamatu käsikirjas tehtud paranduste ja täienduste eest.  T Lehtla, L Kulmar, 1995  TTÜ elektriajamite ja jõuelektroonika instituut, 1995 Kopli 82, 10412 Tallinn Tel 620 3704, 620 3700. Faks 620 3701 ISBN 9985-69-006-0 TTÜ trükikoda. Koskla 2/9, Tallinn EE0109 Tel 552 106 3 Sisukord Saateks

Tehnikalugu



Meedia

Kommentaarid (0)

Kommentaarid sellele materjalile puuduvad. Ole esimene ja kommenteeri



Sellel veebilehel kasutatakse küpsiseid. Kasutamist jätkates nõustute küpsiste ja veebilehe üldtingimustega Nõustun