Trois-quarts prépa TP2

(un jour on en fera une complète avant le TP)
This commit is contained in:
Geoffrey Frogeye 2017-05-03 09:47:08 +02:00
parent d3dce08dcc
commit e98ecc5c1f
5 changed files with 158 additions and 20 deletions

20
Makefile Normal file
View file

@ -0,0 +1,20 @@
.PHONY: default cleantmp clean
default: $(subst md,pdf,$(wildcard *.md))
SOURCES=$(wildcard *.asm) $(wildcard *.txt)
%.pdf: %.html
wkhtmltopdf --title "$* - DJERABA Taky PREUD'HOMME Geoffrey" "$<" "$@"
%.html: %.tmp ../template.html
pandoc -f markdown+hard_line_breaks "$<" --template ../template.html -o "$@"
%.tmp: %.md $(SOURCES)
markedpp "$<" > "$@"
cleantmp:
rm -rf $(subst md,html,$(wildcard *.md)) *.tmp
clean: cleantmp
rm -rf $(subst md,pdf,$(wildcard *.md))

View file

@ -1,20 +0,0 @@
.PHONY: default cleantmp clean
default: $(subst md,pdf,$(wildcard *.md))
SOURCES=$(wildcard *.asm) $(wildcard *.txt)
%.pdf: %.html
wkhtmltopdf --title "$* - DJERABA Taky PREUD'HOMME Geoffrey" "$<" "$@"
%.html: %.tmp ../template.html
pandoc -f markdown+hard_line_breaks "$<" --template ../template.html -o "$@"
%.tmp: %.md $(SOURCES)
markedpp "$<" > "$@"
cleantmp:
rm -rf $(subst md,html,$(wildcard *.md)) *.tmp
clean: cleantmp
rm -rf $(subst md,pdf,$(wildcard *.md))

1
TP1/Makefile Symbolic link
View file

@ -0,0 +1 @@
../Makefile

1
TP2/Makefile Symbolic link
View file

@ -0,0 +1 @@
../Makefile

101
TP2/TP2.md Normal file
View file

@ -0,0 +1,101 @@
% Compte-rendu TP2
% DJERABA Taky PREUD'HOMME Geoffrey
% 03/05/2017
# TP2
Ce TP a pour but de nous familiariser avec la gestion des interruptions et du watchdog sur l'Atmega 2560.
## Un bouton/une LED et un chien de garde (TP20)
!include(TP20.txt lang=asmplus)
Ce programme allume la LED lors de l'appui sur un bouton, et ce jusqu'à une seconde après l'avoir relâché. Si on rappuie sur le bouton pendant l'intervalle des 1s, le compteur est remis à zéro.
## Chenillard par interruption (TP21)
```pseudo
chen ← 0b00000001
port ← 0x00 ; pair : port A, impair : port B
boucle: jump boucle ; On attend là si rien ne se passe
horaire:
Si (port & 0x01) == 0 alors DecalerGauche chen
Si (port & 0x01) == 1 alors DecalerDroite chen
Si chen != 0 saut boucle
Si (port & 0x01) == 0 alors chen ← 0b00000001
Si (port & 0x01) == 1 alors chen ← 0b10000000
Incrementer port ; On change de port
call afficher
Retourner
antihoraire:
Si (port & 0x01) == 0 alors DecalerDroite chen
Si (port & 0x01) == 1 alors DecalerGauche chen
Si chen != 0 saut boucle
Si (port & 0x01) == 0 alors chen ← 0b10000000
Si (port & 0x01) == 1 alors chen ← 0b00000001
Incrementer port ; On change de port
call afficher
Retourner
afficher:
Si (port & 0x01) == 0 alors PortB@IO ← 0x00
Si (port & 0x01) == 1 alors PortA@IO ← 0x00
Si (port & 0x01) == 0 alors PortA@IO ← chen
Si (port & 0x01) == 1 alors PortB@IO ← chen
Retourner
```
## Compteur (TP22)
1)
```pseudo
d0 ← 0
Configurer Watchdog: Interruption toutes les secondes sur wd
boucle: jump boucle
wd:
Incrementer d0
Si d0 > 10 jump d0 ← 0:
```
4)
```pseudo
d2 ← 0
d1 ← 0
d0 ← 0
select ← 0x01
io ← 0x00
Configurer Watchdog: Interruption toutes les secondes sur wd
Configurer timer0: Interruption toutes les 8-16 ms sur tm
boucle: jump boucle
wd:
Incrementer d0
Si d0 < 10 Retourner
d0 ← 0
Incrementer d1
Si d1 < 10 Retourner
d1 ← 0
Incrementer d2
Si d2 < 10 Retourner
d2 ← 0
Retourner ; Comportement si >999 : on revient à 000
tm:
PortC@IO ← select
Si select = 0x01 alors io ← afficheur@ROM[d0]
Si select = 0x02 alors io ← afficheur@ROM[d1]
Si select = 0x03 alors io ← afficheur@ROM[d2]
DecalerGauche io
Si io > 0x04 alors io ← 0x01
Retourner
```
## Minuteur d'un four (TP23)

35
TP2/TP20.txt Normal file
View file

@ -0,0 +1,35 @@
.equ PINA = 0x00 ; définition des adresses des ports
.equ DDRA = 0x01
.equ PORTA = 0x02
.equ WDTCSR = 0x60
.equ RAMEND = 0x21FF
.equ SPH = 0x3E ; initialisation de la pile
.equ SPL = 0x3D
.org 0x000
; Vecteur RESET
jmp debut
.org 0x0080
debut:
DDRA@IO <- 0x01 ; Configuration du port pour mettre la LED en sortie et le bouton en entrée
attend:
si (PINA@IO & 0x02) == 0 saut attend ; On reste là si le bouton n'est pas appuyé
; Dès que le bouton est appuyé
cli ; Activation du chien de garde en mode RESET
WDTCSR <- 0b00010000 ; Autorise la modification du chien de garde
WDTCSR <- 0b00001110 ; Reset le programme après 1 seconde
sei
PORTA@IO <- 0x01 ; On allume la LED
boucle:
si (PINA@IO & 0x02) == 0 saut boucle ; On reste ici en attendant que le watchdog arrive à expiration si le bouton est relâché
wdr ; Sinon si le bouton est appuyé on bloque le watchdog à 1s
jmp boucle