102 lines
2.2 KiB
Markdown
102 lines
2.2 KiB
Markdown
|
% 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)
|