{"id":350,"date":"2018-01-01T03:24:29","date_gmt":"2018-01-01T03:24:29","guid":{"rendered":"https:\/\/garikoitz.info\/blog\/?p=350"},"modified":"2018-01-02T02:08:56","modified_gmt":"2018-01-02T02:08:56","slug":"pic16f84-multiplicacion-de-numeros-de-8-bits","status":"publish","type":"post","link":"https:\/\/garikoitz.info\/blog\/2018\/01\/pic16f84-multiplicacion-de-numeros-de-8-bits\/","title":{"rendered":"PIC16F84 &#8211; Multiplicaci\u00f3n de n\u00fameros de 8 bits"},"content":{"rendered":"<h2>Problema Propuesto<\/h2>\n<p>Implementar una subrutina que multiplique dos n\u00fameros de 8 bits utilizando el algoritmo de sumas parciales.<\/p>\n<h2>Soluci\u00f3n<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"asm\">list \t\tp=16F84A\r\ninclude \tP16F84A.INC\r\n;------------------------------------------------------------------\r\nmultiplicando \tequ \t0x0C            ;dato a sumar\r\nmultiplicador \tequ \t0x0D            ;veces a sumar\r\nDH\t\tequ \t0x0E            ;byte alto\r\nDL\t\tequ \t0x0F            ;byte bajo\r\n;------------------------------------------------------------------\r\n    org \t00h                     ;Vector de Reset\r\n    goto \tINICIO \t\t\r\n    org \t0x05                    ;Vector de interrupci\u00f3n\r\nINICIO \t\t\t\r\n    call\tmultiplica              ;subrutina\r\n    goto \tdormir                  ;hemos acabado\r\n        \r\nMULTIPLICA\r\n    clrf \tDH\r\n    clrf\tDL\r\n    movf \tmultiplicador,W         ;W = multiplicador\r\n    btfsc\tstatus,Z                ;Salta si Z=1\r\n    goto\tdormir                  ;Z=0 multiplicador=0\r\nBUCLE\r\n    movf\tDL,W                    ;W=DL\r\n    addwf\tmultiplicando,W         ;W += multiplicando\r\n    movwf\tDL                      ;DL=W\r\n    btfsc\tstatus,C                ;Salta si C=0\r\n    incf\tDH,F\r\nRESTO\r\n    decfsz\tmultiplicador,F         ;multiplicador-1\r\n    goto\tbucle                   ;no hemos acabado\r\n    return                              ;fin subrutina\r\nDORMIR\t\t\r\n    sleep\r\n    end                                 ;Fin del programa\r\n;------------------------------------------------------------------\r\n<\/pre>\n<p>El programa consta de cuatro etiquetas (Inicio, bucle, resto y dormir) y una subrutina (multiplica).<\/p>\n<p>La subrutina \u201c<strong>MULTIPLICA<\/strong>\u201d es donde se va sumando el multiplicando hasta que el multiplicador sea cero. Cuanto mayor sea el multiplicador, m\u00e1s tiempo de ejecuci\u00f3n obtendremos.<\/p>\n<p>Se puede ver un ejemplo de funcionamiento en este v\u00eddeo: <a href=\"https:\/\/youtu.be\/Mu3g4hKa3BA\">https:\/\/youtu.be\/Mu3g4hKa3BA<\/a><\/p>\n<p>https:\/\/youtu.be\/Mu3g4hKa3BA<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Problema Propuesto Implementar una subrutina que multiplique dos n&uacute;meros de 8 bits utilizando el algoritmo de sumas parciales. Soluci&oacute;n list p=16F84A include P16F84A.INC ;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; multiplicando equ 0x0C ;dato a sumar multiplicador equ 0x0D ;veces a sumar DH equ 0x0E ;byte alto DL equ 0x0F ;byte bajo ;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; org 00h ;Vector de Reset goto INICIO org 0x05 ;Vector de interrupci&oacute;n INICIO call multiplica ;subrutina goto dormir ;hemos acabado MULTIPLICA clrf DH clrf DL movf multiplicador,W ;W = multiplicador btfsc status,Z ;Salta&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/garikoitz.info\/blog\/2018\/01\/pic16f84-multiplicacion-de-numeros-de-8-bits\/\"> Leer m\u00e1s<span class=\"screen-reader-text\">  Leer m\u00e1s<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":380,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","wpupg_custom_link":[],"wpupg_custom_link_behaviour":[],"wpupg_custom_link_nofollow":[],"wpupg_custom_image":[],"wpupg_custom_image_id":[],"footnotes":""},"categories":[33],"tags":[35,36,34],"class_list":["post-350","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pic16f84","tag-micro","tag-pic-simulator","tag-pic16f84"],"_links":{"self":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/350","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/comments?post=350"}],"version-history":[{"count":6,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/350\/revisions"}],"predecessor-version":[{"id":357,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/350\/revisions\/357"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/media\/380"}],"wp:attachment":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/media?parent=350"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/categories?post=350"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/tags?post=350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}