Anda di halaman 1dari 17

El Propeller, un reloj LED barrido mecnico por Bob Blick.

El reloj est en un pedazo de giro de tarjeta perforada, pero tiene que conseguir el poder. Pens en muchas maneras de hacer esto, incluyendo el uso de dos motores (motor uno tiene su eje fijado a un base y motor de dos vueltas de el cuerpo de un motor, la generacin de electricidad), haciendo un transformador giratorio, o el uso de anillos deslizantes. Decid hacerlo de otra manera, la toma del poder por la rotacin del inducido de un motor de corriente continua sin formato. Para ejecutar los cables del motor, le quit el rodamiento de un extremo del motor, dejando un gran agujero. Hay tres terminales dentro de los motores de CC ms pequea, y acta muy parecido a trifsico de corriente alterna, por lo debe ser rectificada a DC. Un efecto secundario interesante de esto es que la posicin del motor se puede detectar mediante la adopcin de una de las fases directamente en el microprocesador. Primer paso: Mangle un motor. Encuentre un VCR, tal vez un agudo o un Samsung, con un motor de bobina plana . El motor que tengo es marcada JPA1B01, pero sostenido lo sabe por el nmero RMOTV1007GEZZ. Desmontarlo sin destrozando los cepillos (hay pequeos agujeros para meter un clip en mover los cepillos de la forma), y note que tiene un cojinete de bolas y un cojinete de manguito. Golpee la camisa que lleva fuera de la caja y la cola o soldadura al otro extremo del motor, como una extensin del cojinete de bolas. El eje del motor tendr que ser colocado de nuevo ligeramente para obtener el derecho de altura, que presiona en un tornillo de banco con un espaciador hueco en un extremo. Tome un conector Berg con tres alambres y soldadura a los tres terminales en la armadura del motor. Pegue un espaciador roscado corto al eje en el extremo que se pega hacia fuera el agujero, y volver a montar el motor (sea cuidadoso con los pinceles). Puede pegar el motor a una cabeza VCR como una base pesada. Paso dos: Construir el circuito. Sola perfboard (Vectorboard) y Handwired el circuito juntos. Utilice una toma de 18 pines para el 16C84 porque tiene que ser programado antes de ponerlo en el circuito. A los 7 resistencias de corriente lmite us una red de resistencias DIP, ya que lo hizo fcil de experimentar con LED de brillo. Que se establecieron en 120 ohms. Puede utilizar siete resistencias regulares,

porque 120 ohmios funciona bien, a pesar de que pone el derecho de corriente de pico en el lmite de la 16C84. Piensa en el equilibrio, mientras se construye el circuito, y de referencia en mis fotos, por lo que no hay que aadir una gran cantidad de equilibrio de peso ms adelante. Sustituto de los valores que te gusta. Tenga en cuenta que he usado un supercap 47000uF, que es mantener el reloj funcionando despus de apagarlo, as que usted puede ajustar la hora. El LED obtener energa separada de esta. No sustituya un resonador cermico para el cristal 4 MHz, se trata de un reloj y debe ser exacta. Paso tres:. Programe el 16C84 Usted necesitar un programador que programar un PIC16C84. Si encuentra el archivo / pgina web, usted puede encontrar planes para construir un programador 16C84. Program usando el hex que acompaa a este documento. He incluido el cdigo fuente (. asm) slo para su diversin. Al programar el chip, defina las opciones de chips para: temporizador watchdog (WDT) OFF y oscilador de cristal XT normal. Paso cuatro: Lanza juntos y Controlar el tiempo. Atornille la placa de circuito en el motor, y conecte el conector de tres cables pulg Encienda el motor. El voltaje recomendado es de 6,2 voltios, pero que se desarrollar del 5 voltios a aproximadamente 7,5 voltios. Tenga en cuenta que 5 voltios llega a el circuito de 6,2 voltios cuando se aplica al motor, a causa de diodo prdidas. El reloj puede estar trabajando en este punto, que muestra 12:00. Si no lo es. probablemente hubo alguna tensin en el supercap cuando conect en el chip. Desconecte la alimentacin y los pines momentneamente cortos 5 y 4 juntas (planta y / MCLR) para restablecer el chip. Ahora, cuando se aplica energa al reloj debe trabajar, y se puede establecer que al desconectar la alimentacin y apretar los botones (horas, 10 minutos, minuto) el nmero correcto de veces. Si los nmeros aparezcan al revs, invertir la polaridad del motor para hacerla girar en sentido contrario. Usted puede experimentar con el equilibrio del reloj, y el uso de espuma debajo de la base para reducir la vibracin. Paso cinco:. Modificaciones Si te fijas bien en el cdigo fuente, ver que la "tasa de punto" se ajusta a la velocidad de el motor para que la pantalla de un constante anchura, independientemente de la velocidad del motor. El motor us pinceles tiene establecidos 90 grados, y le da dos ndices de cada revolucin. El reloj

muestra en dos partes, 180 grados de diferencia. Si se utiliza un motor con los cepillos 180 pedazos, el reloj slo se mostrar por un lado, y los nmeros ser demasiado amplia. Usted querr modificar el programa, en la seccin marcada D_lookup_3. El valor en el registro W cuando retardo obtiene llama efectos de la anchura de los dgitos. Usted puede tratar de enviar la mitad de el valor period_calc al retraso, tal vez girando a la derecha period_calc en W (no olvide limpiar el carry primero). De esta manera: BCF STATUS, C rrf period_calc, w call Delay 25 de enero 1997 Bob Blick www.bobblick.com copyright 1997 Bob Blick, todos los derechos reservados notas actualizadas 02 de noviembre 2006 Nota: PIC16C84 ahora es obsoleto. Es posible que use un PIC16F84 o PIC16F84A sin cambios. Nota: Agudo motor VCR ya est obsoleta. Utilice cualquier motor de corriente continua, preferentemente destinado a 12 voltios por lo que la velocidad no ser demasiado grande cuando se opera a aproximadamente 6,2 voltios.

La lista de piezas del reloj Propeller Condensadores: C1, C2 - 33pF ceramic C3, C6 - cermica 0.1uF C4 - 47uf electroltica C5 - 47.000 uf supercap (lmite de memoria) Diodos: D1-D7 - diodos emisores de luz D8-16 - 1N4001 uso general 1AMP rectificadores Resistencias: R1 - 120 array DIP ohm o siete 120 ohm resistencias R2-R6 - 10k ohm Otra informacin: J1 - Conector de tres terminales Berg SW1-SW3 - normalmente pulsadores abiertos U1 - PIC16C84, PIC16F84 y PIC16F84A XTAL1 - 4 MHz cristal MOTOR - Afilado RMOTV1007GEZZ Nota: U1 a programar con el archivo hex mClock

; -------; Mclock8.asm

; "El Propeller" reloj LED barrido mecnico Y algunos cambios desde la ltima versin , Modificado mesa, etc para Compatiblility con 8 LED , Temporizador de vigilancia utilizado para garantizar la puesta en marcha , Bob Blick 12 de febrero 1997 , Licenciado bajo los trminos de la Licencia Pblica General de GNU, www.gnu.org , No hay garantas expredded o implcita , Bob Blick 18 de febrero 2002 ; -------Lista p = 16C84 radix hex incluir "p16c84.inc" ; -------, Recuerda que para definir las opciones tiempos de detonacin: OSC = xtal regular, WDT = ON , Todos ellos basados en tiempos de cristal 4 MHz ; -------; Son stas equivale ya en el archivo de inclusin? Algn da voy a mirar. ; -------w equ 0 f equ 1 ; -------, Inicio de RAM disponible. ; -------cblock 0x0C safe_w, no realmente temporal, utilizado por svc interrupcin safe_s, no es realmente temporales, utilizado por svc interrupcin period_count; incrementa cada interrupcin period_dup, copia de seguridad period_count de interrupcin period_calc; perodo estable despus calc histresis. banderas, b2 = int b1 = minutos b4 = orilla dot_index; qu columna se est visualizando digit_index, el dgito se visualiza hora, en formato de presentacin, no hexagonal (01-12) minutos, 00 a 59 bigtick_dbl; incrementa cada interrupcin bigtick_hi bigtick_lo teclas, clave y valor cero, el valor cero garrapatas, que se utiliza por el retraso endc ; -------, Inicio de ROM ; -------org 0x00; Inicio de espacio de cdigo Ir a Inicio ; -------, Rutina de interrupcin ; -------org 0x04; vector de interrupcin

Intsvc movwf safe_w; salvar w swapf STATUS, w, estado de swap, w movwf safe_s, estado de almacenamiento (intercambio nibble, recuerda) ; -------; Hecho ahorro, ahora empezar a trabajar ; -------, Temporizador watchdog clara para garantizar el inicio CLRWDT ; , Incrementa el contador de tiempo incf period_count, f btfsc STATUS, Z; ajuste a cero significa desbordamiento DECF period_count, f , 234.375 interrumpe cada minuto. Incrementar el bigtick cada vez. incf bigtick_lo, f btfsc STATUS, Z incf bigtick_hi, f btfsc STATUS, Z INCFSZ bigtick_dbl, f Ir Bigtick_out ; -------, Aqu? bigtick ha lanzado a cero y ha pasado un minuto. ; Recargar bigtick y establecer un indicador para el contador principal ; -------movlw 0xFC; 234.375 = 0x039387 movwf bigtick_dbl; 0 - 0x039387 = 0xFC6C79 movlw 0x6C movwf bigtick_hi movlw 0x79 movwf bigtick_lo banderas bsf, 1; notificar Keep_time Bigtick_out ; -------, Hecho de trabajo, iniciar la restauracin ; -------swapf safe_s, w; Obtener estado, aperitivos reswap movwf STATUS; status restaurar swapf safe_w, f; nibbles intercambio en preparacin swapf safe_w, w, para la restauracin de intercambio de w BCF INTCON, 2; indicador de interrupcin clara antes del regreso retfie; regreso de interrupcin ; -------; CARCTER Bsqueda en una tabla ; Ignorar bits alta. set = LED apagado, claro LED encendido =, LED bit 0 = LED inferior, bit 6 = top ; -------Char_tbl addwf PCL, f dt 0xC1, 0xBE, 0xBE, 0xBE, 0xC1, "O" dt 0xFF, 0xDE, 0x80, 0xFE, 0xFF; "1" dt 0xDE, 0xBC, 0xBA, 0xB6, 0xCE, "2" dt 0xBD, 0xBE, 0xAE, 0x96, 0xB9, "3" dt 0xF3, 0xEB, 0xDB, 0x80, 0xFB, "4" dt 0x8D, 0xAE, 0xAE, 0xAE, 0xB1, "5" dt 0xE1, 0xD6, 0xB6, 0xB6, 0xF9, "6"

dt dt dt dt

0xBF, 0xC9, 0xCF, 0xFF,

0xb8, 0xB6, 0xB6, 0xC9,

0xB7, 0xB6, 0xB6, 0xC9,

0xAF, 0xB6, 0xB5, 0xFF,

0x9F, 0xC9, 0xC3, 0xFF;

"7" "8" "9" ":"

Char_tbl_end ; -------; SUBRUTINAS COMIENZO AQU ; -------; Claras partes importantes de RAM ; -------Ram_init movlw 0x07 teclas movwf movlw 0x12; por qu los relojes siempre comienzan movwf horas, a las 12:00? minutos CLRF clrf dot_index clrf digit_index movlw 0xFC movwf bigtick_dbl retlw 0 ; -------, Pin no utilizados que yo pongo como salidas ; -------Port_init 0x00 movlw; todas las salidas, b7 = no utilizado tris PORTB, en el puerto b adjunta a LEDs movlw b'00010111 '; puerto tiene un 5 pines. Necesito 4 entradas ; B0 = minutos, b1 = 10 minutos, b2 = horas ; = B3, b4 = ndice de rotacin no utilizada tris PORTA, en el puerto de retlw 0 ; -------; Reciben interrupciones timer basados ir ; -------Timer_init BCF INTCON, 2; claro indicador int TMR0 bsf INTCON, 7; permitir interrupciones globales bsf INTCON, 5; permiten TMR0 int clrf TMR0; temporizador clara CLRWDT, por qu es esto necesario? slo lo hacen .. movlw b'11011000 '; estableci temporizador. prescaler (bit 3) anulado opcin, enviar a la opcin w. generar advertencia. clrf TMR0; inicio del temporizador retlw 0 ; -------, Prueba de ndice de rotacin y el perodo de tienda en period_dup ; -------Check_index movf PORTA, w, obtener el estado de un puerto banderas xorwf, w; Comparar con estado guardado andlw b'00010000 '; slo est interesado en el bit 4 btfsc STATUS, Z; prueba de borde retlw 0; no una ventaja, igual que la ltima banderas xorwf, f; ahorrar para la prxima vez banderas BTFSC, 4; prueba de bajada retlw 0; debe haber sido un flanco ascendente

movf period_count, w, hacer una copia de trabajo movwf period_dup, llamado perodo dup clrf period_count, un nuevo comienzo para el prximo giro clrf digit_index, establece en primer dgito clrf dot_index, primera columna , Calcular un periodo que no tramado o jitter , El perodo no se cambiar a menos nuevo perodo es realmente diferente movf period_calc, w subwf period_dup, w, encontrar diferencias btfss STATUS, C; lleve indicador establecido no significa pedir prestado Ir Calc_period_neg, debe ser otra forma sublw 2, desviacin permitida = 3 btfss STATUS, C; prestado no se saltar incf period_calc; nuevo valor mucho ms grande que calc retlw 0 Calc_period_neg addlw 2, desviacin permitida = 3 btfss STATUS, C; carry saltar DECF period_calc; no aplazamiento significa que debe ser cambiado retlw 0 ; -------, Cambiar el patrn de LED basado en estado de digit_index y dot_index ; -------Display_now movlw 0x05 xorwf dot_index, w, prueba de final de dgitos movlw 0xFF; patrn para la columna en blanco btfsc STATUS, Z Ir D_lookup_3, necesita un espacio en blanco BCF STATUS, C; carry claro antes de girar un rlf digit_index, w, el doble del ndice, ya que cada addwf PCL, f; lleva dos instrucciones D_10hr swapf horas, w Ir D_lookup, qu gran oleada de energa D_1hr MOVF horas, w, me siento al modificar D_lookup Goto, el contador de programa D_colon movlw 0x0A Ir D_lookup D_10min minutos swapf, w Ir D_lookup D_1min minutos MOVF, w Ir D_lookup D_nothing retlw 0 D_lookup andlw b'00001111 '; quitarse hi trozos movwf cero, multiplique esto por 5 para bsqueda addwf scratch, f, la posicin base de la mesa addwf scratch, f, es la trampa? addwf scratch, f, yo no lo creo. addwf scratch, f, yo creo que es la conservacin de la energa! ESTADO btfss, Z, prueba de cero Ir D_lookup_2, no un cero movf digit_index, f, esto es slo para poner a prueba / puesta bandera movlw 0xFF, lo que hace un patrn LED blanco btfsc STATUS, Z, prueba si es 10 hrs dgitos Ir D_lookup_3, es un cero a la izquierda

D_lookup_2 movf dot_index, w; obtener la columna addwf cero, w, agregarlo a la base de cifras llame Char_tbl, obtener el patrn de puntos para esta columna D_lookup_3 movwf PORTB; enviarlo a los LED movlw 0x0C; sub Valor de cabeza del periodo subwf period_calc, w, compensar los gastos generales y establece llame Delay, ancho de dgitos con este retraso incf dot_index, f; incremento a la siguiente columna movlw 0x06, 6 columnas es un espacio ms dgitos xorwf dot_index, w; prxima prueba dgitos btfss STATUS, Z retlw 0, no un nuevo dgito clrf dot_index; nuevo tiempo dgitos incf digit_index, f RETLW 0; Display_now hecho. ; -------; Una rutina de retardo corto ; -------Retraso movwf garrapata Delay_loop decfsz garrapata, f Ir Delay_loop; w no est daado, por lo que demora puede volver, se recordar sin recargar ; -------, Prueba de pulsacin y hora de la llamada si es necesario ajustar ; -------Check_keys movf PORTA, w; obtener port "a" teclas xorwf, w; comparar con las anteriores andlw b'00000111 '; slo se preocupan por los pernos del botn btfsc STATUS, Z; ZERO SET = sin botones retlw 0; regreso teclas xorwf, f; store valor de la clave movlw 0x64; un tiempo bastante largo retraso movwf cero; evitar rebotes claves Key_delay movlw 0xFF llame Retraso decfsz cero Ir Key_delay teclas BTFSS, 2, botn de prueba "minutos" Ir Inc_mins teclas BTFSS, 1, botn de prueba "decenas" Ir Inc_tens teclas BTFSS, 0, botn de prueba "horas" Ir Inc_hours retlw 0; debe ser un fallo. s, claro! ; -------; Incrementar diez minutos ; -------Inc_tens movlw 0x0A movwf cero, cero tiene diez Inc_tens_loop llamada Inc_mins decfsz cero Ir Inc_tens_loop; un minuto aadido retlw 0 ; --------

; Incrementar una hora ; -------Inc_hours movlw 0x12 xorwf horas, w btfsc STATUS, Z Ir Inc_hours_12 movlw 0x07; esta parte se hace un poco descuidado hora ADDWF, w movlw 0x07 btfss STATUS, DC movlw 1 hora ADDWF, f retlw 0 Inc_hours_12 movlw 0x01 movwf horas retlw 0 ; -------, Incrementar el tiempo basado en banderas, 1 que fue enviado por la rutina de interrupcin ; Inc_mins bucle tambin utilizado por la rutina de puesta en hora ; -------Banderas BTFSS Keep_time, 1 minuto, el indicador retlw 0; esta vez no banderas BCF, 1, desactive la bandera minutos Inc_mins movlw 0x07, el tiempo incrementando inicio minutos ADDWF, w; suman 7 minutos w btfsc STATUS, DC, hizo aadiendo 7 carry causa dgitos? Sixty_mins Ir y luego prueba de un cambio de hora incf minutos, aadir otro modo 1 for real retlw 0 y volver Sixty_mins minutos movwf; guardar los minutos movlw 0x60; prueba de 60 minutos xorwf, w, son minutos a 60? btfss STATUS, Z retlw 0, no? volver CLRF minutos, de lo contrario cero minutos Inc_hours Ir y hora de incremento ; -------; Fin de subrutinas ; Programa comienza aqu ; -------Iniciar llame Ram_init; Establezca las variables para valores agradables llame Port_init, establecer direcciones de puerto llame Timer_init, empieza interrupcin basada temporizador ; -------; Hecho inicializacin, iniciar el bucle sin fin. ; -------; Crculo, comenzar la gran bucle ; ; -------; Detectar flanco descendente en PORTA, 4 para determinar el ndice de rotacin , Calcular el perodo de rotacin y guardar en period_dup ; Comparar con perodo de trabajo (period_calc) y ajuste si forma diferente ; --------

llame Check_index ; -------, Comprobar el estado de visualizacin y cambiar si es necesario ; -------llame Display_now ; -------, Echa un teclado y ajustar el tiempo de ; -------llame Check_keys ; -------; Comprobar el tiempo de la bandera y el incremento minutos si ha pasado un minuto ; -------llame Keep_time ; -------, Seores, eso es un reloj, mantenerlo rodando ; -------Ir Circle, que escuch al hombre, ponerse en marcha! final ; -------, Al final del archivo ; --------

:020000040000FA :10000000F028FF3FFF3FFF3F8C00030E8D00640090 :100010008E0A03198E03980A0319970A0319960F7B :100020001828FC3096006C309700793098009114B5 :100030000D0E83008C0E0C0E0B1109008207C134CB :10004000BE34BE34BE34C134FF34DE348034FE34BA :10005000FF34DE34BC34BA34B634CE34BD34BE34AE :10006000AE349634B934F334EB34DB348034FB34BF :100070008D34AE34AE34AE34B134E134D634B6342B :10008000B634F934BF34B834B734AF349F34C934DC :10009000B634B634B634C934CF34B634B634B534E5 :1000A000C334FF34C934C934FF34FF3407309900F6 :1000B00012309400950192019301FC3096000034B7 :1000C000003066001730650000340B118B178B165B :1000D00081016400D83062008101003405081106F6 :1000E0001039031900349106111A00340E088F00DC :1000F0008E019301920110080F02031C8328023C19 :10010000031C900A0034023E031C900300340530A7 :100110001206FF300319A9280310130D8207140ECD :100120009A2814089A280A309A28150E9A28150831 :100130009A2800340F399A009A079A079A079A0763 :10014000031DA6289308FF300319A92812081A07CF :100150001E2086000C301002B520920A06301206CE :10016000031D00349201930A00349B009B0BB628B8 :100170000800050819060739031900349906643088 :100180009A00FF30B5209A0BC128191DE328991C4D :10019000CC28191CD22800340A309A00E3209A0B8C :1001A000CE280034123014060319DD280730140756 :1001B0000730831C01309407003401309400003470 :1001C000911C00349110073015078318E928950A0F :1001D0000034950060301506031D00349501D228C7 :1001E0005620602065206E208720B920E020F3286B :0201F000FF3FCF

:02400E00F53F7C :00000001FF

; -------; MclockT3.asm - modificado para 180 motor del cepillo grado , En Aceptar para agregar 8 LED - borrado en la tabla y otros 2 lugares , Temporizador de vigilancia utilizado para asegurar el arranque en todas las powerups ; "El Propeller" reloj LED barrido mecnico , Bob Blick 12 de febrero 1997 , Licenciado bajo los trminos de la Licencia Pblica General GNU, www.gnu.org , Ninguna garanta expresa o implcita , Bob Blick 18 de febrero 2002 ; -------Lista p = 16C84 radix hex incluir "p16c84.inc" ; -------, Recuerda que para definir las opciones tiempos de detonacin: OSC = xtal regular, WDT = ON , Todos ellos basados en tiempos de cristal 4 MHz ; -------; Son stas equivale ya en el archivo de inclusin? Algn da voy a mirar. ; -------w equ 0 f equ 1 ; -------, Inicio de RAM disponible. ; -------cblock 0x0C safe_w, no realmente temporal, utilizado por svc interrupcin safe_s, no es realmente temporales, utilizado por svc interrupcin period_count; incrementa cada interrupcin period_dup, copia de seguridad period_count de interrupcin period_calc; perodo estable despus calc histresis. banderas, b2 = int b1 = minutos b4 = orilla dot_index; qu columna est siendo visualizado digit_index, el dgito se visualiza hora, en formato de presentacin, no hexagonal (01-12) minutos, 00 a 59 bigtick_dbl; incrementa cada interrupcin bigtick_hi bigtick_lo teclas, clave y valor cero, el valor cero garrapatas, que se utiliza por el retraso endc ; --------

, Inicio de ROM ; -------org 0x00; Inicio de espacio de cdigo Ir a Inicio ; -------, Rutina de interrupcin ; -------org 0x04; vector de interrupcin Intsvc movwf safe_w; salvar w swapf STATUS, w, estado de swap, w movwf safe_s, estado de almacenamiento (intercambio nibble, recuerda) ; -------; Hecho ahorro, ahora empezar a trabajar , Incrementa el contador de tiempo ; -------incf period_count, f btfsc STATUS, Z; ajuste a cero significa desbordamiento DECF period_count, f , Temporizador watchdog clara para garantizar el inicio CLRWDT , 234.375 interrumpe cada minuto. Incrementar el bigtick cada vez. incf bigtick_lo, f btfsc STATUS, Z incf bigtick_hi, f btfsc STATUS, Z INCFSZ bigtick_dbl, f Ir Bigtick_out ; -------, Aqu? bigtick ha lanzado a cero y ha pasado un minuto. ; Recargar bigtick y establecer un indicador para el contador principal ; -------movlw 0xFC; 234.375 = 0x039387 movwf bigtick_dbl; 0 - 0x039387 = 0xFC6C79 movlw 0x6C movwf bigtick_hi movlw 0x79 movwf bigtick_lo banderas bsf, 1; notificar Keep_time Bigtick_out ; -------, Hecho de trabajo, iniciar la restauracin ; -------swapf safe_s, w; Obtener estado, aperitivos reswap movwf STATUS; status restaurar swapf safe_w, f; nibbles intercambio en preparacin swapf safe_w, w, para la restauracin de intercambio de w BCF INTCON, 2; indicador de interrupcin clara antes del regreso retfie; regreso de interrupcin ; -------; CARCTER Bsqueda en una tabla ; Ignorar bits alta. set = LED apagado, claro LED encendido =, LED bit 0 = LED inferior, bit 6 = top ; -------Char_tbl addwf PCL, f

dt dt dt dt dt dt dt dt dt dt dt

0xC1, 0xFF, 0xDE, 0xBD, 0xF3, 0x8D, 0xE1, 0xBF, 0xC9, 0xCF, 0xFF,

0xBE, 0xDE, 0xBC, 0xBE, 0xEB, 0xAE, 0xD6, 0xb8, 0xB6, 0xB6, 0xC9,

0xBE, 0x80, 0xBA, 0xAE, 0xDB, 0xAE, 0xB6, 0xB7, 0xB6, 0xB6, 0xC9,

0xBE, 0xFE, 0xB6, 0x96, 0x80, 0xAE, 0xB6, 0xAF, 0xB6, 0xB5, 0xFF,

0xC1, 0xFF; 0xCE, 0xB9, 0xFB, 0xB1, 0xF9, 0x9F, 0xC9, 0xC3, 0xFF;

"O" "1" "2" "3" "4" "5" "6" "7" "8" "9" ":"

Char_tbl_end ; -------; SUBRUTINAS COMIENZO AQU ; -------; Claras partes importantes de RAM ; -------Ram_init movlw 0x07 teclas movwf movlw 0x12; por qu los relojes siempre comienzan movwf horas, a las 12:00? minutos CLRF clrf dot_index clrf digit_index movlw 0xFC movwf bigtick_dbl retlw 0 ; -------, Pin no utilizados que yo pongo como salidas ; -------Port_init 0x00 movlw; todas las salidas, b7 = no utilizado tris PORTB, en el puerto b adjunta a LEDs movlw b'00010111 '; puerto tiene un 5 pines. Necesito 4 entradas ; B0 = minutos = 10 minutos b1, b2 = horas ; = B3, b4 = ndice de rotacin no utilizada tris PORTA, en el puerto de retlw 0 ; -------; Reciben interrupciones timer basados ir ; -------Timer_init BCF INTCON, 2; claro indicador int TMR0 bsf INTCON, 7; permitir interrupciones globales bsf INTCON, 5; permiten TMR0 int clrf TMR0; temporizador clara CLRWDT, por qu es esto necesario? just do it .. movlw b'11011000 '; estableci temporizador. prescaler (bit 3) anulado opcin: enviar a la opcin w. generar advertencia. clrf TMR0; inicio del temporizador retlw 0 ; -------, Prueba de ndice de rotacin y el perodo de tienda en period_dup ; -------Check_index movf PORTA, w, obtener el estado de un puerto

banderas xorwf, w; Comparar con estado guardado andlw b'00010000 '; slo est interesado en el bit 4 btfsc STATUS, Z; prueba de borde retlw 0; no una ventaja, igual que la ltima banderas xorwf, f; ahorrar para la prxima vez banderas BTFSC, 4; prueba de bajada retlw 0; debe haber sido un flanco ascendente movf period_count, w, hacer una copia de trabajo movwf period_dup, llamado perodo dup clrf period_count, un nuevo comienzo para el prximo giro clrf digit_index, establece en primer dgito clrf dot_index, primera columna , Calcular un periodo que no tramado o jitter , El perodo no se cambiar a menos nuevo perodo es realmente diferente movf period_calc, w subwf period_dup, w, encontrar diferencias btfss STATUS, C; lleve indicador establecido no significa pedir prestado Ir Calc_period_neg, debe ser otra forma sublw 2, desviacin permitida = 3 btfss STATUS, C; prestado no se saltar incf period_calc; nuevo valor mucho ms grande que calc retlw 0 Calc_period_neg addlw 2, desviacin permitida = 3 btfss STATUS, C; carry saltar DECF period_calc; no aplazamiento significa que debe ser cambiado retlw 0 ; -------, Cambiar el patrn de LED basado en estado de digit_index y dot_index ; -------Display_now movlw 0x05 xorwf dot_index, w, prueba de final de dgitos movlw 0xFF; patrn para la columna en blanco btfsc STATUS, Z Ir D_lookup_3, necesita un espacio en blanco BCF STATUS, C; carry claro antes de girar un rlf digit_index, w, el doble del ndice, ya que cada addwf PCL, f; lleva dos instrucciones D_10hr swapf horas, w Ir D_lookup, qu gran oleada de energa D_1hr MOVF horas, w, me siento al modificar D_lookup Goto, el contador de programa D_colon movlw 0x0A Ir D_lookup D_10min minutos swapf, w Ir D_lookup D_1min minutos MOVF, w Ir D_lookup D_nothing retlw 0 D_lookup andlw b'00001111 '; quitarse hi trozos movwf cero, multiplique esto por 5 para bsqueda addwf scratch, f, la posicin base de la mesa addwf scratch, f, es la trampa? addwf scratch, f, yo no lo creo. addwf scratch, f, yo creo que es la conservacin de la energa!

ESTADO btfss, Z, prueba de cero Ir D_lookup_2, no un cero movf digit_index, f, esto es slo para poner a prueba / puesta bandera movlw 0xFF, lo que hace un patrn LED blanco btfsc STATUS, Z, prueba si es 10 hrs dgitos Ir D_lookup_3, es un cero a la izquierda D_lookup_2 movf dot_index, w; obtener la columna addwf cero, w, agregarlo a la base de cifras llame Char_tbl, obtener el patrn de puntos para esta columna D_lookup_3 movwf PORTB; enviarlo a los LED BCF STATUS, C; bandera de acarreo claro antes de girar rrf period_calc, w; perodo / 2 usado para el reloj de puntos addlw 0xF4, restar 12 para compensar la sobrecarga llame Delay, ancho de dgitos con este retraso incf dot_index, f; incremento a la siguiente columna movlw 0x06, 6 columnas es un espacio ms dgitos xorwf dot_index, w; prxima prueba dgitos btfss STATUS, Z retlw 0, no un nuevo dgito clrf dot_index; nuevo tiempo dgitos incf digit_index, f RETLW 0; Display_now hecho. ; -------; Una rutina de retardo corto ; -------Retraso movwf garrapata Delay_loop decfsz garrapata, f Ir Delay_loop; w no est daado, por lo que demora puede volver, se recordar sin recargar ; -------, Prueba de pulsacin y hora de la llamada si es necesario ajustar ; -------Check_keys movf PORTA, w; obtener port "a" teclas xorwf, w; comparar con las anteriores andlw b'00000111 '; slo se preocupan por los pernos del botn btfsc STATUS, Z; ZERO SET = sin botones retlw 0; regreso teclas xorwf, f; store valor de la clave movlw 0x64; un tiempo bastante largo retraso movwf cero; evitar rebotes claves Key_delay movlw 0xFF llame Retraso decfsz cero Ir Key_delay teclas BTFSS, 2, botn de prueba "minutos" Ir Inc_mins teclas BTFSS, 1, botn de prueba "decenas" Ir Inc_tens teclas BTFSS, 0, botn de prueba "horas" Ir Inc_hours retlw 0; debe ser un fallo. s, claro! ; -------; Incrementar diez minutos

; -------Inc_tens movlw 0x0A movwf cero, cero tiene diez Inc_tens_loop llamada Inc_mins decfsz cero Ir Inc_tens_loop; un minuto aadido retlw 0 ; -------; Incrementar una hora ; -------Inc_hours movlw 0x12 xorwf horas, w btfsc STATUS, Z Ir Inc_hours_12 movlw 0x07; esta parte se hace un poco descuidado hora ADDWF, w movlw 0x07 btfss STATUS, DC movlw 1 hora ADDWF, f retlw 0 Inc_hours_12 movlw 0x01 movwf horas retlw 0 ; -------, Incrementar el tiempo basado en banderas, 1 que fue enviado por la rutina de interrupcin ; Inc_mins bucle tambin utilizado por la rutina de puesta en hora ; -------Banderas BTFSS Keep_time, 1 minuto, el indicador retlw 0; esta vez no banderas BCF, 1, desactive la bandera minutos Inc_mins movlw 0x07, el tiempo incrementando inicio minutos ADDWF, w; suman 7 minutos w btfsc STATUS, DC, hizo aadiendo 7 carry causa dgitos? Sixty_mins Ir y luego prueba de un cambio de hora incf minutos, aadir otro modo 1 for real retlw 0 y volver Sixty_mins minutos movwf; guardar los minutos movlw 0x60; prueba de 60 minutos xorwf, w, son minutos a 60? btfss STATUS, Z retlw 0, no? volver CLRF minutos, de lo contrario cero minutos Inc_hours Ir y hora de incremento ; -------; Fin de subrutinas ; Programa comienza aqu ; -------Iniciar llame Ram_init; Establezca las variables para valores agradables llame Port_init, establecer direcciones de puerto llame Timer_init, empieza interrupcin basada temporizador ; -------; Hecho inicializacin, iniciar el bucle sin fin. ; -------; Crculo, comenzar la gran bucle

; ; -------; Detectar flanco descendente en PORTA, 4 para determinar el ndice de rotacin , Calcular el perodo de rotacin y guardar en period_dup ; Comparar con perodo de trabajo (period_calc) y ajuste si forma diferente ; -------llame Check_index ; -------, Comprobar el estado de visualizacin y cambiar si es necesario ; -------llame Display_now ; -------, Echa un teclado y ajustar el tiempo de ; -------llame Check_keys ; -------; Comprobar el tiempo de la bandera y el incremento minutos si ha pasado un minuto ; -------llame Keep_time ; -------, Seores, eso es un reloj, mantenerlo rodando ; -------Ir Circle, que escuch al hombre, ponerse en marcha! final ; -------, Al final del archivo

Anda mungkin juga menyukai