Ir al contenido


Foto

Contador ASM


  • Por favor identifícate para responder
10 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 05 diciembre 2008 - 07:02

Bueno, aunque no sé nada de ASM pero estreno este foro con este ejemplo que encontré por ahí, es un contador del 0...9 con un display de 7 segmentos para mostrar el resultado y el PIC16F84, Ahí les va:



asm
  1. list p=16f84
  2.  
  3. ;Declaración de variables
  4.  
  5. w equ 0x00
  6. estado equ 0x03
  7. ptoa equ 0x05
  8. ptob equ 0x06
  9. intcont equ 0x0b
  10. timer equ 0x01
  11. contar equ 0x0c
  12. aux equ 0x0d
  13.  
  14.  
  15. ;Se inicia el programa en la posición 00h de la EEPROM
  16.  
  17. org 0
  18. goto inicio
  19. org 0x04
  20. goto interrupcion
  21. org 0x05
  22. inicio:
  23. bsf estado,5 ;Se coloca 1 en el bit Rp0 para ir a banco 1
  24.  
  25. movlw  0x1f        ;Se ponen 11111 en el registro acumulador
  26.     movwf  ptoa ;Se mueve el valor del registro acumulador al puerto A
  27. clrf ptob ;Limpia el registro Puerto B
  28. movlw 0xa0
  29. movwf intcont
  30. movlw 0x07
  31. movwf timer
  32.  
  33. bcf estado,5        ; Se coloca 0 en el bit Rp0 para ir al banco 0
  34. movlw 0x00
  35. movwf contar
  36. movlw 0x3f
  37.  
  38. inicio2:
  39. movwf aux
  40. movwf ptob ; enviando el valor de W (0x01) al ptoB
  41. goto inicio2
  42.  
  43. interrupcion:
  44. incf contar,1
  45. movf contar,0
  46. xorlw 0x20
  47. btfss estado,2
  48.   goto salint
  49. goto comparar
  50.  
  51.  
  52. comparar:
  53. cero:
  54.  
  55. movf aux,0
  56. xorlw 0x3f
  57. btfss estado,2
  58. goto uno
  59.  
  60. movf aux,0
  61. xorlw 0x39; hacer un xor  00111111 con 111001 para que quede 0000110,valor del uno
  62. movwf ptob
  63. movf ptob,0
  64. movwf aux
  65. goto salir
  66. uno:
  67. movf aux,0
  68. xorlw 0x06
  69. btfss estado,2
  70. goto dos
  71. movf aux,0
  72. xorlw 0x5d
  73. movwf ptob
  74. movf ptob,0
  75. movwf aux
  76. goto salir
  77.  
  78. dos:
  79. movf aux,0
  80. xorlw 0x5B
  81. btfss estado,2
  82. goto tres
  83. movf aux,0
  84. xorlw 0x14
  85. ;movf ptob,0
  86. movwf aux
  87. movwf ptob
  88.  
  89. goto salir
  90.  
  91. tres:
  92. movf aux,0
  93. xorlw 0x4f
  94. btfss estado,2
  95. goto cuatro
  96. movf aux,0
  97. xorlw 0x29
  98. movwf ptob
  99. ;movf ptob,0
  100. movwf aux
  101. goto salir
  102. cuatro:
  103.  
  104. movf aux,0
  105. xorlw 0x66
  106. btfss estado,2
  107. goto cinco
  108. movf aux,0
  109. xorlw 0xb
  110. movwf ptob
  111. ;movf ptob,0
  112. movwf aux
  113. goto salir
  114.  
  115. cinco:
  116. movf aux,0
  117. xorlw 0x6d
  118. btfss estado,2
  119. goto seis
  120. movf aux,0
  121. xorlw 0x10
  122. movwf ptob
  123. ;movf ptob,0
  124. movwf aux
  125. goto salir
  126.  
  127. seis:
  128. movf aux,0
  129. xorlw 0x7d
  130. btfss estado,2
  131. goto siete
  132. movf aux,0
  133. xorlw 0x7a
  134. movwf ptob
  135. ;movf ptob,0
  136. movwf aux
  137. goto salir
  138.  
  139. siete:
  140.  
  141. movf aux,0
  142. xorlw 0x07
  143. btfss estado,2
  144. goto ocho
  145. movf aux,0
  146. xorlw 0x78
  147. movwf ptob
  148. ;movf ptob,0
  149. movwf aux
  150. goto salir
  151.  
  152. ocho:
  153. movf aux,0
  154. xorlw 0x7f
  155. btfss estado,2
  156. goto volver
  157. movf aux,0
  158. xorlw 0x18
  159. movwf ptob
  160. ;movf ptob,0
  161. movwf aux
  162. goto salir
  163.  
  164. volver:
  165. movlw 0x3f
  166. movwf ptob
  167. movwf aux
  168. goto salir
  169.  
  170.  
  171. salir:
  172. clrf contar
  173.  
  174. salint:
  175. movf aux,0
  176.  
  177.  
  178.  
  179. ;CLRW
  180. ;movf aux,0
  181. bcf intcont,2
  182.  
  183.  
  184. retfie
  185.  
  186.  
  187.  
  188. end ; Fin del programa



Saludos.

  • 0

#2 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 05 diciembre 2008 - 07:11

Hola,
Yo menos se de ensamblador, ni se como se compila  :$... pero si me gustaría ver que tal luce, podrias poner una captura de pantalla del programa compilado :D
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 05 diciembre 2008 - 07:28

Pero puedes meterlo en Delphi :D


delphi
  1. procedure contador;
  2. asm
  3.   //::::::
  4. end;


Salud OS
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 05 diciembre 2008 - 07:34

Vaya, no sabía eso  :|
  • 0

#5 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 05 diciembre 2008 - 07:34


Pero puedes meterlo en Delphi :D


delphi
  1. procedure contador;
  2. asm
  3.   //::::::
  4. end;


Salud OS

Gracias, lo probaré  :D
  • 0

#6 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 05 diciembre 2008 - 08:01

Eso es un asm para PIC (OpCode).Disculpenme, recuerden que soy novato en esto.¿Pero que sentido tiene meter un asm que solo puede leer un PIC en Delphi? Ese codigo solo lo interpretaria un PIC 16F84. ;)

Un Saludo.

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 05 diciembre 2008 - 08:13

Eso es un asm para PIC (OpCode).Disculpenme, recuerden que soy novato en esto.¿Pero que sentido tiene meter un asm que solo puede leer un PIC en Delphi? Ese codigo solo lo interpretaria un PIC 16F84. ;)

Un Saludo.


Lo que quiero dar a entender amigo Jose es que el codigo ASM se puede ejecutar desde delphi. :p

Salud OS
  • 0

#8 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 05 diciembre 2008 - 08:36


Eso es un asm para PIC (OpCode).Disculpenme, recuerden que soy novato en esto.¿Pero que sentido tiene meter un asm que solo puede leer un PIC en Delphi? Ese codigo solo lo interpretaria un PIC 16F84. ;)

Un Saludo.



Lo que quiero dar a entender amigo Jose es que el codigo ASM se puede ejecutar desde delphi. :p

Salud OS

Claro carnal yo asi lo entendi.Lo que queria dejarle saber a Fernando y a Felipe.Que ese ASM no rodaria en Delphi, porque es un ASM pensando en el OPCode del PIC 16F84.

Este si es un ASM para Delphi:

delphi
  1. var 
  2. Form1: TForm1; 
  3. data,status:byte;
  4. const   
  5. base = $3f8;      {base address port serial}   
  6. lcr = 3;          {line control register}   
  7. dll = 0;          {divisor lacht low byte}   
  8. dlh = 1;          {divisor lacht high byte}   
  9. lsr = 5;          {line status register}
  10.  
  11. Procedure Initserial;
  12. begin   
  13. asm       
  14. mov dx,base+lcr;  {address line control register}       
  15. mov al,$80 ;      {10000000b = access bit divisor lacht}       
  16. out dx,al;       
  17. mov dx,base+dll;  {address divisor lacht low byte}       
  18. mov al,$30 ;      {DLLB = 30h}       
  19. out dx,al;       
  20. mov dx,base+dlh; {address divisor lacht high byte}       
  21. mov al,$00;      {DLLH = 00h}       
  22. out dx,al;      {In this case Port Serial have};                     
  23.                 { baud rate = 2400 bps}     
  24. mov dx,base+lcr;{address line control register}       
  25. mov al,$03 ;    {00000011b =}       
  26. out dx,al ;    {bit 7=0, access to Rx buffer & Tx;                     
  27.                 {bit 6=0, set break disable;                     
  28.                 {bit 5-4-3=000, no parity;                     
  29.                 {bit 2=0, one stop bit;                     
  30.                 {bit 1-0=11,data lenght 8 bit}       
  31. end;
  32. end;
  33.  
  34. Procedure Send_Data_Serial;
  35. begin   
  36. asm       
  37. mov dx,base       
  38. mov al,data       
  39. out dx,al   
  40. end
  41. end;
  42.  
  43. procedure TForm1.FormCreate(Sender: TObject);
  44. begin 
  45. Initserial;
  46. end;
  47.  
  48. procedure TForm1.Button1Click(Sender: TObject);
  49. begin
  50. repeat 
  51. asm 
  52. mov dx,base+lsr ; {address line status register } 
  53. in al,dx 
  54. and
  55. al,$20      ; {00100000b =not masking bit 5} 
  56. mov status,al  ; {bit5=Empty Transmitting holding reg} 
  57. end;
  58. until status = $20; { If ETHR = 1 then data ready tobe send }
  59. data:=0;Send_Data_Serial;
  60. end;
  61.  
  62. procedure TForm1.Button2Click(Sender: TObject);
  63. begin
  64. repeat 
  65. asm 
  66. mov dx,base+lsr; {address line status register } 
  67. in al,dx 
  68. and
  69. al,$20    ; {00100000b =not masking bit 5} 
  70. mov status,al  ; {bit5=Empty Transmitting holding reg} 
  71. end;
  72. until status = $20; { If ETHR = 1 then data ready tobe send}data:=1;
  73. Send_Data_Serial;
  74. end;


Este es un asm para Delphi y lo que hace es que envia unos bytes al puerto serie.

Un Saludo.

#9 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 05 diciembre 2008 - 08:55

Como quién dice ¿no haría nada?  *-)
  • 0

#10 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 05 diciembre 2008 - 09:06

Como quién dice ¿no haría nada?  *-)


Hola Felipe, si te refieres al ASM que puso Fernando. Pues en Window eso no hace nada.Es como si le hablas en español a un chino.Pues no te entiende. ;)

Un Saludo.

#11 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 05 diciembre 2008 - 09:12


Como quién dice ¿no haría nada?  *-)


Hola Felipe, si te refieres al ASM que puso Fernando. Pues en Window eso no hace nada.Es como si le hablas en español a un chino.Pues no te entiende. ;)

Un Saludo.

Mejor no lo pudiste dejar en claro, gracias  ;)...
  • 0




IP.Board spam blocked by CleanTalk.