Advertisement
Guest User

Untitled

a guest
Sep 14th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*16 Renglones Activos en Bajo*/
  2. /* 8 Columnas Activas en Alto*/
  3. .include "m16def.inc"     // Incluir las librerías para programación del ATMega16
  4. .equ ClockCol=3             //
  5. .equ DatasCol=2
  6. .equ ClockRow=1
  7. .equ DatasRow=0
  8. .equ MatrixPort=PORTA  //puerto al que esta conectada la matriz
  9. .equ MatrixDDR=DDRA  
  10. .equ DatasInRAM=0x0060   //direccion de memoria
  11. .equ CharsInRAM=80
  12. .org 0
  13.  jmp main
  14. .org 0x30
  15. main:
  16.  ldi r16,HIGH(RAMEND)  //declara la pila, parte alta
  17.  out SPH,r16 //puntero a la pila
  18.  ldi r16,LOW(RAMEND)   //parte baja
  19.  
  20. out SPL,r16  //puntero a la pila
  21.  clr r16 //poner a cero el registro
  22.  out MatrixPort,r16   // sacar lo que hay en r16 por el puerto indicado
  23.  ser r16   //pone todos los bits a 1
  24.  out MatrixDDR,r16  //saca por el puerto
  25.  ;Matrix PORT as OUT
  26.  ldi ZL,Low(Mensaje)  //parte baja del mensaje
  27.  ldi ZH,HIGH(Mensaje)  //parte alta
  28.  clc
  29.  rol ZL //recorrer a la izquierda lo que hay en el registro (ultimo bit va al principio)
  30.  rol ZH
  31.  
  32.  ldi YL,Low(DatasInRAM)  //cargar lo que hay en parte baja de ram a direccion de memoria
  33.  ldi YH,HIGH(DatasInRAM) // cargar la parte alta
  34.  ldi r17,CharsInRAM //los caracteres en ram se cargan a r17
  35.  LoadCharsInRAM:
  36.  lpm r16,Z+  //cargar a r17 lo que hay en z y postincrementar
  37.  COM R16   //obtiene complemento a 1
  38.  st Y+,r16 //guarda en y lo que hay en r16 y postincrementa
  39.  dec r17  //reduce el valor de r17 en 1
  40.  brne LoadCharsInRAM   //salto si en la direccion indicada hay 0
  41. Repite:
  42.  call SelectCol0 //en columna 0
  43.  ldi YL,Low(DatasInRAM) //cargar parte baja de direccion indicada
  44.  ldi YH,HIGH(DatasInRAM) //parte alta
  45.  sbi MatrixPort,DatasCol //poner en 1 el bit indicado del registro marcado
  46.  ldi r18,CharsInRAM  //carga en r18 lo que hay en la direccion de memoria indicada
  47.  Repite16veces:
  48.  LD r16,Y+  //carga el valor de r16 en y y postincrementa y
  49.  call SendR0Serial  //llama a la instruccion sendr0serial
  50.  call retardo1ms  //llama a la instrccion retardo
  51.  sbi MatrixPort,ClockCol  //poner en 1 el bit indicado del registro marcado
  52.  cbi MatrixPort,ClockCol //poner en 0 el bit indicado del registro marcado
  53.  dec r18  //decrementa el valor de r18
  54.  brne Repite16veces  //salta si no se ha llegado al valor de repite16veces
  55.  dec r19 //decrementa el valor de r19
  56. brne Repite //salta si no se ha llegado al valor de repite
  57. RotaMatrixRAM:  
  58.  ldi ZL,Low(DatasInRAM) //carga a registro la parte baja de direccion
  59.  ldi ZH,HIGH(DatasInRAM) //carga a registro la parte alta de direccion
  60.  call rotaRAM //llama instruccion rotaram
  61.  ldi r19,4  //carga 4 en r19
  62. jmp Repite //salta a instruccion repite
  63. rotaRAM:
  64.  ldi r19,CharsInRAM-1 //carga a r19 el valor del registro indicado -1
  65.  MOV YL,ZL //mueve a yl lo que hay en zl
  66.  MOV YH,ZH //mueve a yh lo que hay en zh
  67.  ld r16,Y+ //carga a r16 lo que hay en y y postincrementa
  68.  push r16 //mete r16 a la pila
  69.  cicloRotaRAM:
  70.  ld r16,Y+ //carga en r16 lo que hay en y y postincrementa
  71.  st Z+,r16 // lo que esta en r16 se escribe en z y postincrementa
  72.  dec r19 //decrementa r19
  73.  brne cicloRotaRAM //salta si aun no se ha llegado al valor de ciclorotaram
  74.  pop r16 //saca de la pila r16
  75.  st Z,r16 //escribe lo que hay en r16 en z
  76. RET
  77. SendR0Serial:
  78.  ldi r17,8 //escribe un 8 en r17
  79.  rol r16 //recorre los bits de r16, el ultimo va a l primero
  80.  cicloSendR0Serial:
  81.  sbi MatrixPort,DatasRow   //poner en 1 el bit indicado del registro marcado
  82.  rol r16 //recorre los bits de r16, el ultimo va a l primero
  83.  bst r16,0 //bandera t se pone en 0
  84.  brts SendPulse
  85.  cbi MatrixPort,DatasRow //pone en 0 el bit indicado en el registro
  86.  SendPulse:
  87.  sbi MAtrixPort,ClockRow //pone en 1 el bit indicado
  88.  cbi MAtrixPort,ClockRow //pone en 1 el bit indicado
  89.  dec r17 //decrementa el valor de r17
  90.  brne cicloSendR0Serial //salta si no se ha llegado al valor
  91. RET //volver a la pila
  92. SelectCol0:
  93.  ldi r17,CharsInRAM-1 //guarda en registro
  94.  sbi MatrixPort,DatasCol //se pone en 1 el bit indicado
  95.  cicloSelCol0:
  96.  sbi MAtrixPort,ClockCol
  97.  cbi MAtrixPort,ClockCol
  98.  dec r17
  99.  brne cicloSelCol0
  100.  cbi MatrixPort,DatasCol
  101.  sbi MAtrixPort,ClockCol
  102.  cbi MAtrixPort,ClockCol
  103. RET
  104. retardo1ms:
  105.  push r16 //empujar a pila r16
  106.  push r17 //empujar a pila r17
  107.  
  108.  ldi r16,133 //carga un 133 en r16
  109.  ciclo1retardo1ms:
  110.  ldi r17,20 //carga un 20 en r17
  111.  ciclo2retardo1ms:
  112.  dec r17 //reduce en 1 el valor de r17
  113.  brne ciclo2retardo1ms
  114.  dec r16 //reduce el valor de r16
  115.  brne ciclo1retardo1ms
  116.  pop r17 //sacar de la pila y guardar en r17
  117.  pop r16 //sacar de la pila y guardar en r16
  118. RET  //volver a la pila
  119. Mensaje:  //escribe en una tabla en flash, en las direcciones indicadas
  120.  .DB 0x67,107,109,14,109,107,0x67, 0xff; Arbolito
  121.  .db 0b11100111, 0b11011111, 0b10111001, 0b10111111, 0b10111001, 0b11011111, 0b11100111, 0b11111111 ; :)
  122.  .db 0b11011101, 0b10000000, 0b11011101, 0b10000000, 0b11011101, 0b11111111 ; #
  123.  .db 0b11110111, 0b10010101, 0b11100000, 0b10010101, 0b11110111, 0b11111111 ; humano
  124.  .db 0b10000000, 0b10111110, 0b10100010, 0b10101010, 0b10101110, 0b10100000, 0b11111111, 0b11111111 ; espiral
  125.  .db 0b11000001, 0b10111110, 0b10101110, 0b11000001, 0b10111111, 0b11000000 /* Q*/
  126.  .db 0b10111111, 0b10111111, 0b11000000, 0b11111111/* U*/
  127.  .db 0b10000000, 0b10110110, 0b10110110, 0b10111110, 0b11111111, 0b11111111/*E*/
  128.  .db 0b11000001, 0b10111110, 0b10111110, 0b11000001, 0b11111111, 0b11111111 ;O
  129.  .db 0b10000000, 0b11111001, 0b11100111, 0b10000000, 0b11111111, 0b11111111 ;N
  130.  .db 0b10000000, 0b10111110, 0b11011101, 0b11100011, 0b11111111, 0b11111111 ;D
  131.  .db 0b10000001, 0b11110110, 0b11110110, 0b10000001, 0b11111111, 0b11111111 ;A
  132.  .db 0b11111111, 0b11111111, 0b11111111, 0b11111111
  133. ;Espacios
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement