Advertisement
daniv1

Untitled

Dec 13th, 2018
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  ; *************************************
  2.  ; Автор:Данів Ігор
  3.  ; Дата:12.11.2018
  4.  ; Ім'я файлу:Lab_1
  5.  ; *************************************
  6.  
  7.  
  8.    .include  "tn2313def.inc"                ;приєднання файлу опису.
  9.    .list                                    ;включення лістінга.
  10.    .def    temp = r16                       ;оприділення основного робочого регістра.
  11.    .def    loop1=r18                        ;оприділення регістра організації циклу.
  12.    .def    loop2=r19                        ;оприділення регістра організації циклу.
  13.    .def    loop3=r20                        ;оприділення регістра організації циклу.
  14.  
  15.                                             ;Початок програмного коду.
  16.               .cseg                         ;вибір сегмента програмного коду.
  17.               .org 0                        ;установка початкового адресу на нуль.
  18.  
  19.                                             ;Ініциалізація стека.
  20.  
  21.              ldi  temp,RAMEND               ;вибір адреси вершини стека.
  22.              out  SPL,temp                  ;запис його в регістр стека.
  23.  
  24.                                             ;Ініциалізація портів ВВ.
  25.  
  26.              ldi  temp,0                    ;записуємо нуль в регістр  
  27.              out  DDRD,temp                 ;порт D на ввід.
  28.              ldi  temp,0xFF                 ;записуємо в temp число 255.
  29.              out  DDRB,temp                 ;порт В на вивід.
  30.              out  PORTB,temp                ;гасимо всі світлодіоди.
  31.              out  PIND,temp                 ;записуємо в PIND  число 255.
  32.  
  33.                                             ;Початок основного циклу.
  34.  
  35.  main:  in   temp,PIND                      ;читаємо вміст порту PIND.
  36.             sbrc  temp,0                    ;провірка розряду 1.
  37.             rjmp  main                      ;якщо попереднє нуль то переходимо на початок.
  38.             rcall  delay1                   ;затримка 1.
  39.             in     temp,PINB                ;читаємо вміст порту В.
  40.             sbrc  temp,3                    ;провірка розряду 3.
  41.             rjmp  m1
  42.             sbi  PORTB,3                    ;встоновлюємо розряд 3 в одиницю.
  43.             rjmp  m2
  44.  m1:     cbi  PORTB,3                       ;скидаємо розряд 3 в нуль.
  45.  m2:     rcall  delay2                      ;затримка 2.
  46.             in  temp,PINB                   ;читаємо вміст порту В.
  47.             sbrc  temp,0                    ;провірка розряду 0.
  48.             rjmp  n1
  49.             sbi  PORTB,0                    ;встановлюємо розряд 0 в одиницю.
  50.              rjmp  n2
  51.  n1:     cbi  PORTB,0                       ;скидаємо розряд 0 в нуль.
  52.  n2:     rcall  delay3                      ;затримка 3.
  53.              in  temp,PINB                  ;читаємо вміст порту В.
  54.              sbrc  temp,6                   ;провірка розряду 7.
  55.              rjmp  d1
  56.              sbi  PORTB,6                   ;встановлюємо розряд 7 в одиницю.
  57.              rjmp  d2
  58.  d1:     cbi  PORTB,6                       ;встановлюємо розряд 7 в нуль.
  59.  d2:     rjmp  main
  60.  delay1:  
  61.     ldi  loop1, 21                          ;записуємо 21 в регістр
  62.     ldi  loop2, 75                          ;записуємо 75 в регістр
  63.     ldi  loop3, 191                         ;записуємо 21 в регістр
  64. L1: dec  loop3                              ;зменшуємо значення регістру на 1
  65.         brne L1                             ;перехід в мітку L1 по умові loop3 = 0
  66.     dec  loop2                              ;зменшуємо значення регістру на 1
  67.         brne L1                             ;перехід в мітку L1 по умові loop2 = 0
  68.     dec  loop1                              ;зменшуємо значення регістру на 1
  69.         brne L1                             ;перехід в мітку L1 по умові loop1 = 0
  70.     nop                                     ;виконання холостої команди
  71.         ret                                 ;вихід з підпрограми
  72.  delay2:
  73.     ldi  loop1, 21                          ;записуємо 21 в регістр
  74.     ldi  loop2, 75                          ;записуємо 75 в регістр
  75.     ldi  loop3, 191                         ;записуємо 191 в регістр
  76. L2: dec  loop3                              ;зменшуємо значення регістру на 1
  77.         brne L2                             ;перехід в мітку L1 по умові loop3 = 0
  78.     dec  loop2                              ;зменшуємо значення регістру на 1
  79.         brne L2                             ;перехід в мітку L1 по умові loop2 = 0
  80.     dec  loop1                              ;зменшуємо значення регістру на 1
  81.         brne L2                             ;перехід в мітку L1 по умові loop2 = 0
  82.     nop                                     ;виконання холостої команди
  83.         ret                                 ;вихід з підпрограми
  84.  delay3:
  85.     ldi  loop1, 41                          ;записуємо 41 в регістр
  86.     ldi  loop2, 150                         ;записуємо 150 в регістр
  87.     ldi  loop3, 128                         ;записуємо 128 в регістр
  88. L3: dec  loop3                              ;зменшуємо значення регістру на 1
  89.         brne L3                             ;перехід в мітку L1 по умові loop3 = 0
  90.     dec  loop2                              ;зменшуємо значення регістру на 1
  91.         brne L3                             ;перехід в мітку L1 по умові loop2 = 0
  92.     dec  loop1                              ;зменшуємо значення регістру на 1
  93.         brne L3                             ;перехід в мітку L1 по умові loop1 = 0
  94.         ret                                 ;вихід з підпрограми
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement