.equ PINA = 0x00 ; définition des adresses des ports .equ DDRA = 0x01 .equ PORTA = 0x02 .equ PINC = 0x06 .equ DDRC = 0x07 .equ PORTC = 0x08 .equ TTCR0A = 0x24 ; Initialisation du timer .equ TTCR0B = 0x25 .equ TMSK0 = 0x6e .equ RAMEND = 0x21FF .equ SPH = 0x3E ; initialisation de la pile .equ SPL = 0x3D .def selAfficheur = r19 .def tmp = r20 .def seg = r21 .def aff0 = r0 .def aff1 = r1 .def aff2 = r2 .def aff3 = r3 .org 0x000 ; Vecteur RESET jmp debut .org 0x002e ; Vecteur TIMER0 jmp tmr .org 0x0080 afficheur: .DB 0x3F, 0x30, 0x6D, 0x79, 0x72, 0x5B, 0x5F, 0x31, 0x7F, 0x7B, 0x77, 0x40, 0x4c, 0x7c, 0x4f, 0x47, 0x40, 0x76, 0x04, 0x3c, 0x40, 0x0E, 0x37, 0x54, 0x5c, 0x40, 0x40, 0x44, 0x5b, 0x4e, 0x1c, 0x1c, 0x40, 0x40, 0x40, 0x40, 0x63, 0x00 ; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, °, space debut: DDRA@IO <- 0xFF DDRC@IO <- 0x0F TTCR0A@IO <- 0x01 TTCR0B@IO <- 0x03 TMSK0 <- 0x01 selAfficheur <- 0x01 SEI boucle: ; On change de chiffre aff0 <- aff1 aff1 <- aff2 aff2 <- aff3 inc aff3 si aff3 > 37 alors aff3 <- 0 ; On attend et on recommence call tempo call tempo call tempo call tempo call tempo call tempo call tempo call tempo call tempo call tempo call tempo saut boucle tempo: ldi r24,8 tempoA: subi r22,1 sbci r23,0 sbci r24,0 brcc tempoA ret tmr: lsl selAfficheur si selAfficheur > 8 alors selafficheur <- 1 portc@IO <- 0xff - selAfficheur r18 <- pinC@IO lsr r18 lsr r18 lsr r18 lsr r18 tmp <- r18 and tmp, aff3 si selAfficheur == 1 alors porta@IO <- afficheur@ROM[tmp] tmp <- r18 and tmp, aff2 si selAfficheur == 2 alors porta@IO <- afficheur@ROM[tmp] tmp <- r18 and tmp , aff1 si selAfficheur == 4 alors porta@IO <- afficheur@ROM[tmp] tmp <- r18 and tmp, aff0 si selAfficheur == 8 alors porta@IO <- afficheur@ROM[tmp] sei ret