.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 SREG = 0x3F .equ RAMEND = 0x21FF .equ SPH = 0x3E ; initialisation de la pile .equ SPL = 0x3D .equ ADMUX = 0x7C .equ ADCSRB = 0x7B .equ ADCSRA = 0x7A .equ ADCH = 0x79 .def selAfficheur = r19 .def tmp = r20 .def val = r21 .def aff0 = r5 .def aff1 = r1 .def aff2 = r2 .def aff3 = r3 .org 0x000 ; Vecteur RESET jmp debut .org 0x002e ; Vecteur TIMER0 jmp tmr .org 0x003A ; ADC jmp adc .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: SREG <- 0b10000000 DDRA@IO <- 0xFF DDRC@IO <- 0xFF TTCR0A@IO <- 0x01 TTCR0B@IO <- 0x03 TMSK0 <- 0x01 selAfficheur <- 0x01 ADMUX <- 0b01100000 ADCSRB <- 0b00000010 ADCSRA <- 0b11011110 PORTA@IO <- 0xAA PORTC@IO <- 0x00 SEI boucle: ; On attend et on recommence saut boucle tempo: ldi r24,8 tempoA: subi r22,1 sbci r23,0 sbci r24,0 brcc tempoA ret adc: val <- ADCH aff0 <- val/1-(val/10)*10 aff1 <- val/10-(val/100)*10 aff2 <- val/100 aff3 <- 0 ADCSRA <- 0b11011101 reti tmr: lsl selAfficheur si selAfficheur > 8 alors selafficheur <- 1 portc@IO <- 0xff - selAfficheur si selAfficheur == 1 alors porta@IO <- afficheur@ROM[aff0] si selAfficheur == 2 alors porta@IO <- afficheur@ROM[aff1] si selAfficheur == 4 alors porta@IO <- afficheur@ROM[aff2] si selAfficheur == 8 alors porta@IO <- afficheur@ROM[aff3] reti