.equ RAMEND = 0x21FF .equ SPH = 0x3E .equ SPL = 0x3D .equ ADMUX = 0x7C .equ ADCSRB = 0x7B .equ ADCSRA = 0x7A .equ ADCH = 0x79 .equ UBRR0H = 0x00C5 .equ UBRR0L = 0x00C4 .equ UCSR0A = 0x00C0 .equ UCSR0B = 0x00C1 .equ UCSR0C = 0x00C2 .equ UDR0 = 0x00C6 .equ TCCR0A = 0x24 .equ TCCR0B = 0x25 .equ TIMSK0 = 0x6E .equ TIFR0 = 0x35 .org 0x0000 ; Vecteur RESET jmp debut .org 0x002E ; Interruption du timer jmp tm .def timer = r20 .org 0x0080 debut: ; initialisation du pointeur de pile ldi r28,low(RAMEND) ldi r29,high(RAMEND) out SPL, r28 out SPH, r29 ; Port série 16 MHz 2400 Baud UBRR0H <- 3 UBRR0L <- 64 UCSR0A <- 0b00000110 UCSR0B <- 0b00011000 UCSR0C <- 0b00000110 ; Timer toutes les 65 ms TCCR0A@IO <- 0x00 TCCR0B@IO <- 0b00000101 TIMSK0 <- 0x01 TIFR0 <- 0x01 ; ADC en déclenchement manuel ADMUX <- 0b01100000 ADCSRB <- 0b00000010 ADCSRA <- 0b11010110 sei timer <- 0 boucleTemps: si timer < 122 saut boucleTemps ; 8 secondes ne sont pas encore passées timer <- 0 ; Lancement d'une conversion ADC ADCSRA <- 0b11011101 ; Tant que la conversion ADC n'est pas terminée boucleAdc: si (ADCSRA & 0x80) == 0 saut boucleAdc UDR0 <- ADCH / 10 ; Tant que le premier caractère n'est pas envoyé, attendre avant d'envoyer le prochain boucleCar0: si (UCSR0A & 0x4) == 0 saut boucleCar0 UDR0 <- ADCH % 10 ; Tant que le deuxième caractère n'est pas envoyé, attendre avant d'envoyer le prochain boucleCar1: si (UCSR0A & 0x4) == 0 saut boucleCar1 UDR0 <- 67 ; Tant que le troisième caractère n'est pas envoyé, attendre avant d'envoyer le prochain boucleCar2: si (UCSR0A & 0x4) == 0 saut boucleCar2 UDR0 <- 13 ; Tant que le quatrième caractère n'est pas envoyé, attendre avant d'envoyer le prochain boucleCar3: si (UCSR0A & 0x4) == 0 saut boucleCar3 saut boucleTemps tm: inc timer reti