PIC 16F84A Display Data Interface problema, por favor ayuda!

D

desmop

Guest
Hola,

Este es mi primer post en este foro, así que ten paciencia conmigo.Estoy trabajando en la escritura de código de la Asamblea de R / C microturbina tacómetro.Soy muy nuevo en este modo, realmente podría utilizar algo de ayuda.Estoy usando el chip microcontrolador PIC 16F84A, compling el idioma con MPLAB IDE v 7.30 y montaje de los datos con Mplasm.Estoy teniendo un problema de visualizar más datos sobre mi hijo de 8 x 2 LCD que puede mostrar sólo 5 dígitos más la etiqueta "RPM".Sólo los 3 primeros dígitos de los datos se llenaron los dos últimos son impresos ceros.La forma en que he escrito el programa es que muestra en 100 RPM's.Hay en la segunda línea de la pantalla un número slectable de hojas.Quiero ser capaz de mostrar más de 99.900 revoluciones por minuto, pero yo lo puedo entender el método correcto para hacerlo.Sigo dando vueltas en círculos y que necesite ayuda de los que tienen la experiencia.He adjuntado el archivo ASM para la evaluación y sugerencias.Gracias por adelantado!

 
Hola,

Proyecto interesante, pero no puedo ver ningún archivo adjunto: /Cita:

Sólo los 3 primeros dígitos de los datos se llenaron los dos últimos son impresos ceros.
 
Nuevo código para el PIC 16F84A ..... Display Data Interface problema

LIST P = 16F84A, R = HEX; Pistas 16F84A a 4 MHz,
; INCLUDE "P16F84A.inc"
; LCD tacómetro para R / C MODEL turbina del motor
, Desmond, P
;
; 16F84A Pin Out
;
; Pin 1: RA2 Pin 10: RB4
; Pin 2: RA3 Pin 11: RB5
; Pin 3: RA4/T0CKI Pin 12: RB6
; Pin 4: MCLR Pin 13: RB7
, Pin 5: VSS 5 V Pin 14: VDD 5 V
; Pin 6: RB0/INT Pin 15: OSC2/CLKOUT
; Pin 7: RB1 N / A Pin 16: OSC1/CLKIN
; Pin 8: RB2 Pin 17: RA0
; Pin 9: RB3 Pin 18: RA1
;
, Version 3.25: 05/11/2006 ACTUALIZACIÓN PARA KJ66
;
SISTEMA ;------- ---------------------
__CONFIG H'3FF1 '
;------- DEFINE RAM ------------
TMR0 EQU 1; Timer 0
PC EQU 2; Contador de Programa
STATUS EQU 3
FSR EQU 4; de amortiguamiento de INDIRECTOS ADDR
PORTA EQU 5
PORTB EQU 6
EEDATA EQU 8; EEPROM DE DATOS
EEADR EQU 9; EEPROM ADDR
PCLATH EQU h'a '
INTCON EQU H'B '; control de interrupción
OPTIONF EQU 1; 0x81
TRISA EQU 5; 0x85
TRISB EQU 6; 0X86
EECON1 EQU 8; 0x88 IS EEPROM Control1
EECON2 EQU 9; 0x89 IS EEPROM CONTROL2

;------- DEFINE BIT -------------
;
C EQU 0
W EQU 0; d VALOR PARA INCF ......
F EQU 1; d VALOR
OFF EQU 0; indicador de bits 0,
RP0 EQU 5; ESTADO BIT 5 y 6 = REGISTRO selección de banco
RP1 EQU 6
ENTRADA EQU 7; RB7 COMO Puerto de entrada
TOIF EQU 2; INTCON TMR0 OVERLOW INT FLAG
TOIE EQU 5; INTCON TOIF ENABLE
GIE EQU 7; INTCON GLOBAL INT ENABLE

;------- USUARIO -------------------------------------
REGISTROS ;------- ------
;
TCNT0 EQU H'C '; = (0.6SEC / INT * PRESCAL * RELOJ)
INTR0 EQU H'D ', después de INT, SAVE W VALOR
INTR1 EQU H'E ', después de INT, SAVE ESTADO
DD1 EQU H'F '; DATOS DE ENTRADA RPM
DD2 EQU H'10 '
DD3 EQU H'11 '
TEMP1 EQU H'12 ';
TEMP2 EQU H'13 '
Temp3 H'14 EQU '
SLOW_C EQU H'15 '; 100-200 - 1 INT_DST CADA
INT_C EQU H'16 '; 0-255 -1 CADA INT_DST
FLAG_REG EQU H'17 '
MODE_SEL H'18 EQU '
PWM_C EQU H'19 '
PUSH_C EQU H'1A '
RAND_HI EQU H'1B '
RAND_LO EQU H'1C '
TCNT EQU H'1D '

;------- BIT ----------------
F_ON EQU 0
F_UP EQU 1
F_TDST EQU 2
F_REC EQU 3
TACHO_SEL EQU 4
;
VARIABLES ;------- -----------
;
TMR EQU D'181 '; (PRESCALE 64 * 1US) * 75 = 4800 uS
TCNT_2 EQU D'125 '; 4.8mS * 125 = 600mS, sino que fijen algunos extraños CÓDIGO
TCNT_3 EQU D'84 ', estas dos * PRESCALE 1:64, A UN SEGUNDO 0,6 DURACIÓN
TCNT_4 EQU D'62 '
TCNT_5 EQU D'50 '
BDELAY EQU D'40 '
TMR1 EQU D'178 '; (PRESCALE 256 * 7

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

= 19968 uS

Rlimit EQU D'200 '; SERVO LÍMITE
LLIMIT EQU D'100 '

;------- LCD SOUTINE -------------------------
REGISTROS ;------- ---------
;
Address1 EQU H'41 '
Char1 EQU H'42 '
TEMP1_LCD EQU H'43 '
TEMP2_LCD EQU H'44 '
TEMP3_LCD EQU H'45 '
TEMP4_LCD EQU H'46 '
TABLE_INDEX EQU H'47 ';
;
;========== PROGRAMA PRINCIPAL =========
;
ORG 0
PAGESEL PRINCIPIO
Goto Start
;----------------------------------------
;
ORG 4; INTERRUPCIÓN BEGIN

IntB MOVWF INTR0, SAVE W
MOVF STATUS, W; SAVE STATUS
MOVWF INTR1
BCF STATUS, RP0, asegúrese SELECCIONAR BANK0
CHECK_TDST
BTFSC FLAG_REG, F_TDST; Si SET GOTO DST
GOTO INT_DST

;----------------------------------
;----- TACÓMETRO INTERRUPCIÓN -----------

INT_TACHO
MOVLW FMI, restaurar timer0
MOVWF TMR0;
DECFSZ TCNT0, F; PASE SI CERO
GOTO INTEND
RELOAD MOVF TCNT, W; RELOAD TCNT0
MOVWF TCNT0
;------------------------------------------------- --
DISP_RPM
MOVLW H'0 '
CONVOCATORIA DDRAM_ADDRESS
MOVLW B'00110000 '
IORWF DD1, 1
IORWF DD2, 1
IORWF DD3, 1
MOVFW DD1
CONVOCATORIA PRINT_CHAR
MOVFW DD2
CONVOCATORIA PRINT_CHAR
MOVFW DD3
CONVOCATORIA PRINT_CHAR
MOVLW '0 '
CONVOCATORIA PRINT_CHAR
MOVLW '0 '
CONVOCATORIA PRINT_CHAR
R MOVLW ''
CONVOCATORIA PRINT_CHAR
P MOVLW ''
CONVOCATORIA PRINT_CHAR
M MOVLW ''
CONVOCATORIA PRINT_CHAR
RESET_COUNT
CLRF DD1; Display Data
CLRF DD2
CLRF DD3HOJA ;------ MODE SELECT --------
BTFSS PORTA, 1; SELECT?
BSF FLAG_REG, TACHO_SEL
MOVLW FMI, restaurar timer0
MOVWF TMR0;
GOTO INTEND

;------ FIN DE TACHO INT ---------

;---------------------------------
INT_DST
MOVLW TMR1; 256 * 78 = 19.968 uS
MOVWF TMR0
MOVF PWM_C, W
MOVWF TEMP1
;-------------------------------------
BIN2BCD MOVWF DD3 1;
CLRF DD2 10;
CLRF DD1, 100

H1 MOVLW 0x64, 100
SUBWF DD3, F; SUSTRACCION DE NÚMERO 100
BTFSC STATUS, C; resultado negativo?
GOTO H2; NO?GOTO H2
GOTO H3, sí?GOTO H3 (100'S DDD3)
H2 INCF DD1, F; INCREMENTO DD1 REGISTRO
GOTO H1; Y ESPALDA LOOP para otra prueba
H3 MOVLW 0x64, 100
ADDWF DD3, F; añadir 100 VOLVER AL NÚMERO

T1 MOVLW 0x0A 10;
SUBWF DD3, F; restar 10 de NÚMERO
BTFSC STATUS, C; resultado negativo?
GOTO T2, NO?GOTO T2
GOTO T3, sí?GOTO T3 (10'S DDD3)
T2 INCF DD2, F; REGISTRO DD2 INCREMENTO
GOTO T1; Y ESPALDA LOOP para otra prueba
T3 MOVLW 0x0A 10;
ADDWF DD3, F; Añada 10 VOLVER AL NÚMERO
;------------------------------------------------- --
MOVLW H'40 '
CONVOCATORIA DDRAM_ADDRESS
MOVLW B'00110000 '
IORWF DD1, 1
IORWF DD2, 1
IORWF DD3, 1
MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVFW DD1
CONVOCATORIA PRINT_CHAR
MOVFW DD2
CONVOCATORIA PRINT_CHAR
MOVFW DD3
CONVOCATORIA PRINT_CHAR
MOVLW '0 '
CONVOCATORIA PRINT_CHAR
MOVLW ''
CONVOCATORIA PRINT_CHAR
U MOVLW ''
CONVOCATORIA PRINT_CHAR
S MOVLW ''
CONVOCATORIA PRINT_CHAR
BTFSC FLAG_REG, F_REC
GOTO INTEND
BSF PORTA, 3
INT_DST1; LOOP 10 uS
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ TEMP1, F
GOTO INT_DST1; fin del ciclo
BCF PORTA, 3
DECF INT_C, F; INT_COUNTER AUMENTO

;-------------------------------------
INTEND
MOVF INTR1, W; restablecer la condición de
MOVWF STATUS
MOVF INTR0, W; RESTAURAR W
BCF INTCON, TOIF; BANDERA DE REAJUSTE INT T0
Retfie
;
;
;-------------------------------------------------
;============================================
; LCD SOUTINE

;================================================= =============
PRINT_DATA
BSF PORTB, 2; RS = 1, los datos
MOVWF Address1
BSF Dirección 1, 2
MOVF Address1, 0
MOVWF PORTB
BSF PORTB, 3
NOP
BCF PORTB, 3
LOOP_S CALL, 100 uS
VOLVER

PRINT_CONT
MOVWF PORTBBSF PORTB,3 BCF PORTB, 3
LOOP_S CALL, 100 uS
VOLVER

CLEAR_DISPLAY
MOVLW B'00000000 '; 0
CONVOCATORIA PRINT_CONT
MOVLW B'00010000 '; 1 Borrar
CONVOCATORIA PRINT_CONT
MOVLW 1
CONVOCATORIA LOOP_L; 10ms
VOLVER

DDRAM_ADDRESS
MOVWF Address1
BSF Address1, 7
MOVF Address1, 0
ANDLW B'11110000 ';
CONVOCATORIA PRINT_CONT
SWAPF Address1, W; MITADES SWAP F
ANDLW B'11110000 ';
CONVOCATORIA PRINT_CONT
VOLVER

PRINT_CHAR
MOVWF char1
ANDLW B'11110000 ';
CONVOCATORIA PRINT_DATA
SWAPF char1, W; MITADES SWAP F
ANDLW B'11110000 '; ENVIADO BAJA 4 bits
CONVOCATORIA PRINT_DATA
VOLVER

LOOP_S; 100uS LOOP
MOVLW D'33 '
MOVWF TEMP4_LCD
LOOP_S1
DECFSZ TEMP4_LCD, 1;
GOTO LOOP_S1
VOLVER

LOOP_L; LOOP 10 mS
MOVWF TEMP1_LCD
LOOP_L1
MOVLW D'10 ', 10 mS
MOVWF TEMP2_LCD
LOOP_L2
MOVLW D'249 '; (249 * 4) 5 = 1001
MOVWF TEMP3_LCD
LOOP_L3
NOP
DECFSZ TEMP3_LCD, 1
GOTO LOOP_L3
DECFSZ TEMP2_LCD, 1
GOTO LOOP_L2
DECFSZ TEMP1_LCD, 1
GOTO LOOP_L1
VOLVER

DISP_MESSAGE
TABLE_INDEX MOVWF; W -> índice, el MENSAJE DE COMENZAR
CONVOCATORIA Message1
ANDLW 0FFH
SKPNZ, si el retorno CUADRO 0, FIN DE LA SECCIÓN MENSAJE
VOLVER
CONVOCATORIA PRINT_CHAR; DOSPLAY
TABLE_INDEX INCF, 0
GOTO DISP_MESSAGE
;================================================= ===
MODE_ADDRESS

ADDWF PC, F
RETLW 0
RETLW 0
RETLW D'9 '
RETLW D'18 '
RETLW D'27 '

Message1

ADDWF PC, F
T RETLW ''
RETLW 'A'
C RETLW ''
H RETLW ''
O RETLW ''
RETLW ''
RETLW ''
RETLW ''
RETLW 0
S RETLW "9;
E RETLW ''
R RETLW ''
V RETLW ''
O RETLW ''
RETLW ''
T RETLW ''
RETLW 'x'
RETLW 0
S RETLW '' 18;
P RETLW ''
E RETLW ''
E RETLW ''
RETLW 'D'
RETLW ''
T RETLW ''
RETLW 'x'
RETLW 0
R RETLW '; 27
E RETLW ''
C RETLW ''
E RETLW ''
I RETLW ''
V RETLW ''
E RETLW ''
R RETLW ''
RETLW 0

NOP 36;;=======================================
;---------- BEGIN PROGRAMA -----------
;----------------------------------------
;

INICIO
BSF STATUS, RP0; fijó en 3,5 BANK1 ENABLE
MOVLW B'00000001 '
MOVWF TRISB; SET RB 1-7 SALIDA, 0 INPUT
MOVLW B'00000111 '
MOVWF TRISA; RA0 SET-INTPUT RA2, RA3, RA4 SALIDA
BCF STATUS, RP0; permitir BANK0
BCF PORTA, 3; OUT PWM
BSF PORTA, 4; OUT 5 V OFF
CLRF PORTB
BCF INTCON, GIE
CLRF FLAG_REG
MOVLW D'150 '
MOVWF PWM_C

INIT_LCD
MOVLW 5; Encendido con retraso 50mS
CONVOCATORIA LOOP_L
SET_4BIT_MOD; SET LCD en 4 BIT MODELO
MOVLW B'00110000 '3;
CONVOCATORIA PRINT_CONT
MOVLW 1
CONVOCATORIA LOOP_L; 10ms
MOVLW B'00110000 '3;
CONVOCATORIA PRINT_CONT
MOVLW B'00110000 '3;
CONVOCATORIA PRINT_CONT
MOVLW B'00100000 '; 2, 4BIT MODE
CONVOCATORIA PRINT_CONT
MOVLW B'00100000 '; 2
CONVOCATORIA PRINT_CONT
MOVLW B'10000000 '; 8 4bits, 2 líneas, FONT 0
CONVOCATORIA PRINT_CONT

INIT_DISPLAY
MOVLW B'00000000 '; O
CONVOCATORIA PRINT_CONT
MOVLW B'11000000 '; SALA DE C, sin cursor, sin parpadear
CONVOCATORIA PRINT_CONT
CONVOCATORIA CLEAR_DISPLAY; Borrar MostrarMOVLW ''
CONVOCATORIA PRINT_CHAR
K MOVLW ''
CONVOCATORIA PRINT_CHAR
J MOVLW '; DISPLAY PRIMERA SECCIÓN MESSAGE
CONVOCATORIA PRINT_CHAR
MOVLW '-'
CONVOCATORIA PRINT_CHAR
MOVLW '6 '
CONVOCATORIA PRINT_CHAR
MOVLW '6 '
CONVOCATORIA PRINT_CHAR
MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW ''
CONVOCATORIA PRINT_CHARMOVLW H'40 '
CONVOCATORIA DDRAM_ADDRESS
D MOVLW ''
CONVOCATORIA PRINT_CHAR
S MOVLW ''
CONVOCATORIA PRINT_CHAR
T MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW ''
CONVOCATORIA PRINT_CHAR
V MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW "3"
CONVOCATORIA PRINT_CHAR
MOVLW "."
CONVOCATORIA PRINT_CHAR
MOVLW "2"
CONVOCATORIA PRINT_CHAR

MOVLW D'150 '
CONVOCATORIA LOOP_L; DEMORA 3,0 SEGUNDO

CLRF MODE_SEL
INCF MODE_SEL, F
;------------------------------------------
MMODE_00
MOVLW H'40 '
CONVOCATORIA DDRAM_ADDRESS
MOVFW MODE_SEL
CONVOCATORIA MODE_ADDRESS; obtener el modo nombre comienza
CALL DISP_MESSAGE; DISPLAY MODO DE NOMBRE
MOVLW D'50 '
CONVOCATORIA LOOP_L; 1,0 CAMBIO segundo modo de
BTFSS PORTA, 1
GOTO MMODE_01; PUSH, próximo modo de
BTFSS PORTA, 0
GOTO MMODE_02; PUSH SELECT,

GOTO MMODE_00
MMODE_01
INCF MODE_SEL, F
MOVLW 5; MODE_SEL 1-4 SÓLO
SUBWF MODE_SEL, W
SKPZ
GOTO MMODE_00
MOVLW 1
MOVWF MODE_SEL
GOTO MMODE_00
MMODE_02

;------- SOBRE MODE_SEL GOTO ----------
MOVLW 1
SUBWF MODE_SEL, W
SKPNZ
Goto Main, 1 TACHO
MOVLW 2
SUBWF MODE_SEL, W
SKPNZ
GOTO DST_MAIN, 2 DST
MOVLW 3
SUBWF MODE_SEL, W
SKPNZ
GOTO SCT_MAIN, 3 SCT
MOVLW 4
SUBWF MODE_SEL, W
SKPNZ
GOTO RECT_MAIN, 4 RES
;------------------------------------

PRINCIPAL
BSF PORTA, 4; OUT 5 V OFF
CONVOCATORIA CLEAR_DISPLAY; Borrar Mostrar
MOVLW 0
CONVOCATORIA DDRAM_ADDRESS
MOVLW 1
CONVOCATORIA MODE_ADDRESS; obtener el modo nombre comienza
CALL DISP_MESSAGE; DISPLAY MODO DE NOMBRE

BSF STATUS, RP0; fijó en 3,5 BANK1 ENABLE
MOVLW B'10000101 '
MOVWF OPTIONF; INTERNAC RELOJES, TRM0, 1:64
BCF STATUS, RP0; permitir BANK0
CLRF DD1; Display Data
CLRF DD2
CLRF DD3
MOVLW 1; DEFAULT 2 hojas
MOVWF MODE_SEL
GOTO T_SEL
MAIN01
MOVLW TMR, 75
MOVWF TMR0
MOVLW TCNT; DEPENDEN DE HOJAS DE
MOVWF TCNT0
BCF INTCON, TOIF
BSF INTCON, TOIE
BSF INTCON, GIE; permitir INT
;----------------------------------
Main1
BTFSC FLAG_REG, TACHO_SEL
GOTO T_SEL
BTFSS PORTA, 2
Goto Start
BTFSC PORTA, 0; entrada de IF = 0, PASE
GOTO Main1
Main2
BTFSC FLAG_REG, TACHO_SEL
GOTO T_SEL
BTFSS PORTA, 2
Goto Start
BTFSS PORTB, 0; entrada de IF = 1, PASE
GOTO Main2
Main3 INCF DD3, F
MOVLW H'0A '
SUBWF DD3, W
SKPZ; DIGITAL 1 = A, deberá AJUST
GOTO Main1
CLRF DD3
INCF DD2, F
MOVLW H'0A '
SUBWF DD2, W
SKPZ; DIGITAL 1 = A, deberá AJUST
GOTO Main1
CLRF DD2
INCF DD1, F; DIGITAL 3 NO> 9, así que no
GOTO Main1

;------------------------------------
;------ TACHO MODE SELECT -----------
T_SEL
FBC FLAG_REG, TACHO_SEL
BCF INTCON, GIE
INCF MODE_SEL, F
MOVLW 6; MODE_SEL 2-5 SÓLO
SUBWF MODE_SEL, W
SKPZ
GOTO T_SEL1
MOVLW 2
MOVWF MODE_SEL
T_SEL1
MOVLW H'40 '
CONVOCATORIA DDRAM_ADDRESS
MOVLW H'30 ", convertir a ASCII HEX
ADDWF MODE_SEL, W, convertir HEX a ASCII
CONVOCATORIA PRINT_CHAR
MOVLW ''
CONVOCATORIA PRINT_CHAR
B MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW 's'
CONVOCATORIA PRINT_CHAR

;------- SOBRE MODE_SEL GOTO ----------
MOVLW 2
SUBWF MODE_SEL, W
SKPNZ
GOTO TMODE_2; 2 hojas
MOVLW 3
SUBWF MODE_SEL, W
SKPNZ
GOTO TMODE_3 3;
MOVLW 4
SUBWF MODE_SEL, W
SKPNZ
GOTO TMODE_4 4;
;------------------------------------
TMODE_5 5;
MOVLW TCNT_5
MOVWF TCNT
GOTO T_SEL_5
TMODE_4
MOVLW TCNT_4
MOVWF TCNT
GOTO T_SEL_5
TMODE_3
MOVLW TCNT_3
MOVWF TCNT
GOTO T_SEL_5
TMODE_2
MOVLW TCNT_2
MOVWF TCNT
GOTO T_SEL_5
T_SEL_5
MOVLW D'50 '; 0,01 segundos * 50
CONVOCATORIA LOOP_L
BTFSS PORTA, 1
GOTO T_SEL; el cambio de modo
GOTO MAIN01

;------ FIN DE TACÓMETRO --------------
;================================================= ===
DST_MAIN
BCF PORTA, 4; OUT 5 V ENCENDER
BSF FLAG_REG, F_TDST; Si SET GOTO DST
CONVOCATORIA CLEAR_DISPLAY; Borrar Mostrar
MOVLW 0
CONVOCATORIA DDRAM_ADDRESS

;------- SETUP_INTERRUPT -------

BSF STATUS, RP0; fijó en 3,5 BANK1 ENABLE
MOVLW B'10000111 '
MOVWF OPTIONF; INTERNAC RELOJES, TRM0, 1:256
BCF STATUS, RP0; permitir BANK0
MOVLW TMR1; 256 * 78 = 19.968 uS
MOVWF TMR0
BCF INTCON, TOIF
BSF INTCON, TOIE
BSF INTCON, GIE; permitir INTCLRF MODE_SEL
;-----------------------------------------------
MODE_0
INCF MODE_SEL, F
MOVLW 7; MODE_SEL 1-5 SÓLO
SUBWF MODE_SEL, W
SKPZ
GOTO MODE_01
MOVLW 1
MOVWF MODE_SEL

;------- SOBRE MODE_SEL GOTO ----------
MODE_01
MOVLW 1
SUBWF MODE_SEL, W
SKPNZ
GOTO MODE_1; MANUAL
MOVLW 2
SUBWF MODE_SEL, W
SKPNZ
GOTO MODE_3; FSAT
MOVLW 3
SUBWF MODE_SEL, W
SKPNZ
GOTO MODE_4; MEDIO
MOVLW 4
SUBWF MODE_SEL, W
SKPNZ
GOTO MODE_2; SLOW
MOVLW 5
SUBWF MODE_SEL, W
SKPNZ
GOTO MODE_5; RANDOM
GOTO MODE_6; ESCAPE
;-------------------------------------------------
MODE_1
MOVLW H'0 '
CONVOCATORIA DDRAM_ADDRESS
M MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW 'a'
CONVOCATORIA PRINT_CHAR
N MOVLW ''
CONVOCATORIA PRINT_CHAR
U MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW 'a'
CONVOCATORIA PRINT_CHAR
L MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW BDELAY
CONVOCATORIA LOOP_L
MODE_10
MOVLW D'150 '
MOVWF PWM_C
MODE_11
BTFSS PORTA, 0
GOTO INC_B
BTFSS PORTA, 2
GOTO DEC_B
BTFSS PORTA, 1
GOTO CENT_B
CLRF PUSH_C
GOTO MODE_11
INC_B MOVLW rlimit
SUBWF PWM_C, W
SKPNZ
GOTO MODE_11; = rlimit, no hacer nada
INCF PWM_C, F
MOVLW D'5 '; CONTINUAR PASO 5, de la aceleración
SUBWF PUSH_C, W
SKPNZ
GOTO INC_B1;
MOVLW D'20 '; 0,2 segundos
CALL LOOP_L; CALL 0,1 segundo circuito
INCF PUSH_C, F
GOTO MODE_11
INC_B1; FAST INC
MOVLW D'6 '
CONVOCATORIA LOOP_L; 0,06 segundos
GOTO MODE_11
DEC_B
MOVLW LLIMIT
SUBWF PWM_C, W
SKPNZ
GOTO MODE_11; = LLIMIT, no hacer nada
DECF PWM_C, F
MOVLW D'5 '; CONTINUAR PASO 5, de la aceleración
SUBWF PUSH_C, W
SKPNZ
GOTO DEC_B1;
MOVLW D'20 ';
CALL LOOP_L; CALL 0,1 segundo circuito
INCF PUSH_C, F
GOTO MODE_11
DEC_B1; FAST diciembre
MOVLW D'6 '
CONVOCATORIA LOOP_L; 0,06 segundos
GOTO MODE_11
CENT_B
MOVLW BDELAY; 0,01 segundos * 40
CONVOCATORIA LOOP_L
BTFSS PORTA, 1
GOTO MODE_0; el cambio de modo
GOTO MODE_10
;------------------------------------------------
MODE_2
MOVLW H'0 '
CONVOCATORIA DDRAM_ADDRESS
S MOVLW ''
CONVOCATORIA PRINT_CHAR
L MOVLW ''
CONVOCATORIA PRINT_CHAR
O MOVLW ''
CONVOCATORIA PRINT_CHAR
W MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW ''
CONVOCATORIA PRINT_CHAR
MODE_20; SLOW 10 SEGUNDOS
MOVLW D'150 '
MOVWF PWM_C
BSF FLAG_REG, F_UP
MODE_21
BTFSS PORTA, 0
GOTO INC_B2
BTFSS PORTA, 2
GOTO MODE_21
BTFSS PORTA, 1
GOTO CENT_B2
GOTO MODE_21
INC_B2
MOVLW 2; 2 VECES
MOVWF PUSH_C
MOVLW 5
MOVWF INT_C
INC_B21
MOVF INT_C, W; 5 * 100 * 20mS = 10 ª
SKPZ
GOTO INC_B21

MOVLW 5, 5 * 100 * 20mS = 10 ª
MOVWF INT_C
BTFSS FLAG_REG, F_UP; ARRIBA / ABAJO?
GOTO INC_B23; cuenta_regresiva
INC_B22
MOVLW rlimit; UP
SUBWF PWM_C, W
SKPNZ
GOTO INC_B24; TURN_DOWN
INCF PWM_C, F
BTFSS PORTA, 2; parar?
GOTO MODE_21
GOTO INC_B21
INC_B24; TURN_DOWN
FBC FLAG_REG, F_UP
INC_B23
MOVLW LLIMIT;
SUBWF PWM_C, W
SKPNZ
GOTO INC_B25; TURN_UP
DECF PWM_C, F
BTFSS PORTA, 2; parar?
GOTO MODE_21
GOTO INC_B21
INC_B25
BSF FLAG_REG, F_UP
DECF PUSH_C, F
SKPNZ
GOTO MODE_21
GOTO INC_B22

CENT_B2
MOVLW BDELAY; 0,01 segundos * 40
CONVOCATORIA LOOP_L
BTFSS PORTA, 1
GOTO MODE_0; el cambio de modo
GOTO MODE_20

;------------------------
MODE_3
MOVLW H'0 '
CONVOCATORIA DDRAM_ADDRESS
F MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW 'a'
CONVOCATORIA PRINT_CHAR
MOVLW 's'
CONVOCATORIA PRINT_CHAR
T MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW ''
CONVOCATORIA PRINT_CHAR; FAST 0,5 segundos
MODE_30
MOVLW D'150 '
MOVWF PWM_C
MODE_31
BTFSS PORTA, 0
GOTO INC_B3
BTFSS PORTA, 2
GOTO MODE_31
BTFSS PORTA, 1
GOTO CENT_B3
GOTO MODE_31
INC_B3
MOVLW 5
MOVWF PUSH_C
INC_B31
MOVLW rlimit
MOVWF PWM_C
BTFSS PORTA, 2
GOTO MODE_3
MOVLW D'45 '; 0.45SECOD 22 INTERRUPCIÓN
CALL LOOP_L; CALL 0,1 segundo circuito
MOVLW LLIMIT
MOVWF PWM_C
BTFSS PORTA, 2
GOTO MODE_3
MOVLW D'45 '
CONVOCATORIA LOOP_L
DECFSZ PUSH_C, F
GOTO INC_B31
GOTO MODE_3

CENT_B3
MOVLW BDELAY; 0,01 segundos * 40
CONVOCATORIA LOOP_L
BTFSS PORTA, 1
GOTO MODE_0; el cambio de modo
GOTO MODE_30

;------------------------
MODE_4; 2 SEGUNDA MITAD
MOVLW H'0 '
CONVOCATORIA DDRAM_ADDRESS
M MOVLW ''
CONVOCATORIA PRINT_CHAR
I MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW 'd'
CONVOCATORIA PRINT_CHAR
MOVLW 'd'
CONVOCATORIA PRINT_CHAR
L MOVLW ''
CONVOCATORIA PRINT_CHAR
E MOVLW ''
CONVOCATORIA PRINT_CHAR
MODE_40
MOVLW D'150 '
MOVWF PWM_C
BSF FLAG_REG, F_UP
MODE_41
BTFSS PORTA, 0
GOTO INC_B4
BTFSS PORTA, 2
GOTO MODE_41
BTFSS PORTA, 1
GOTO CENT_B4
GOTO MODE_41
INC_B4
MOVLW 5, 5 VECES
MOVWF PUSH_C
MOVLW 1
MOVWF INT_C
INC_B41
MOVF INT_C, W; 1 * 100 * 20mS = 2 SEGUNDA
SKPZ
GOTO INC_B41

MOVLW 1, 1 * 100 * 20mS = 2 SEGUNDA
MOVWF INT_C
BTFSS FLAG_REG, F_UP; ARRIBA / ABAJO?
GOTO INC_B43; cuenta_regresiva
INC_B42
MOVLW rlimit; UP
SUBWF PWM_C, W
SKPNZ
GOTO INC_B44; TURN_DOWN
INCF PWM_C, F
BTFSS PORTA, 2; parar?
GOTO MODE_41
GOTO INC_B41
INC_B44; TURN_DOWN
FBC FLAG_REG, F_UP
INC_B43
MOVLW LLIMIT;
SUBWF PWM_C, W
SKPNZ
GOTO INC_B45; TURN_UP
DECF PWM_C, F
BTFSS PORTA, 2; parar?
GOTO MODE_41
GOTO INC_B41
INC_B45
BSF FLAG_REG, F_UP
DECF PUSH_C, F
SKPNZ
GOTO MODE_41
GOTO INC_B42

CENT_B4
MOVLW BDELAY; 0,01 segundos * 40
CONVOCATORIA LOOP_L
BTFSS PORTA, 1
GOTO MODE_0; el cambio de modo
GOTO MODE_40
;------------------------------------------------- --------

MODE_5; azar
MOVLW H'0 '
CONVOCATORIA DDRAM_ADDRESS
R MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW 'a'
CONVOCATORIA PRINT_CHAR
N MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW 'd'
CONVOCATORIA PRINT_CHAR
O MOVLW ''
CONVOCATORIA PRINT_CHAR
M MOVLW ''
CONVOCATORIA PRINT_CHAR
MODE_50
MOVLW D'150 '
MOVWF PWM_C
MODE_51
DECFSZ RAND_LO, F; GENERADOR Semilla aleatoria
GOTO MODE_52
DECF RAND_LO, F, asegúrese NO ZERO
DECFSZ RAND_HI, F
GOTO MODE_52
DECF RAND_HI, F, asegúrese NO ZERO
MODE_52 BTFSS PORTA, 0
GOTO INC_B5
BTFSS PORTA, 2
GOTO MODE_51
BTFSS PORTA, 1
GOTO CENT_B5
GOTO MODE_51
INC_B5
MOVLW H'20 '; 20-30 RANDOM PRUEBA
MOVWF PUSH_C
INC_B51
MOVLW D'10 '; 10 pulsos por puesto
MOVWF INT_C
;---------------
RANDOM16
RLF RAND_HI, W
XORWF RAND_HI, W
RLF TEMP1, F
SWAPF RAND_HI, F
SWAPF RAND_LO, W
RLF TEMP1, F
XORWF RAND_HI, W
SWAPF RAND_HI, F
ANDLW 0x01
RLF RAND_LO, F
XORWF RAND_LO, F
RLF RAND_HI, F
;---------------------------------
MOVLW rlimit
SUBWF RAND_LO, W
SKPNC, F <W, C = 0
GOTO RANDOM16
MOVLW LLIMIT
SUBWF RAND_LO, W
SKPC; F> W, C = 1
GOTO RANDOM16
MOVF RAND_LO, W
MOVWF PWM_C
INC_B52
MOVF INT_C, W
SKPZ
GOTO INC_B52
BTFSS PORTA, 2; parar?
GOTO MODE_5
DECFSZ PUSH_C, F
GOTO INC_B51
GOTO MODE_51
CENT_B5
MOVLW BDELAY; 0,01 segundos * 40
CONVOCATORIA LOOP_L
BTFSS PORTA, 1
GOTO MODE_0; el cambio de modo
GOTO MODE_50

;---------------------------------
MODE_6; azar
MOVLW H'0 '
CONVOCATORIA DDRAM_ADDRESS
Q MOVLW ''
CONVOCATORIA PRINT_CHAR
U MOVLW ''
CONVOCATORIA PRINT_CHAR
I MOVLW ''
CONVOCATORIA PRINT_CHAR
T MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW ''
CONVOCATORIA PRINT_CHAR
MOVLW ''
CONVOCATORIA PRINT_CHAR

MODE_61
BTFSS PORTA, 0
Goto Start
BTFSC PORTA, 1
GOTO MODE_61

MOVLW BDELAY
CONVOCATORIA LOOP_L
BTFSS PORTA, 1
GOTO MODE_0
GOTO MODE_61
;------ FIN DE DST ---------------;----------------------------------
;----- VELOCIDAD TESTER --
SCT_MAIN
BSF PORTA, 4; OUT 5 V OFF
BSF FLAG_REG, F_TDST; Si SET GOTO DST
CONVOCATORIA CLEAR_DISPLAY; Borrar Mostrar
MOVLW 0
CONVOCATORIA DDRAM_ADDRESS
MOVFW MODE_SEL
CONVOCATORIA MODE_ADDRESS; obtener el modo nombre comienza
CALL DISP_MESSAGE; DISPLAY MODO DE NOMBRE
MOVLW BDELAY
CONVOCATORIA LOOP_L
;-----------------------------------------------

BSF STATUS, RP0; fijó en 3,5 BANK1 ENABLE
MOVLW B'10000111 '
MOVWF OPTIONF; INTERNAC RELOJES, TRM0, 1:256
BCF STATUS, RP0; permitir BANK0
MOVLW TMR1; 256 * 78 = 19.968 uS
MOVWF TMR0
BCF INTCON, TOIF
BSF INTCON, TOIE
BSF INTCON, GIE; permitir INT

;-------------------------------------------------
SCT_1
MOVLW D'100 '; MÍNIMOS
MOVWF PWM_C
SCT_11
BTFSS PORTA, 0
GOTO ISCT_B
BTFSS PORTA, 2
GOTO DSCT_B
BTFSS PORTA, 1
GOTO DCENT_B
CLRF PUSH_C
GOTO SCT_11
ISCT_B MOVLW rlimit
SUBWF PWM_C, W
SKPNZ
GOTO SCT_11; = rlimit, no hacer nada
INCF PWM_C, F
MOVLW D'5 '; CONTINUAR PASO 5, de la aceleración
SUBWF PUSH_C, W
SKPNZ
GOTO ISCT_B1;
MOVLW D'20 '; 0,2 segundos
CALL LOOP_L; CALL 0,1 segundo circuito
INCF PUSH_C, F
GOTO SCT_11
ISCT_B1; FAST INC
MOVLW D'6 '
CONVOCATORIA LOOP_L; 0,06 segundos
GOTO SCT_11
DSCT_B
MOVLW LLIMIT
SUBWF PWM_C, W
SKPNZ
GOTO SCT_11; = LLIMIT, no hacer nada
DECF PWM_C, F
MOVLW D'5 '; CONTINUAR PASO 5, de la aceleración
SUBWF PUSH_C, W
SKPNZ
GOTO DSCT_B1;
MOVLW D'20 ';
CALL LOOP_L; CALL 0,1 segundo circuito
INCF PUSH_C, F
GOTO SCT_11
DSCT_B1; FAST diciembre
MOVLW D'6 '
CONVOCATORIA LOOP_L; 0,06 segundos
GOTO SCT_11
DCENT_B
MOVLW BDELAY; 0,01 segundos * 40
CONVOCATORIA LOOP_L
BTFSS PORTA, 1
Goto Start, el cambio de modo
GOTO SCT_1; GOTO COMIENZO, 1000US

;------ FIN DE SCT -----------------
;================================================= ======
RECT_MAIN
BSF PORTA, 4; OUT 5 V OFF
BSF FLAG_REG, F_TDST
BSF FLAG_REG, F_REC
CONVOCATORIA CLEAR_DISPLAY; Borrar Mostrar
MOVLW 0
CONVOCATORIA DDRAM_ADDRESS
MOVFW MODE_SEL
CONVOCATORIA MODE_ADDRESS; obtener el modo nombre comienza
CALL DISP_MESSAGE; DISPLAY MODO DE NOMBRE

BSF STATUS, RP0;
MOVLW B'10000000 '
MOVWF OPTIONF; INTERNAC RELOJES, TRM0, 1:2
MOVLW B'00001111 '; RA SET, 3 INPUT
MOVWF TRISA;
BCF STATUS, RP0;
CLRF PWM_C
BSF INTCON, TOIE
BSF INTCON, GIE; permitir INT PARA MOSTRAR XXX uS
NOP
NOP
;--------------------------------
REC_0
BCF INTCON, TOIF
BCF INTCON, TOIE
BCF INTCON, GIE;

;------- PRINCIPIO DE MEDIDA -------------
REC_2
CLRF PWM_C
REC_3
BTFSS PORTA, 1
GOTO REC_B
BTFSS PORTA, 3
GOTO REC_3
REC_4
NOP; LOOP 10 uS
NOP
NOP
NOP
INCF PWM_C, F
SKPNZ
GOTO REC_ERROR, SI PWM_C> 255, ERROR
BTFSC PORTA, 3
GOTO REC_4
DECF PWM_C, F; CORRECTA 1.20 uS
GOTO REC_5
REC_ERROR, SI> 255 DISPLAY 255
MOVLW H'FF '
MOVWF PWM_C
REC_5
BSF INTCON, TOIE
BSF INTCON, GIE; permitir INT PARA MOSTRAR XXX uS
GOTO REC_0
REC_B
MOVLW BDELAY; 0,01 segundos * 40
CONVOCATORIA LOOP_L
BTFSS PORTA, 1
Goto Start; CHANGR MODO DE SCT MAUN
GOTO RECT_MAIN;-------------------------------------------------

FIN

 

Welcome to EDABoard.com

Sponsor

Back
Top