Facebook
From wojtunio, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 71
  1. ;
  2. ; z1.asm
  3. ;
  4. ;
  5. ; Author : Superson Wojciech
  6.  
  7. .org 0                                          ;dyrektywa wymuszająca położenie następujących po niej rozkazów poczynając od adresu 0x000
  8. jmp Reset                                       ;adres 0x000 to wektor przerwania inicjalizacyjnego umieszczmy tutaj skok bezposredni do podprogramu reset                                                     
  9. jmp Ext_int1                            ;adres 0x004 to wektor przerwania zewnętrznego INT0 skok bezpośredni do podprogramu Ext_int1
  10.                                                        
  11.  
  12. Reset:                                          ; podprogram obsługi przerwania inicjalizacyjnego
  13.         ldi R16, HIGH(RAMEND)  
  14.         out SPH, R16
  15.         ldi R16, LOW(RAMEND)
  16.         out SPL, R16                    ;inicjalizacja stosu
  17.  
  18.         sei                                             ;zezwolenie na obsługę przerwań
  19.         ser R16                                 ;ustawienie wszystkich bitow rejestru R16
  20.         out DDRA, R16                   ;ustawienie wszystkich pinow PA jako wyjściowe
  21.         out DDRB, R16                   ;ustawienie wszystkich pinow PB jako wyjściowe
  22.         ldi R16, 0b11110000             ;załaduj stałą 11110000(b) -> R16
  23.         out PORTA, R16                  ;wyjscie na PA wartosci 11110000(b)    
  24.  
  25.         in R16, MCUCR                   ;wczytanie rejestr MCUCR -> R16
  26.         ori R16, 0b00000100             ;ustawienie R16.1 = 1
  27.         andi R16, 0b11110111    ;ustawienie R16.0 = 0
  28.         out MCUCR, R16                  ;ustawienie trybu 'any logical change' dla przerwania INT1                                                     
  29.  
  30.         in R16, GICR                    ;wczytanie rejestru GICR -> R16
  31.         ori R16, 0b10000000             ;ustawienie R16.6=1
  32.         out GICR, R16                   ;odblokowanie przerwania INT1
  33.  
  34.         jmp start                               ;skocz do programu głównego
  35.  
  36. Ext_int1:                                       ;podrpogram obsługi przerwania INT0
  37.         cli                                             ;zablokuj obsługę przerwań
  38.         push R16                                ;zabezpieczenie zawartości R16 na stosie
  39.         in R16, SREG                    ;wczytanie rejestru SREG -> R16
  40.         push R16                                ;zabezpieczenie zawartości SREG na stosie
  41.         in R16, PORTA                   ;wczytanie rejstru PORTA -> R16
  42.         com R16                                 ;negowanie bitow R16
  43.         out PORTA, R16                  ;zapisanie zawartości rejestru R16 w rejestrze PORTA
  44.         pop R16                                 ;zdejmij ze stosu pierwotną wartość SREG i zapisz w R16
  45.         out SREG, R16                   ;przywrócenie zachowanego SREG
  46.         pop R16                                 ;przywrócenie zachowanego R16
  47.         reti                                    ;powróć z podprogramu obsługi przerwania INT0
  48.                                                        
  49. start:                                          ;program główny
  50.         ldi R16, 0                              ;wczytanie wartości 0 -> R16
  51.         ldi R17, -2                             ;wczytanie wartości -2 -> R17
  52.         add     R17, R16                        ;dodanie wartości 0 do wartości -2
  53.         rcall opoznienie256             ;wywołanie podprogramu opozniajacego
  54.         brbs 4, ujemny                  ;skok do etykiety jeśli wynik był ujemny
  55. nieujemny:
  56.         ldi R16, 0b01010101             ;wczytanie wartości 01010101(b) -> R16 (wynik nieujemny)
  57.         rjmp dalej                              ;pominięcie ustawiania wartości dla wyniku ujemnego
  58. ujemny:
  59.         ldi R16, 0b10101010             ;wczytanie wartości 10101010(b) -> R16 (wynik ujemny)
  60. dalej:
  61.         out PORTB, R16                  ;zapisanie wartość rejestru R16 w rejestrze PORTB
  62.  
  63.         jmp start                               ;dopis zapętlający program główny
  64.  
  65. opoznienie256:                         
  66.         nop                                             ;procedura opozniajaca o 256 cykli
  67.         nop
  68.         nop
  69.         nop
  70.         nop
  71.         nop
  72.         nop
  73.         nop
  74.         nop
  75.         nop
  76.         nop
  77.         nop
  78.         nop
  79.         nop
  80.         nop
  81.         nop
  82.         nop
  83.         nop
  84.         nop
  85.         nop
  86.         nop
  87.         nop
  88.         nop
  89.         nop
  90.         nop
  91.         nop
  92.         nop
  93.         nop
  94.         nop
  95.         nop
  96.         nop
  97.         nop
  98.         nop
  99.         nop
  100.         nop
  101.         nop
  102.         nop
  103.         nop
  104.         nop
  105.         nop
  106.         nop
  107.         nop
  108.         nop
  109.         nop
  110.         nop
  111.         nop
  112.         nop
  113.         nop
  114.         nop
  115.         nop
  116.         nop
  117.         nop
  118.         nop
  119.         nop
  120.         nop
  121.         nop
  122.         nop
  123.         nop
  124.         nop
  125.         nop
  126.         nop
  127.         nop
  128.         nop
  129.         nop
  130.         nop
  131.         nop
  132.         nop
  133.         nop
  134.         nop
  135.         nop
  136.         nop
  137.         nop
  138.         nop
  139.         nop
  140.         nop
  141.         nop
  142.         nop
  143.         nop
  144.         nop
  145.         nop
  146.         nop
  147.         nop
  148.         nop
  149.         nop
  150.         nop
  151.         nop
  152.         nop
  153.         nop
  154.         nop
  155.         nop
  156.         nop
  157.         nop
  158.         nop
  159.         nop
  160.         nop
  161.         nop
  162.         nop
  163.         nop
  164.         nop
  165.         nop
  166.         nop
  167.         nop
  168.         nop
  169.         nop
  170.         nop
  171.         nop
  172.         nop
  173.         nop
  174.         nop
  175.         nop
  176.         nop
  177.         nop
  178.         nop
  179.         nop
  180.         nop
  181.         nop
  182.         nop
  183.         nop
  184.         nop
  185.         nop
  186.         nop
  187.         nop
  188.         nop
  189.         nop
  190.         nop
  191.         nop
  192.         nop
  193.         nop
  194.         nop
  195.         nop
  196.         nop
  197.         nop
  198.         nop
  199.         nop
  200.         nop
  201.         nop
  202.         nop
  203.         nop
  204.         nop
  205.         nop
  206.         nop
  207.         nop
  208.         nop
  209.         nop
  210.         nop
  211.         nop
  212.         nop
  213.         nop
  214.         nop
  215.         nop
  216.         nop
  217.         nop
  218.         nop
  219.         nop
  220.         nop
  221.         nop
  222.         nop
  223.         nop
  224.         nop
  225.         nop
  226.         nop
  227.         nop
  228.         nop
  229.         nop
  230.         nop
  231.         nop
  232.         nop
  233.         nop
  234.         nop
  235.         nop
  236.         nop
  237.         nop
  238.         nop
  239.         nop
  240.         nop
  241.         nop
  242.         nop
  243.         nop
  244.         nop
  245.         nop
  246.         nop
  247.         nop
  248.         nop
  249.         nop
  250.         nop
  251.         nop
  252.         nop
  253.         nop
  254.         nop
  255.         nop
  256.         nop
  257.         nop
  258.         nop
  259.         nop
  260.         nop
  261.         nop
  262.         nop
  263.         nop
  264.         nop
  265.         nop
  266.         nop
  267.         nop
  268.         nop
  269.         nop
  270.         nop
  271.         nop
  272.         nop
  273.         nop
  274.         nop
  275.         nop
  276.         nop
  277.         nop
  278.         nop
  279.         nop
  280.         nop
  281.         nop
  282.         nop
  283.         nop
  284.         nop
  285.         nop
  286.         nop
  287.         nop
  288.         nop
  289.         nop
  290.         nop
  291.         nop
  292.         nop
  293.         nop
  294.         nop
  295.         nop
  296.         nop
  297.         nop
  298.         nop
  299.         nop
  300.         nop
  301.         nop
  302.         nop
  303.         nop
  304.         nop
  305.         nop
  306.         nop
  307.         nop
  308.         nop
  309.         nop
  310.         nop
  311.         nop
  312.         nop
  313.         nop
  314.         nop
  315.         nop
  316.         nop
  317.         nop
  318.         nop
  319.         nop
  320.         nop
  321.         nop
  322.         ret                                                     ; powróć z podprogramu