]> git.llucax.com Git - z.facultad/66.09/etherled.git/blob - src/leds.h
Emprolija un poco el retarno, no necesita más usar el multiplicador.
[z.facultad/66.09/etherled.git] / src / leds.h
1 /* vim: set et sw=4 sts=4 : */
2
3 #ifndef _LEDS_H_
4 #define _LEDS_H_
5
6 #include "reg51.h"
7
8 /** Cantidad mínima de columnas (es más un límite estético que físico) */
9 #define LEDS_MIN_COLS 8
10
11 /** Cantidad máxima de columnas */
12 #define LEDS_MAX_COLS 32
13
14 /** Tamaño de la matriz de leds, en cantidad de columnas */
15 extern unsigned char leds_matrix_len;
16
17 /** Matriz de leds, cada elemento del array es una columna */
18 extern idata unsigned int leds_matrix[LEDS_MAX_COLS];
19
20 /** Setea retardo de refresco de la matriz */
21 #define leds_delay_set(delay) (RCAP2H = ((unsigned char) -delay))
22 /* usamos directamente el rcap2h negado (complementado) */
23
24 /** Obtiene retardo de refresco de la matriz */
25 #define leds_delay_get() ((unsigned char) -RCAP2H)
26 /* usamos directamente el rcap2h negado (complementado) */
27
28 /** Tamaño del retardo de refresco de la matriz */
29 #define LEDS_DELAY_SIZE sizeof(RCAP2H)
30 /* usamos directamente el rcap2h */
31
32 /** Inicializa leds
33  *
34  * El 'dibujado' de la matriz se puede controlar fácilmente parando y/o
35  * iniciando el timer2. Para comenzar a 'dibujar' la matriz sólo es necesario
36  * setear el bit TR2 del registro T2CON (y habilitar las interrupciones
37  * globalmente si aún no se hizo, bit EA del registro IE).
38  */
39 void leds_init();
40
41 /** Realiza un testeo simple de los leds */
42 void leds_test();
43
44 /** Escribe un word (16 bits) en la columna de leds */
45 void leds_write(unsigned int);
46
47 /** Escribe un byte en la parte baja de la columna de leds */
48 void leds_write_low(unsigned char);
49
50 /** Escribe un byte en la parte alta de la columna de leds */
51 void leds_write_high(unsigned char);
52
53 /** Actualiza el delay al recomendado según el tamaño de la matriz */
54 void leds_delay_update();
55
56 /** Bloquea timer de leds cuando se accede a una zona crítica (P0 y/o P2). */
57 void leds_lock();
58
59 /** Desbloquea el timer de los leds.
60  * @precond Se llamó a leds_lock();
61  */
62 void leds_unlock();
63
64 /** Atiende interrupción del timer2 para 'dibujar' la matriz */
65 void leds_timer2_isr() interrupt 5;
66
67 #endif /* _LEDS_H_ */