• Domingo 22 de Diciembre de 2024, 15:35

Autor Tema:  Pic16f88  (Leído 2671 veces)

thevy

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Pic16f88
« en: Miércoles 20 de Febrero de 2008, 17:42 »
0
Este programa supuestamente envia y recibe un voltaje,, pero me da un error en el config, y no se por que?

Código: Text
  1.  
  2.  
  3. ;------------------------------------------------------------
  4. ; Código assembler generado por Niple V5.2.1
  5. ; Proyecto: Voltimetro Digital
  6. ; Autor: ---
  7. ; Fecha: 07/02/2008
  8. ; PIC: 16F88
  9. ; Velocidad de reloj: 4 Mhz
  10. ; Descripcion: Medir un voltaje cada segundo y mostrar el resultado. enviarlo por el puerto serial
  11. ;------------------------------------------------------------
  12.  
  13.  
  14. LIST    P=PIC16F88
  15.  
  16.  
  17. _XT_OSC             equ  0x3FFD
  18. _DEBUG_OFF          equ  0x3FFF
  19. _WDT_OFF            equ  0x3FFB
  20. _PWRTE_ON           equ  0x3FF7
  21. _BODEN_OFF          equ  0x3FBF
  22. _LVP_OFF            equ  0x3F7F
  23. _CPD_OFF            equ  0x3FFF
  24. _CP_OFF             equ  0x3FFF
  25. ;_WRT_ENABLE_OFF     equ  0x3DFF
  26.  
  27. __config _XT_OSC & _DEBUG_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF
  28.  
  29.  
  30. ;------------------------------------------------------------
  31. ;                  Declaración de Registros
  32. ;------------------------------------------------------------
  33. w                     equ  0x0000
  34. status                equ  0x0003
  35. portb                 equ  0x0006
  36. pclath                equ  0x000a
  37. adresh                equ  0x001e
  38. adcon0                equ  0x001f
  39. voltaje_1             equ  0x0021
  40. voltaje_2             equ  0x0022
  41. _np_temp1             equ  0x0023
  42. _np_temp2             equ  0x0024
  43. _np_temp3             equ  0x0025
  44. _np_temp4             equ  0x0026
  45. _np_temp5             equ  0x0027
  46. _np_rs232_t           equ  0x0028
  47. _np_rs232_t1          equ  0x0029
  48. _np_config_interrup   equ  0x002a
  49. _np_tiempo            equ  0x002c
  50. _np_tiempo1           equ  0x002e
  51. _np_tiempo2           equ  0x002f
  52. _np_tiempo3           equ  0x0030
  53. trisa                 equ  0x0085
  54. trisb                 equ  0x0086
  55. adresl                equ  0x009e
  56. adcon1                equ  0x009f
  57.  
  58.  
  59. ;------------------------------------------------------------
  60. ;                  Declaración de Bits
  61. ;------------------------------------------------------------
  62. adfm                  equ  7 &#59;
  63. adon                  equ  0 &#59;
  64. c                     equ  0 &#59;carry / borrow bit
  65. go_done               equ  2 &#59;
  66. rp0                   equ  5 &#59;registrer bank select bit
  67. rp1                   equ  6 &#59;registrer bank select bit
  68. z                     equ  2 &#59;bit cero
  69.  
  70.  
  71. ;------------------------------------------------------------
  72. ;                        Inicio
  73. ;------------------------------------------------------------
  74.  
  75. reset   org 0
  76.   goto paso2
  77.   org 4
  78.   retfie
  79.  
  80.  
  81. ;------------------------------------------------------------
  82. ;                      programa principal
  83. ;------------------------------------------------------------
  84. paso2
  85.   movlw b'00000001'              &#59;configurar el puerto a como xxsssssa
  86.   bsf status,rp0                 &#59;cambiar a banco 1
  87.   bcf status,rp1
  88.   movwf trisa
  89.   movlw b'10001110'              &#59;configuracion a/d = dddda
  90.   movwf adcon1
  91.   bcf status,rp0                 &#59;cambiar a banco 0
  92.   bsf adcon0,adon                &#59;activar activar el conversor a/d.
  93.   movlw b'00000000'              &#59;configurar el puerto b como ssssssss
  94.   bsf status,rp0                 &#59;cambiar a banco 1
  95.   movwf trisb
  96. paso5
  97.   movlw b'10000001'              &#59;conversión
  98.   bcf status,rp0                 &#59;cambiar a banco 0
  99.   bcf status,rp1
  100.   movwf adcon0
  101.   bsf status,rp0                 &#59;cambiar a banco 1
  102.   bsf adcon1,adfm                &#59;alinear el resultado a la derecha
  103.   bcf status,rp0                 &#59;cambiar a banco 0
  104.   clrf _np_temp3
  105.   clrf _np_temp4
  106.   movlw .16
  107.   movwf _np_temp5
  108. paso5_ciclos
  109.   call leer_ad
  110.   bsf status,rp0                 &#59;cambiar a banco 1
  111.   movf adresl,w                  &#59;recuperar el registro bajo de la conversion a/d
  112.   bcf status,rp0                 &#59;cambiar a banco 0
  113.   movwf voltaje_2
  114.   movf adresh,w                  &#59;recuperar el registro alto de la conversion a/d
  115.   movwf voltaje_1
  116.   movf voltaje_2,w
  117.   addwf _np_temp4,1
  118.   btfsc status,c
  119.   incf _np_temp3,1
  120.   movf voltaje_1,w
  121.   addwf _np_temp3,1
  122.   decfsz _np_temp5,1
  123.   goto paso5_ciclos
  124.   bcf status,c
  125.   rrf _np_temp3,1
  126.   rrf _np_temp4,1
  127.   bcf status,c
  128.   rrf _np_temp3,1
  129.   rrf _np_temp4,1
  130.   bcf status,c
  131.   rrf _np_temp3,1
  132.   rrf _np_temp4,1
  133.   bcf status,c
  134.   rrf _np_temp3,1
  135.   rrf _np_temp4,1
  136.   movf _np_temp3,w
  137.   movwf voltaje_1
  138.   movf _np_temp4,w
  139.   movwf voltaje_2
  140.   movf voltaje_1,w               &#59;enviar el dato voltaje_1
  141.   movwf _np_temp1
  142.   call rs232_tb1_9600
  143.   movlw .1                       &#59;temporizador 1 seg
  144.   call tiempo_1_255_mega_c
  145.   goto paso5                     &#59;cierra el ciclo
  146.  
  147.  
  148. ;------------------------------------------------------------
  149. ;                  Declaración de Subrutinas
  150. ;------------------------------------------------------------
  151.  
  152. tiempo_1_255_mega_c
  153.   movwf _np_tiempo
  154.   goto tiempo_1_255_mega_c_1
  155. tiempo_1_255_mega_c_bucle2
  156.   nop
  157.   nop
  158.   nop
  159.   nop
  160.   nop
  161.   nop
  162.   nop
  163. tiempo_1_255_mega_c_1
  164.   movlw .10
  165.   movwf _np_tiempo1
  166. tiempo_1_255_mega_c_bucle1
  167.   nop
  168.   nop
  169.   movlw .99
  170.   movwf _np_tiempo2
  171. tiempo_1_255_mega_c_bucle0
  172.   nop
  173.   nop
  174.   nop
  175.   movlw .200
  176.   movwf _np_tiempo3
  177. tiempo_1_255_mega_c_bucle
  178.   nop
  179.   nop
  180.   decfsz _np_tiempo3,1
  181.   goto tiempo_1_255_mega_c_bucle
  182.   nop
  183.   nop
  184.   nop
  185.   decfsz _np_tiempo2,1
  186.   goto tiempo_1_255_mega_c_bucle0
  187.   nop
  188.   nop
  189.   nop
  190.   decfsz _np_tiempo1,1
  191.   goto tiempo_1_255_mega_c_bucle1
  192.   decfsz _np_tiempo,1
  193.   goto tiempo_1_255_mega_c_bucle2
  194.   return
  195.  
  196.  
  197. leer_ad
  198. &#59;realizar conversion a/d
  199.   movlw .200
  200.   movwf _np_temp1
  201.   bsf adcon0,go_done
  202. leer_ad_esperar
  203.   decfsz _np_temp1,1
  204.   goto leer_ad_esperar
  205.   nop
  206.   nop
  207. leer_ad_esperar_fin
  208.   btfsc adcon0,go_done
  209.   goto leer_ad_esperar_fin
  210.   return
  211.  
  212. rs232_tb1_9600
  213. &#59;enviar un dato rs232 por portb,1 (por codigo)
  214. &#59;_np_temp1 = dato a enviar
  215. &#59;_np_temp2 = contador de bits
  216.   movlw .8
  217.   bcf status,rp0                 &#59;cambiar a banco 0
  218.   bcf status,rp1
  219.   movwf _np_temp2
  220.   bcf portb,1
  221.   call rs232_9600_bit
  222. rs232_tb1_9600_tx_otro
  223.   bcf portb,1
  224.   bcf status,c
  225.   rrf _np_temp1,1
  226.   btfsc status,c
  227.   bsf portb,1
  228.   call rs232_9600_bit
  229.   decfsz _np_temp2,1
  230.   goto rs232_tb1_9600_tx_otro
  231.   bsf portb,1
  232.   call rs232_9600_bit
  233.   return
  234.  
  235.  
  236. rs232_9600_bit
  237.   movlw .9
  238.   movwf _np_rs232_t
  239.   goto rs232_9600_bit_2
  240. rs232_9600_bit_bucle
  241.   nop
  242.   nop
  243.   nop
  244.   nop
  245.   nop
  246.   nop
  247.   nop
  248. rs232_9600_bit_2
  249.   decfsz _np_rs232_t,1
  250.   goto rs232_9600_bit_bucle
  251.   nop
  252.   nop
  253.   nop
  254.   nop
  255.   nop
  256.   nop
  257.   nop
  258.   nop
  259.   nop
  260.   return
  261. rs232_9600_mbit
  262.   movlw .4
  263.   movwf _np_rs232_t
  264.   goto rs232_9600_mbit_2
  265. rs232_9600_mbit_bucle
  266.   nop
  267.   nop
  268.   nop
  269.   nop
  270.   nop
  271.   nop
  272.   nop
  273. rs232_9600_mbit_2
  274.   decfsz _np_rs232_t,1
  275.   goto rs232_9600_mbit_bucle
  276.   nop
  277.   nop
  278.   nop
  279.   nop
  280.   nop
  281.   nop
  282.   nop
  283.   nop
  284.   nop
  285.   return
  286.  
  287. End
  288.  
  289.  

Alternative

  • Miembro MUY activo
  • ***
  • Mensajes: 176
    • Ver Perfil
Re: Pic16f88
« Respuesta #1 en: Sábado 1 de Marzo de 2008, 23:55 »
0
Saludos.
una observacion, la transmision serial no
envia y recibe voltajes, nose quien te dijo eso.

La transmision serial manda y recibe datos a una dterminada
velocidad que se llama baudios, y depende su configuracion
bit de Stop, de paridad, cuantos bit's de datos mandas etc.

Te recomiendo que antes que realices el programa
o copies programas de alguien que lo realizo
te pongas a leer y estudiar que es transmision de
datos serialmente, por que si te explico ni idea vas a tener

En el DataSheet del 16F88 utiliza el USAR
es mas sencillo
suerte bye

resistencio

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Pic16f88
« Respuesta #2 en: Miércoles 19 de Marzo de 2008, 01:58 »
0
Hola, es mi primer mensaje...el codigo para transmitir serie es mucho mas sencillo que eso que hiciste...Yo lo hice en menos de 20 lineas...revisa un poquito !!!