Czy to musi być assembler? Wbrew pozorom napisanie tego w języku wyższego poziomu może być znacznie prostsze, zwłaszcza dla początkującego
Osobiście uważam, że łatwiej jest się nauczyć podstaw C czy BASCOM'a na tyle ile się potrzebuje, niż nauczyć się pisać
dobry i niezawodny kod w asemblerze.
//Edit
Poniżej, jak to by mogło wyglądać w C:
//jakie nagłówki załączyć
#include <avr/io.h> //tu są np. definicje portów
#include <stdlib.h> //tu jest między innymi funkcja rand()
#include <util/delay.h> //a tu np. funkcja _delay_ms()
//deklarujemy jakie procedury będą używane dalej
void program0(void);
void program1(void);
void program2(void);
void program3(void);
//tu zaczyna się aplikacja
int main(void)
{
//konfigurujemy porty
DDRC = 0b00111111; //piny 7 i 6 to wejścia, a piny 5 - 0 to wyjścia
while(1) //pętla "w nieskończoność"
{
//rand() - zwraca pseudolosową liczbę całkowitą
// % 4 - oznacza, pytanie jaka jest reszta z dzielenia tej liczby przez 4
switch(rand() % 4) //oczywiście są 4 możliwe przypadki reszty 0, 1, 2 i 3
{
case 0: program0(); break;
case 1: program1(); break;
case 2: program2(); break;
case 3: program3(); break;
}
}
}
void program0(void)
{
PORTC = 0b00000001;
_delay_ms(100);
PORTC = 0b00000010;
_delay_ms(100);
PORTC = 0b00000100;
_delay_ms(100);
PORTC = 0b00001000;
_delay_ms(100);
//itd...
}
void program1(void)
{
//...
}
void program2(void)
{
//...
}
void program3(void)
{
//...
}