Cours:InfoS2 tdOutput corrige : Différence entre versions
(9 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | |||
=Chenillard(s)= | =Chenillard(s)= | ||
Ligne 26 : | Ligne 25 : | ||
if (chenillard==1) sens=1; | if (chenillard==1) sens=1; | ||
} | } | ||
− | PORTA=(chenillard>> 0)& | + | PORTA=(chenillard>> 0)&0x000000FF; // on recopie une valeur 32 bits dans une valeur sur 8 bits |
− | PORTJ=(chenillard>> 8)& | + | PORTJ=(chenillard>> 8)&0x000000FF; // seuls les 8 bits de poids faible sont conservés |
− | PORTC=(chenillard>>16)& | + | PORTC=(chenillard>>16)&0x000000FF; // le décalage permet de choisir ces 8 bits |
− | PORTD=(chenillard>>24)& | + | PORTD=(chenillard>>24); // masquer les autres 24 bits avec le & n'est pas indispensable |
_delay_ms(30); | _delay_ms(30); | ||
} | } | ||
Ligne 55 : | Ligne 54 : | ||
if (chenillard2==0) chenillard2=0x80000000; | if (chenillard2==0) chenillard2=0x80000000; | ||
chenillard = chenillard1 | chenillard2; | chenillard = chenillard1 | chenillard2; | ||
− | PORTA= | + | PORTA= chenillard; // on simplifie, cf exemple précédent |
− | PORTJ= | + | PORTJ= chenillard>> 8; |
− | PORTC= | + | PORTC= chenillard>>16; |
− | PORTD= | + | PORTD= chenillard>>24; |
_delay_ms(30); | _delay_ms(30); | ||
} | } | ||
Ligne 79 : | Ligne 78 : | ||
chenillard = (chenillard<<1) | (chenillard>>31); | chenillard = (chenillard<<1) | (chenillard>>31); | ||
− | PORTA= | + | PORTA= chenillard; |
− | PORTJ= | + | PORTJ= chenillard>> 8; |
− | PORTC= | + | PORTC= chenillard>>16; |
− | PORTD= | + | PORTD= chenillard>>24; |
_delay_ms(300); | _delay_ms(300); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | <source lang=cpp> | ||
+ | #define F_CPU 16000000UL | ||
+ | #include <avr/io.h> | ||
+ | #include <util/delay.h> | ||
+ | uint32_t chenillard=1; | ||
+ | uint8_t max=31; | ||
+ | uint32_t accumulation=0; | ||
+ | uint32_t etatLed; | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | DDRA = 0xFF; | ||
+ | DDRJ = 0xFF; | ||
+ | DDRC = 0xFF; | ||
+ | DDRD = 0xFF; | ||
+ | while(1) | ||
+ | { | ||
+ | |||
+ | chenillard = chenillard<<1; | ||
+ | if ((chenillard>>max)!=0) | ||
+ | { | ||
+ | accumulation=accumulation| 1UL<<max; // 1 sera codé sur 8 bits => 1UL en 32 bits | ||
+ | max--; | ||
+ | chenillard=1; | ||
+ | if (max==0) | ||
+ | { | ||
+ | max=31; | ||
+ | chenillard=1; | ||
+ | accumulation=0; | ||
+ | } | ||
+ | } | ||
+ | etatLed=accumulation|chenillard; | ||
+ | PORTA= etatLed; | ||
+ | PORTJ= etatLed>> 8; | ||
+ | PORTC= etatLed>>16; | ||
+ | PORTD= etatLed>>24; | ||
+ | _delay_ms(30); | ||
} | } | ||
} | } | ||
</source> | </source> |
Version actuelle datée du 15 février 2024 à 10:59
Chenillard(s)
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
uint32_t chenillard=1;
int8_t sens=1;
int main()
{
DDRA = 0xFF;
DDRJ = 0xFF;
DDRC = 0xFF;
DDRD = 0xFF;
while(1)
{
if (sens==1)
{
chenillard <<=1;
if (chenillard==0x80000000) sens=-1;
}
else
{
chenillard >>=1;
if (chenillard==1) sens=1;
}
PORTA=(chenillard>> 0)&0x000000FF; // on recopie une valeur 32 bits dans une valeur sur 8 bits
PORTJ=(chenillard>> 8)&0x000000FF; // seuls les 8 bits de poids faible sont conservés
PORTC=(chenillard>>16)&0x000000FF; // le décalage permet de choisir ces 8 bits
PORTD=(chenillard>>24); // masquer les autres 24 bits avec le & n'est pas indispensable
_delay_ms(30);
}
}
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
uint32_t chenillard=0;
uint32_t chenillard1=0;
uint32_t chenillard2=0;
int main()
{
DDRA = 0xFF;
DDRJ = 0xFF;
DDRC = 0xFF;
DDRD = 0xFF;
while(1)
{
chenillard1 <<=1;
chenillard2 >>=1;
if (chenillard1==0) chenillard1=1;
if (chenillard2==0) chenillard2=0x80000000;
chenillard = chenillard1 | chenillard2;
PORTA= chenillard; // on simplifie, cf exemple précédent
PORTJ= chenillard>> 8;
PORTC= chenillard>>16;
PORTD= chenillard>>24;
_delay_ms(30);
}
}
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
uint32_t chenillard=0b101010;
int main()
{
DDRA = 0xFF;
DDRJ = 0xFF;
DDRC = 0xFF;
DDRD = 0xFF;
while(1)
{
chenillard = (chenillard<<1) | (chenillard>>31);
PORTA= chenillard;
PORTJ= chenillard>> 8;
PORTC= chenillard>>16;
PORTD= chenillard>>24;
_delay_ms(300);
}
}
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
uint32_t chenillard=1;
uint8_t max=31;
uint32_t accumulation=0;
uint32_t etatLed;
int main()
{
DDRA = 0xFF;
DDRJ = 0xFF;
DDRC = 0xFF;
DDRD = 0xFF;
while(1)
{
chenillard = chenillard<<1;
if ((chenillard>>max)!=0)
{
accumulation=accumulation| 1UL<<max; // 1 sera codé sur 8 bits => 1UL en 32 bits
max--;
chenillard=1;
if (max==0)
{
max=31;
chenillard=1;
accumulation=0;
}
}
etatLed=accumulation|chenillard;
PORTA= etatLed;
PORTJ= etatLed>> 8;
PORTC= etatLed>>16;
PORTD= etatLed>>24;
_delay_ms(30);
}
}