Cours:InfoS2 tdOutput corrige

De troyesGEII
Aller à : navigation, rechercher

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);
	}
}