Autor Tema: URGENTE!! necesito unir dos partes de un programa.  (Leído 1988 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado axelLlobet

  • PIC10
  • *
  • Mensajes: 1
URGENTE!! necesito unir dos partes de un programa.
« en: 18 de Marzo de 2015, 13:10:08 »
hola muy buenas tarde, necesitaría una mano para poder unir dos programas ya que cuando lo hago no funciona correctamente.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: URGENTE!! necesito unir dos partes de un programa.
« Respuesta #1 en: 18 de Marzo de 2015, 15:45:55 »
  Por lo que veo, son dos programas distintos ya que cada archivo tiene su bloque de reset y de start.

  Hace mucho tiempo que no toco un programa en ASM, pero imagino que teniendo definido que es lo que quieres hacer, y el datasheet en mano (presuponiendo que cada uno de los programas funciona bien) no debería ser muy complicado.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: URGENTE!! necesito unir dos partes de un programa.
« Respuesta #2 en: 18 de Marzo de 2015, 18:36:53 »
Si no es complejo para nada.. uno trasmite una dato por UART cosa siempre y cuando exista algun cambio en PORTA

Y el otro cambia las salidas PORTA,3 y 4 + PORTB cada cierto tiempo.

El unico problema a solucionar para unirlos es:

- En uno el TRISA esta definido como 0x0F , es decir de PORTA,0 a 3 todas entradas, y en el otro el PORTA,3 es una salida
- El programa de transmitir, no tieen en cuenta que va a leer las salidas, asi que un cambio de las salidas haria que transmita cuando no debe, para eso se deberia agergar un AND al datos del PORTA antes de compararlos

Tomando eso en cuenta y decidiendo hacer que el TRISA sea 0x07, asi deberia quedar el programa:


Código: ASM
  1. list p=16f88, r=dec     ;especificaciones del micro
  2. #include <p16f88.inc>       ; inclusion de archivos y registros
  3.  
  4. __CONFIG _CONFIG1, _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _MCLR_OFF & _LVP_OFF & _INTRC_IO
  5.  
  6. cblock H'70'
  7.     d1
  8.     d2
  9.     d3
  10.     TEMP
  11.     tempa
  12.     endc
  13.  
  14. RST   code  0x00
  15.       goto  Start
  16.  
  17. Start
  18.       bsf       STATUS, RP0
  19.       movlw     b'00000111'
  20.       movwf     TRISA
  21.       clrf      TRISB
  22.       movlw     0x60
  23.       movwf     OSCCON
  24.       clrf      ANSEL
  25.       MOVLW     D'25'         ;  9600 BAUD @ 20 MHZ FOSC +0.16 ERR
  26.       MOVWF     SPBRG
  27.       MOVLW     B'00100100'    ; BRGH = 1
  28.       MOVWF     TXSTA           ; ENABLE ASYNC TRANSMISSION, SET BRGH
  29.       BANKSEL   RCSTA       ; BANK0
  30.       MOVLW     B'10010000'
  31.       MOVWF     RCSTA          ; ENABLE ASYNC RECEPTION
  32.       MOVF      RCREG,W
  33.       MOVF      RCREG,W
  34.       MOVF      RCREG,W        ; FLUSH RECEIVE BUFFER
  35.       clrf      PORTA
  36.       bsf   PORTA, 4
  37.       bsf   PORTA, 3
  38.       CLRF      TEMP
  39.       movlw     d'02'
  40.       movwf     tempa
  41.       goto      INICIO
  42.  
  43. SETTLE
  44.     DECFSZ  TEMP
  45.     GOTO    SETTLE
  46.  
  47. INICIO
  48.       movlw   b'1001111'
  49.       bcf     PORTA, 4
  50.       movwf   PORTB
  51.       call    Delay
  52.       bsf     PORTA, 4
  53.       movlw   b'0111111'
  54.       bcf     PORTA, 3
  55.       movwf   PORTB
  56.       call    Delay
  57.       bsf     PORTA, 3
  58.       movf    PORTA, W
  59.       andlw   0x00
  60.       subwf   tempa, W
  61.       btfsc   STATUS, Z
  62.       goto    INICIO
  63.       movf    PORTA, W
  64.       movwf   tempa
  65.       addlw   h'30'
  66.       call    transmitir
  67.       goto    INICIO
  68.  
  69. transmitir
  70.       NOP
  71.       BTFSS     PIR1,TXIF         ;XMIT BUFFER EMPTY?
  72.       GOTO      transmitir        ;NO, WAIT
  73.       MOVWF     TXREG
  74.       return
  75.  
  76. Delay
  77.             ;49993 cycles
  78.     movlw   0x0E
  79.     movwf   d1
  80.     movlw   0x28
  81.     movwf   d2
  82. Delay_0
  83.     decfsz  d1, f
  84.     goto    $+2
  85.     decfsz  d2, f
  86.     goto    Delay_0
  87.  
  88.             ;3 cycles
  89.     goto    $+1
  90.     nop
  91.  
  92.             ;4 cycles (including call)
  93.     return
  94.  
  95.     END

El programa que pase tiene 2 problemas:

- El UART solo va a enviar luego de que haga toda la animacion de los leds y puede que cambie las entradas y no envie nada, segun que tan grande sean las demoras
- Como todo en la vida no es color de rosa, le meti un error para que lo solucionaras, ya que era tan facil de unirlos algun laburo tenes que tener o no vas a aprender :)
« Última modificación: 18 de Marzo de 2015, 19:09:59 por KILLERJC »


 

anything