Advertisement
Guest User

Untitled

a guest
Aug 2nd, 2014
576
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.15 KB | None | 0 0
  1. _ _ _ _
  2. | | | | __ _ ___| | ___ __ | | __ _ _ _ ___ _ __ ___
  3. | |_| |/ _` |/ __| |/ / '_ \| |/ _` | | | |/ _ \ '__/ __|
  4. | _ | (_| | (__| <| |_) | | (_| | |_| | __/ | \__ \
  5. |_| |_|\__,_|\___|_|\_\ .__/|_|\__,_|\__, |\___|_| |___/
  6. |_| |___/
  7.  
  8.  
  9. Estas 35 instrucciones son las mismas para toda la gama media de los microcontroladores pic
  10.  
  11. Antes de continuar es necesario definir algunos términos que se usaran para explicar las instrucciones:
  12.  
  13. f: cualquier registro del microcontrolador
  14. W: registro de trabajo
  15. b: posicion de un bit en el registro 'f'
  16. d: destino, puede ser 'f' (d=1) o 'W' (d=0)
  17. etiqueta: grupo de caracteres que marcan el inicio de una parte del programa
  18. []: opcional
  19. : posicion de un bit dentro de un registro
  20.  
  21.  
  22.  Instrucciones orientadas a registros
  23.  
  24.  
  25.  ADDWF: Suma W y f
  26. Suma el contenido del registro 'W' y el registro 'f'. Si "d" es 0, el resultado se almacena en el registro W. Si 'd' es 1 el resultado se almacena en el registro 'f'.
  27. Sintaxis: [etiqueta] ADDWF f,d
  28. Operación: (W) + (f) --> (destino)
  29. Flags afectados: C, DC, Z
  30. Ejemplo: ADDWF REG,1
  31. Antes de la instrucción: W=0x03, REG=0x04
  32. Después de la instrucción: W=0x03, REG=0x07
  33.  
  34. ANDWF: (W AND f)
  35.  
  36. Realiza la operación lógica AND entre el registro W y el registro "f". Si "d" es 0 el resultado se almacena en el registro W. Si "d" es 1, el resultado se almacena en el registro "f".
  37. Sintaxis: [etiqueta] ANDWF f,d
  38. Operación: (W) AND (f) --> (destino)
  39. Flags afectados: Z
  40. Ejemplo: ANDWF REG,1
  41. Antes de la instrucción: W=0x17, REG= 0xC2
  42. Después de la instrucción: W=0x17, REG= 0x02
  43.  
  44. CLRF: (Borra un registro)
  45.  
  46. Borra el contenido del registro 'f' y se activa el flag Z.
  47. Sintaxis: [etiqueta] CLRF f
  48. Flags afectados: Z
  49. Ejemplo: CLRF REG
  50. Antes de la instrucción: REG=0x54
  51. Después de la instrucción: REG=0x00, Z=1
  52.  
  53. CLRW: (Borra el registro de trabajo W)
  54.  
  55. Borra el contenido del registro 'W' y se activa el flag Z. Esta instruccion no tiene operandos.
  56. Sintaxis: [etiqueta] CLRW
  57. Flags afectados: Z
  58. Ejemplo: CLRW
  59. Antes de la instrucción: W=0x54
  60. Después de la instrucción: W=0x00, Z=1
  61.  
  62. COMF (Complementa el registro f)
  63. El contenido del registro 'f' se complementa. Si d=0 el resultado se almacena en el registro W. Si d=1 el resultado se almacena en el registro 'f'.
  64. Sintaxis: [etiqueta] COMF f,d
  65. Flags afectados: Z
  66. Ejemplo: COMF REG,0
  67. Antes de la instrucción: REG=0x13
  68. Después de la instrucción: REG=0x13, W=0xEC
  69.  
  70. DECF: (Decrementa f en 1)
  71. De decrementa en uno el contenido del registro 'f'. Si d=0, el resultado se almacena en W. Si d=1, el resultado se almacena en 'f'.
  72. Sintaxis: [etiqueta] DECF f,d
  73. Flags afectados: Z
  74. Ejemplo: DEC CONT, 1
  75. Antes de la instrucción: CONT=0x01, Z=0
  76. Después de la instrucción: CONT=0x00, Z=1
  77.  
  78. DECFSZ: (Decrementa en 1 y salta si el resultado es 0)
  79.  
  80. El contenido del registro 'f' se decrementa. Si 'd=0, el resultado se coloca en el registro W. Si d=1, el resultado se coloca en el registro 'f'. Si el resultado es 0, se salta la siguiente instrucción y se continúa con la ejecución.
  81. Sintaxis: [etiqueta] DECFSZ f,d
  82. Flags afectados: Ninguno
  83.  
  84. INCF: (Incrementa el registro f)
  85.  
  86. Incrementa en uno el contenido del registro 'f'. Si d=0, el resultado se almacena en W. Si d=1, el resultado se almacena en 'f'.
  87. Sintaxis: [label] INCF f,d
  88. Flags afectados: Z
  89. Ejemplo: INCF CONT,1
  90. Antes de la instrucción: CONT=0xFF, Z=0
  91. Después de la instrucción: CONT=0x00, Z=1
  92.  
  93. INCFSZ: ( Incrementa en 1 y salta si el resultado es 0)
  94.  
  95. El contenido del registro 'f' se incrementa. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado se coloca en el registro 'f'. Si el resultado es 0, se salta la siguiente instrucción y se continúa con la ejecución.
  96. Sintaxis: [etiqueta] DECFSZ f,d
  97. Flags afectados: Ninguno
  98.  
  99. IORWF: (W OR f)
  100.  
  101. Realiza la operación lógica OR entre el registro W y el registro 'f'. Si d=0 el resultado se almacena en el registro W. Si d=1, el resultado se almacén en el registro 'f'.
  102. Sintaxis: [etiqueta] IORWF f,d
  103. Flags afectados: Z
  104. Ejemplo: IORWF REG,0
  105. Antes de la instrucción: REG=0x13, W=0x91
  106. Después de la instrucción: REG=0x13, W=0x93
  107.  
  108. MOVF: ( Mover el registro f)
  109.  
  110. El contenido del registro 'f' se mueve al destino 'd'. Si d=0, el destino es el registro W. Si d=1, el destino es el propio registro 'f'.
  111. Sintaxis: [etiqueta] MOVF f,d
  112. Flags afectados: Z
  113. Ejemplo: MOVF REG,0
  114. Después de la instrucción: W=REG
  115.  
  116.  
  117.  
  118. RLF: (Rota el registro f a la izquierda)
  119.  
  120. El contenido del registro 'f' se rota una posición a la izquierda. El bit de más peso pasa al carry y el carry se introduce por el bit de menos peso de 'f'. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro 'f'.
  121. Sintaxis: [etiqueta] RLF f,d
  122. Flags afectados: C
  123. Ejemplo: RLF REG,1
  124. Antes de la instrucción: REG=b'11100110', C=0
  125. Después de la instrucción: REG=b'11001100', C=1
  126.  
  127. RRF: ( Rota el registro f a la derecha)
  128.  
  129. El contenido del registro 'f' se rota una posición a la derecha. El bit de menos peso pasa al carry y el carry se introduce por el bit de más peso de 'f'. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro 'f'.
  130. Sintaxis: [etiqueta] RLF f,d
  131. Flags afectados: C
  132. Ejemplo: RLF REG,1
  133. Antes de la instrucción: REG=b'11100110', C=0
  134. Después de la instrucción: REG=b'01110011', C=0
  135.  
  136.  
  137.  
  138. SUBWF: (Resta f – W)
  139.  
  140. Resta el contenido del registro 'f' menos el contenido del registro W. Si d=0, el resultado se almacena en el registro W. Si d=1, el resultado se almacena en el registro 'f'.
  141. Sintaxis: [etiqueta] SUBWF f,d
  142. Flags afectados: C, DC, Z
  143. Ejemplo: SUBWF REG,1
  144. Antes de la instrucción: REG=0x01, W=0x02
  145. Después de la instrucción: REG=0xFF, W=0x02
  146.  
  147. SWAPF: ( Intercambio de f)
  148.  
  149. El nibble bajo del registro 'f' se intercambia con el nibble alto del mismo. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro 'f'.
  150. Sintaxis: [etiqueta] SWAPF f,d
  151. Flags afectados: Ninguno
  152. Ejemplo: SWAPF REG,1
  153. Antes de la instrucción: REG=0x54
  154. Después de la instrucción: REG=0x45
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162. XORWF: (W XOR f)
  163.  
  164. Realiza la función lógica OR exclusiva entre el contenido del registro W y el registro 'f'. Si d=0, el resultado se almacena en el registro W. Si d=1 el resultado se almacena en el registro 'f'.
  165. Sintaxis: [etiqueta] XORWF f,d
  166. Flags afectados: Z
  167. Ejemplo: XORWF REG,1
  168. Antes de la instrucción: REG=0xAF, W=0xB5
  169. Después de la instrucción: REG=0x1A, W=0xB5
  170.  
  171. NOP: (No operación)
  172.  
  173. No realiza ninguna operación, solo consume un ciclo de reloj
  174. Sintaxis: [etiqueta] NOP
  175.  
  176. INSTRUCCIONES ORIENTADAS A BITS:
  177.  
  178. BCF: (Borra un bit)
  179.  
  180. Borra el bit 'b'del registro 'f'
  181. Sintaxis: [etiqueta] BCF f,b
  182. Ejemplo: BCF REG,0
  183. Antes de la instrucción: REG=b'01101101'
  184. Después de la instrucción: REG=b'01101100'
  185.  
  186.  
  187. BSF: ( Activa un bit)
  188.  
  189. Activa el bit 'b' del registro 'f'
  190. Sintaxis: [etiqueta] BSF f,b
  191. Ejemplo: BSF REG,2
  192. Antes de la instrucción: REG=b'01001001'
  193. Después de la instrucción: REG=b'01001011'
  194.  
  195. BTFSC: (Checa un bit y salta si es 0)
  196.  
  197. Si el bit "b" del registro "f" es 0, se salta una instrucción y se continúa con la ejecución.
  198. Sintaxis: [etiqueta] BTFSC f,b
  199.  
  200. BTFSS: (Checa un bit y salta si es 1)
  201.  
  202. Si el bit "b" del registro "f" es 1, se salta una instrucción y se continúa con la ejecución.
  203. Sintaxis: [etiqueta] BTFSS f,b
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213. INSTRUCCIONES ORIENTADAS A CONSTANTES Y DE CONTROL
  214.  
  215. ANDLW: (W AND literal)
  216.  
  217. Realiza la operación lógica AND entre el registro W y la constante "k". El resultado se almacena en el registro W.
  218. Sintaxis: [label] ANDWL k
  219. Flags afectados: Z
  220. Ejemplo: ANDLW 0x5F
  221. Antes de la instrucción: W=0xA3
  222. Después de la instrucción: W=0x03
  223.  
  224. CALL: (Llamada a subrutina)
  225.  
  226. Llamada y salto a subrutina. La dirección de retorno se guarda en el stack. La constante "k" de 8 bits forma la dirección de salto y se carga en los bits del PC. Los bits del PC se cargan con los bits del registro "STATUS". PC se pone a 0.
  227. Sintaxis: [etiqueta] CALL k
  228. Ejemplo: INICIO CALL DESTINO
  229. Antes de la instrucción: PC=INICIO
  230. Después de la instrucción: PC=DESTINO
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237. CLRWDT: (Borra el watchdog timer)
  238.  
  239. Esta instrucción borra tanto el "watchdog" como el prescaler. Los bits TO y PD del registro de estado se ponen a "1".
  240. Sintaxis: [label] CLRWDT
  241. Flags afectados: TO, PD
  242.  
  243. GOTO: (Salto incondicional)
  244.  
  245. Se trata de un salto incondicional. Los 9 bits de la constante "k" que forman la instrucción, se cargan en los bits del PC y forman la dirección de salto. Los bits del PC se cargan con los bits del registro de estado.
  246. Sintaxis: [etiqueta] GOTO k
  247. Ejemplo: INICIO GOTO DESTINO
  248. Antes de la instrucción: PC=0
  249. Después de la instrucción: PC=DESTINO
  250.  
  251. IORLW: (W OR literal)
  252.  
  253. Se realiza la función lógica OR entre el registro W y la contante "k". El resultado se almacena en el registro W.
  254. Sintaxis: [etiqueta] IORLW k
  255. Flags afectados: Z
  256. Ejemplo: IORLW Ox35
  257. Antes de la instrucción: W=0x9A
  258. Después de la instrucción: W=0xBF
  259.  
  260. MOVLW: (Carga un literal en W)
  261.  
  262. El registro W se carga con el valor de 8 bits expresado mediante la literal "k".
  263. Sintaxis: [etiqueta] MOVLW k
  264. Ejemplo: MOVLW 0x5A
  265. Después de la instrucción: W=0x5A
  266.  
  267. RETURN: (Regresa de una subrutina)
  268.  
  269. El programa regresa de la subrutina y ejecuta la instrucción que sigue a CALL
  270. Sintaxis: [etiqueta] RETURN
  271.  
  272. RETLW: Regresa de una subrutina y carga el valor K en W
  273.  
  274. El programa regresa de la subrutina y carga el valor de 8 bits del registro k en el registro W
  275. Sintaxis: [etiqueta] RETLW, k
  276. Ejemplo: RETLW, 0x45
  277. Antes de la instruccion: W=xx
  278. Después de la instrucción: W=0x45
  279.  
  280. RETFIE: (Regresa de la rutina de servicio)
  281.  
  282. Sintaxis: [etiqueta] RETFIE
  283.  
  284.  
  285.  
  286. SLEEP: (Entra en estado de reposo)
  287.  
  288. Al salir, activa el bit de estado TO y borra el PD. El WDT y el prescaler se borran. Al entrar en el modo SLEEP, se detiene el oscilador.
  289. Sintaxis: [etiqueta] SLEEP
  290. Flags afectados: TO, PD, GPWUF
  291.  
  292. XORLW: ( W XOR literal)
  293.  
  294. Realiza la función lógica OR exclusiva entre el contenido del registro W y la constante "k" de 8 bits. El resultado se almacena en el registro W.
  295. Sintaxis: [etiqueta] XORLW k
  296. Flags afectados: Z
  297. Ejemplo: XORLW 0xAF
  298. Antes de la instrucción: W = 0xB5
  299. Después de la instrucción: W = 0x1A
  300.  
  301. SUBLW: (Resta L – W)
  302.  
  303. A una constante "k" de 8 bits se le resta el registro W. El resultado es guardado en el mismo registro W.
  304. Sintaxis: [etiqueta] SUBLW k
  305. Flags afectados: C,DC,Z
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312. MOVWF: (Mover el valor del registro W al registro f)
  313.  
  314. El contenido del registro ‘W’ se mueve al registro ‘f’.
  315. Sintaxis: [etiqueta] MOVWF f
  316. Flags afectados: Ninguno
  317. Ejemplo: MOVWF REG
  318. Antes de la instrucción: REG=0x03, W=0xA4
  319. Después de la instrucción: REG=0xA4, W=0xA4
  320.  
  321.  
  322. Y estas son las 35 instrucciones que podemos utilizar para programar los microcontroladores PIC. La razón para que solo se utilicen 35 instrucciones en la programación es que los PIC son microcontroladores RISC, y estas instrucciones están bien optimizadas para tener una mayor velocidad de trabajo, una arquitectura más simple y un código mas compacto.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement