Advertisement
Guest User

Untitled

a guest
Mar 12th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;*****************************************************************************
  2. ;COMPOSANT : ATMEL AVR 8 Bits (RISC) - ATMega328P Quartz = 16 MHz
  3. ;PROGRAMME : ex2.asm
  4. ;VERSION : V1
  5. ;CREATION : 26/02/19
  6. ;DERNIERE MAJ. : 26/02/19
  7. ;DESCRIPTION : Chenilard ADV
  8. ;AUTEUR : Antoine GIORDANO LA GRECA
  9.  
  10.  
  11. ;*****************************************************************************
  12. ; DIRECTIVES D'ASSEMBLAGE
  13. ;*****************************************************************************
  14. .DEVICE atmega328p                              ;Type de Microcontrôleur (définit dans l'include)
  15. .INCLUDE "m328Pdef.inc"                         ;Fichier de définition du microcontrôleur
  16.  
  17. ; PORTS D'ENTREES/SORTIES
  18. ;*****************************************************************************
  19.  
  20. ; Port C0 à C5 Branché sur une LED
  21. ; Port B0 à B7 ???
  22. ; Port D0 à D7 ??
  23.  
  24. ;*****************************************************************************
  25. ; CONSTANTES
  26. ;*****************************************************************************
  27. ; Pas de constante
  28.  
  29. ;*****************************************************************************
  30. ; DEFINITIONS DE REGISTRES
  31. ;*****************************************************************************
  32. ; r0 à r15 Libres
  33. ; r16 à r20 Utilisés par le programme
  34. ; r21 à r25 Libres
  35. ; r26 à r31 Réservés pour registre X, Y, Z
  36.  
  37. ;*****************************************************************************
  38. ; ORGANISATION RAM
  39. ;*****************************************************************************
  40. .DSEG
  41. .ORG 0x0100                                 ; début de la mémoire disponible pour l’utilisateur (vous)
  42.  
  43. ; INTERRUPTIONS ET RESET
  44. ;*****************************************************************************
  45. ; Même si les interruptions ne sont pas utilisées ces définitions doivent être déclarées
  46. .CSEG                                       ;Segment de Code
  47. .ORG $0000                                  ;Positionnement au début de la mémoire
  48. jmp RESET                                   ;Reset Handler
  49. jmp EXT_INT0                                ;IRQ0 Handler
  50. jmp EXT_INT1                                ;IRQ1 Handler
  51. jmp EXT_INT2                                ;IRQ2 Handler
  52. jmp TIM2_COMP                               ;Timer2 Compare Handler
  53. jmp TIM2_OVF                                ;Timer2 Overflow Handler
  54. jmp TIM1_CAPT                               ;Timer1 Capture Handler
  55. jmp TIM1_COMPA                              ;Timer1 CompareA Handler
  56. jmp TIM1_COMPB                              ;Timer1 CompareB Handler
  57. jmp TIM1_OVF                                ;Timer1 Overflow Handler
  58. jmp TIM0_COMP                               ;Timer0 Compare Handler
  59. jmp TIM0_OVF                                ;Timer0 Overflow Handler
  60. jmp SPI_STC                                 ;SPI Transfer Complete Handler
  61. jmp USART_RXC                               ;USART RX Complete Handler
  62. jmp USART_UDRE                              ;UDR Empty Handler
  63. jmp USART_TXC                               ;USART TX Complete Handler
  64. jmp ADC_COMP                                ;ADC Conversion Complete Handler
  65. jmp EE_RDY                                  ;EEPROM Ready Handler
  66. jmp ANA_COMP                                ;Analog Comparator Handler
  67. jmp TWI                                     ;Two-wire Serial Interface Handler
  68. jmp SPM_RDY                                 ;Store Program Memory Ready Handler
  69.  
  70. ;*****************************************************************************
  71. ; PROGRAMME PRINCIPAL (RESET)
  72. ;*****************************************************************************
  73. ;Initialise la pile en bas de la mémoire RAM en adresse 16 bits
  74. RESET: ldi r16, HIGH(RAMEND)                 ;Charge la valeur haute de l’adresse en fin mémoire RAM
  75. out SPH, r16                                 ;Positionne le pointeur de pile haut sur cette adresse
  76. ldi r16, LOW(RAMEND)                         ;Charge la valeur basse de l’adresse en fin mémoire RAM
  77. out SPL, r16                                 ;Positionne le pointeur de pile bas sur cette adresse
  78.  
  79. ;-----------------------------------------------------------------------------
  80. ;Initialisation Port B ;PB0 à PB7 = Led
  81. ser r16                                     ;Port en sortie (les bits du port sont mis à 1, soit en sortie)
  82. out DDRC, r16                               ;Ecriture sur le registre de direction du port C
  83. clr r16                                     ;Port en bas (les bits du port sont mis à 0, Led éteinte)
  84. out PORTC, r16                              ;Port C mis à zéro
  85.  
  86. ;-----------------------------------------------------------------------------
  87. ;Fin d’initialisation
  88. jmp Debut                                   ;Fin d'initialisation, on saute au début
  89.  
  90. ;_____________________________________________________________________________
  91. ;Interruptions non utilisées
  92. EXT_INT0:                                   ;IRQ0
  93. EXT_INT1:                                   ;IRQ1
  94. EXT_INT2:                                   ;IRQ2
  95. TIM2_COMP:                                  ;Timer2 Comparaison
  96. TIM2_OVF:                                   ;Timer2 Overflow
  97. TIM1_CAPT:                                  ;Timer1 Capture
  98. TIM1_COMPA:                                 ;Timer1 CompareA
  99. TIM1_COMPB:                                 ;Timer1 CompareB
  100. TIM1_OVF:                                   ;Timer1 Overflow
  101. TIM0_COMP:                                  ;Timer0 Compare
  102. TIM0_OVF:                                   ;Timer0 Overflow
  103. SPI_STC:                                    ;SPI Transfer Complete
  104. USART_RXC:                                  ;USART RX Complete
  105. USART_UDRE:                                 ;UDR Empty
  106. USART_TXC:                                  ;USART TX Complete
  107. EE_RDY:                                     ;EEPROM Ready
  108. ADC_COMP:                                   ;ADC Conversion Complète
  109. ANA_COMP:                                   ;Analog Comparator
  110. TWI:                                        ;Two-wire Serial Interface
  111. SPM_RDY:                                    ;Store Program Memory Ready
  112. nop                                         ;Ne rien faire dans cette interruption
  113. reti                                        ;Fin de l’interruption
  114.  
  115. ;*****************************************************************************
  116. ;_____________________________________________________________________________
  117. ;Programme principal
  118. ;_____________________________________________________________________________
  119. Debut:                                          ;Programme principal
  120.  
  121. ldi r17, 1
  122.  
  123. Boucle:                                    
  124. ;out PORTC, r17                            
  125.  
  126.  
  127. ;Boucle d’attente
  128. ldi r18, 255                                ;Charge le temps d’attente primaire
  129. ldi r19, 255                                ;Charge le temps d’attente secondaire
  130.  
  131. Attente:                                    ;Attente
  132. dec r18                                     ;Décrément de 1 de la variable r18 (125 ns)
  133. nop
  134. brne Attente                                ;Boucle sur Attente jusqu’à l’obtention d’un zéro dans r18
  135.  
  136. ;Boucle secondaire
  137. ldi r18, 250                                ;Réinitialise la boucle primaire
  138. dec r19                                     ;Décrémente de 1 la boucle secondaire
  139. brne Attente                                ;Boucle sur Attente jusqu’à l’obtention d’un zéro dans r19
  140.  
  141. lsl r17                                     ;multiplie par 2
  142. ldi r20, $30                                ;mask
  143. eor r20, r17                                ;mettre le xor ici
  144. out PORTC, r20                              ;push le r17
  145.  
  146. cpi r17,16                                  ;avent les deux dernier led
  147. BREQ suite
  148. jmp Boucle
  149. suite:
  150.  
  151. ldi r18, 255                                ;Charge le temps d’attente primaire
  152. ldi r19, 255                                ;Charge le temps d’attente secondaire
  153.  
  154. Attenteb:                                   ;Attente
  155. dec r18                                     ;Décrément de 1 de la variable r18 (125 ns)
  156. nop
  157. brne Attenteb                               ;Boucle sur Attente jusqu’à l’obtention d’un zéro dans r18
  158.  
  159. ;Boucle secondaire
  160. ldi r18, 250                                ;Réinitialise la boucle primaire
  161. dec r19                                     ;Décrémente de 1 la boucle secondaire
  162. brne Attenteb                               ;Boucle sur Attente jusqu’à l’obtention d’un zéro dans r19
  163.  
  164. lsr r17                                     ;multiplie par 2
  165. ldi r20, $0                                 ;mask
  166. eor r20, r17                                ;mettre le xor ici
  167. out PORTC, r20                              ;push le r17
  168.  
  169. cpi r17,0                                   ;avent les deux dernier led
  170. BREQ Debut
  171. jmp suite
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement