Advertisement
Guest User

Untitled

a guest
May 30th, 2017
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. .include "ATxmega128A1Udef.inc"
  3.  
  4. .EQU    stack_init = 0x2FFF ;initialize stack pointer (between 0x2000 & 0x3FFF)
  5.                             ;  Default is 0x3FFF
  6.  
  7. .equ    eot = 0x09  ;0x09, 0x10
  8. .ORG 0x7800
  9. pattern:    .DB 0x01,0x03,0x06,0x0c,0x18,0x30,0x60, 0xC0, 0x80; , 0xC0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03
  10.  
  11. .ORG 0x0000                 ;Code starts running from address 0x0000.
  12.     rjmp MAIN               ;Relative jump to start of program.
  13.  
  14. .ORG 0x0100                 ;Start program at 0x0100 so we don't overwrite
  15.                             ;  vectors that are at 0x0000-0x00FD
  16. MAIN:
  17.  
  18.     ;initialize stack pointer
  19.     ldi YL, low(stack_init)
  20.     out CPU_SPL, YL                        
  21.     ldi YH, high(stack_init)
  22.     out CPU_SPH, YH        
  23.  
  24.     ;initialize pattern list
  25.     ldi ZL, low(pattern<<1)
  26.     ldi ZH, high(pattern<<1)
  27.    
  28.     ldi R16, 0xFF           ;load a 8bit high
  29.     sts PORTC_DIRSET, R16   ;set all the GPIO's in the 8 bits PORTD as outputs
  30.  
  31.     ldi R17, 0xFF           ; hold current pattern symbol
  32.    
  33. LOOP:  
  34.     ;end of the table, reset pointer
  35.     cpi ZL, eot
  36.     brsh reset_z
  37.    
  38.     lpm r17, Z+
  39.  
  40.     push r16
  41.     ldi r16, 5      ;50ms delay
  42.     rcall DELAY_x10ms
  43.     pop r16
  44.  
  45.     com R17         ;complement bits for active-low
  46.     sts PORTC_OUT, R17 ; turn on
  47.    
  48.     push r16
  49.     ldi r16, 5      ;50ms delay
  50.     rcall DELAY_x10ms
  51.     pop r16
  52.  
  53.     com R17
  54.     sts PORTC_OUT, R17  ; turn off
  55.  
  56.     rjmp LOOP
  57. reset_z:
  58.     ldi ZL, low(pattern<<1)
  59.     ldi ZH, high(pattern<<1)
  60.     rjmp LOOP               ;repeat forever!
  61.  
  62.  
  63. /****************************************
  64.  * Subroutine DELAY_x10ms loops until desired delay is reached
  65.  * Inputs:  R16 (=N), the millisecond multiplier
  66.  *  
  67.  * Outputs:  return to caller
  68.  * Affected: R16 will be 0 upon return
  69.  **************************************/
  70. DELAY_x10ms:   
  71.     push r31
  72.     push r30
  73.    
  74.     DELAY_10ms:
  75.         ldi r31, 17     ; 9 x 1020 = approx 10,000 x.5 microsecons/instr = 10millseconds
  76.         outer:
  77.             dec r31
  78.             cpi r31, 0
  79.             breq done_10ms
  80.             ldi r30, 254    ;255 x4 = 1020 cycles
  81.             inner:
  82.                 cpi r30, 0
  83.                 breq outer
  84.                 dec r30
  85.                 rjmp inner         
  86.     done_10ms:
  87.         dec r16
  88.         cpi r16, 0
  89.         breq done_x10ms
  90.         rjmp DELAY_10ms
  91.  
  92. done_x10ms:
  93.     pop r30
  94.     pop r31
  95.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement