elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Imitar ordenador de los cines de antes en cuanto al sonido
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Imitar ordenador de los cines de antes en cuanto al sonido  (Leído 7,407 veces)
Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: Imitar ordenador de los cines de antes en cuanto al sonido
« Respuesta #10 en: 1 Marzo 2016, 11:22 am »

Solo vengo a aclarar una duda que ha surgido en este post a la cual no se le ha dado una respuesta muy correcta.

Gracias Elektro por la aclaración.


Como he dicho, se usaba antiguamente. Me cito a mi mismo:
Código:
En cuanto el uso de GOTO, antiguamente en Basic se usaba muchísimo, y en tal caso no veo porqué no.  Yo tuve un ordenador Sharp que funcionaba con Basic y un Commodore64 y era bastante habitual.

Con "y en tal caso no veo porqué no"  quiero decir que para el sencillo ejemplo que he puesto y además emulando la consola retro, creo que se puede utilizar. Vamos que no creo que vaya a explotar el ordenador  :xD

Lo que interesaba es crear el efecto retro de sonido que pedía Meta (en el que el GOTO no interviene).

Solo quería aclarar eso.

Saludos.


« Última modificación: 1 Marzo 2016, 11:28 am por Lekim » En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: Imitar ordenador de los cines de antes en cuanto al sonido
« Respuesta #11 en: 1 Marzo 2016, 14:24 pm »

Efectivamente la utilización de la instrucción Goto es totalmente irrecomendable tanto por Microsoft en la MSDN así como de forma no-oficial en cualquier otro lenguaje que soporte Goto y por cualquier programador con los conocimientos suficientes para entender lo que su uso implica[...]

No comparto que el Goto no se recomiende en cualquier lenguaje de programación. El GOTO que se uso mucho es en ASM de los PIC. Lo usas si o si.

Código
  1. ; ZONA DE DATOS *******************************************************
  2.  
  3. LIST P=16F887
  4. INCLUDE <P16F887.INC>
  5. __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
  6. __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V
  7. __IDLOCS 0x1234
  8.  
  9. CBLOCK   0x20
  10. TeclaPulsada ; Va a guardar el contenido de la tecla pulsada.
  11. MensajeApuntado ; Va a guarda la dirección del mensaje apuntado.
  12. Relays ; Estado de los relays
  13. Estado ; Estado general
  14. ENDC
  15.  
  16. #DEFINE PEntradasB PORTB ; Define puerto de salidas.
  17. #DEFINE EntradaR1B 0 ; Define dónde se sitúa cada salidas.
  18. #DEFINE EntradaR2B 1
  19. #DEFINE EntradaR3B 2
  20. #DEFINE EntradaR4B 3
  21. #DEFINE EntradaR5B 4
  22. #DEFINE EntradaR6B 5
  23. #DEFINE EntradaR7B 6
  24. #DEFINE EntradaR8B 7
  25. #DEFINE PSalidasD PORTD
  26. #DEFINE SalidaR1D 0
  27. #DEFINE SalidaR2D 1
  28. #DEFINE SalidaR3D 2
  29. #DEFINE SalidaR4D 3
  30. #DEFINE SalidaR5D 4
  31. #DEFINE SalidaR6D 5
  32. #DEFINE SalidaR7D 6
  33. #DEFINE SalidaR8D 7
  34.  
  35. TECLA_RELE_1_ON EQU 'q' ; Código de las teclas utilizadas.
  36. TECLA_RELE_1_OFF EQU 'a'
  37. TECLA_RELE_2_ON EQU 'w'
  38. TECLA_RELE_2_OFF EQU 's'
  39. TECLA_RELE_3_ON EQU 'e'
  40. TECLA_RELE_3_OFF EQU 'd'
  41. TECLA_RELE_4_ON EQU 'r'
  42. TECLA_RELE_4_OFF EQU 'f'
  43. TECLA_RELE_5_ON EQU 't'
  44. TECLA_RELE_5_OFF EQU 'g'
  45. TECLA_RELE_6_ON EQU 'y'
  46. TECLA_RELE_6_OFF EQU 'h'
  47. TECLA_RELE_7_ON EQU 'u'
  48. TECLA_RELE_7_OFF EQU 'j'
  49. TECLA_RELE_8_ON EQU 'i'
  50. TECLA_RELE_8_OFF EQU 'k'
  51. TECLA_INICIO EQU 'z'
  52. TECLA_PARADA EQU ' ' ; Código de la tecla espaciadora, (hay un espacio,
  53. ; tened cuidado al teclear el programa).
  54. TECLA_INFO EQU 'n'
  55.  
  56. ENTER EQU 0x0A ; Código de tecla "Enter" o "Retorno de Carro".
  57. CAMBIO_LINEA EQU 0x0D ; Código para el cambio de línea.
  58.  
  59. ORG 0x2100 ; Corresponde a la dirección 0 de la zona EEPROM
  60. ; de datos.
  61. DE 0x00,2,3
  62.  
  63. ;****************************************************************************
  64. ;* ZONA DE CODIGOS *
  65. ;****************************************************************************
  66.  
  67. ;****************************************************************************
  68. ;* Rutina Principal *
  69. ;****************************************************************************
  70.  
  71. ORG 0x00
  72. goto Inicio
  73.  
  74. ORG 4 ; Aquí se sitúa el vector de interrupción para
  75. goto LeeEntradasVisualiza ; atender las subrutinas de interrupción.
  76.  
  77.  
  78. Inicio
  79. call LCD_Inicializa ; Inicializa el display LCD
  80. call RS232_Inicializa ; Inicializa RS232.
  81. bsf PEntradasB,EntradaR1B
  82. bsf PEntradasB,EntradaR2B
  83. bsf PEntradasB,EntradaR3B
  84. bsf PEntradasB,EntradaR4B
  85. bsf PEntradasB,EntradaR5B
  86. bsf PEntradasB,EntradaR6B
  87. bsf PEntradasB,EntradaR7B
  88. bsf PEntradasB,EntradaR8B
  89. bcf PSalidasD,SalidaR1D
  90. bcf PSalidasD,SalidaR2D
  91. bcf PSalidasD,SalidaR3D
  92. bcf PSalidasD,SalidaR4D
  93. bcf PSalidasD,SalidaR5D
  94. bcf PSalidasD,SalidaR6D
  95. bcf PSalidasD,SalidaR7D
  96. bcf PSalidasD,SalidaR8D
  97. BANKSEL CM1CON0
  98. movlw b'00000111'
  99. movwf CM1CON0
  100. movwf CM2CON0
  101. movwf CM2CON1          
  102.    BANKSEL ANSEL
  103.    clrf ANSEL
  104.    clrf ANSELH
  105.    BANKSEL TRISB
  106. movlw b'11111111'
  107.    movwf TRISB
  108. clrw
  109. clrf TRISD
  110.    BANKSEL PORTD
  111.  
  112.  
  113.  
  114. call RS232_LineasBlanco ; Visualiza unas cuantas líneas en blanco
  115. call RS232_LineasBlanco ; para limpiar la pantalla.
  116. movlw b'10001000' ; Habilita la interrupción RBI y la general.
  117. movwf INTCON
  118.  
  119. Principal ; apagadas.
  120. sleep
  121. goto Principal ; Loop Infinito
  122.  
  123. ;****************************************************************************
  124. ;* Mensajes *
  125. ;****************************************************************************
  126. Mensajes
  127. addwf PCL,F
  128. MensajeParado
  129. DT "Sistema DESACTIVADO ", 0x00
  130. Mensaje_Reles
  131. DT " 1 2 3 4 5 6 7 8 RL ", 0x00
  132. Mensaje_ON
  133. DT " 1", 0x00
  134. Mensaje_OFF
  135. DT " O", 0x00
  136. Mensaje_Cambiolinea
  137. DT ENTER, CAMBIO_LINEA, 0x00
  138. Mensaje_Mostrarlinea
  139. DT "----------------", 0x00
  140. Mensaje_Info
  141. DT "n", 0x00
  142. ; DT "FirmWare v2.15  "
  143. ; DT ENTER, CAMBIO_LINEA
  144. ; call LCD_Linea2
  145. ; DT " PIC16F887      "
  146. ; DT ENTER, CAMBIO_LINEA
  147. ; call Retardo_2s
  148. ; call LCD_Linea1
  149. ; DT " metaconta      "
  150. ; DT ENTER, CAMBIO_LINEA
  151. ; call LCD_Linea2
  152. ; DT " @gmail.com     ", 0x00
  153. ; call Retardo_2s
  154. Mensaje_Activar
  155. DT "   Todos ACTIVOS    ", 0x00
  156. Mensaje_IN
  157. DT " IN", 0x00
  158. Mensaje_OUT
  159. DT " OUT", 0x00
  160. Mensaje_Avisos
  161. DT "***    ALARMA    ***", 0x00
  162. MensajeEntradas
  163. DT ENTER, CAMBIO_LINEA
  164. DT " 1 2 3 4 5 6 7 8 IN"
  165. DT ENTER, CAMBIO_LINEA
  166. DT "-------------------"
  167. DT ENTER, CAMBIO_LINEA, 0x00
  168. FinTablaASCII
  169.  
  170.  
  171.  
  172.  
  173.  
  174. ;****************************************************************************
  175. ; Interrupción
  176. ;****************************************************************************
  177.  
  178. ;****************************************************************************
  179. ; Subrutina
  180. ;****************************************************************************
  181.  
  182.  
  183. ; btfss PEntradasC,EntradaR1C ; ¿Bit 0 del PORTA es "1"?
  184. ; goto D1_OFF
  185. ; bsf PSalidasD,SalidaR1D
  186. ; goto Principal
  187. ;D1_OFF
  188. ; bcf PSalidasD,SalidaR1D
  189.  
  190. LeeEntradasVisualiza
  191. call RS232_LineasBlanco
  192. movlw MensajeEntradas ; Nombre de las entradas.
  193. call RS232_Mensaje ; Lo visualiza en el ordenador.
  194. LeeEntrada1
  195. btfss PEntradasB,EntradaR1B ; ¿Entrada = 1?, ¿Entrada = Abierta?
  196. goto Entrada1Cerrado ; No, está cerrada.
  197. bsf PSalidasD,SalidaR1D
  198. call VisualizaAbierto1
  199. goto LeeEntrada2
  200. Entrada1Cerrado
  201. bcf PSalidasD,SalidaR1D
  202. call VisualizaCerrado1
  203. LeeEntrada2
  204. btfss PEntradasB,EntradaR2B ; ¿Entrada = 1?, ¿Entrada = Abierta?
  205. goto Entrada2Cerrado ; No, está cerrada.
  206. call VisualizaAbierto2
  207. goto LeeEntrada3
  208. Entrada2Cerrado
  209. call VisualizaCerrado2
  210. LeeEntrada3
  211. btfss PEntradasB,EntradaR3B ; ¿Entrada = 1?, ¿Entrada = Abierta?
  212. goto Entrada3Cerrado ; No, está cerrada.
  213. call VisualizaAbierto3
  214. goto LeeEntrada4
  215. Entrada3Cerrado
  216. call VisualizaCerrado3
  217. LeeEntrada4
  218. btfss PEntradasB,EntradaR4B ; ¿Entrada = 1?, ¿Entrada = Abierta?
  219. goto Entrada4Cerrado ; No, está cerrada.
  220. call VisualizaAbierto4
  221. goto LeeEntrada5
  222. Entrada4Cerrado
  223. call VisualizaCerrado4
  224. LeeEntrada5
  225. btfss PEntradasB,EntradaR5B ; ¿Entrada = 1?, ¿Entrada = Abierta?
  226. goto Entrada5Cerrado ; No, está cerrada.
  227. call VisualizaAbierto5
  228. goto LeeEntrada6
  229. Entrada5Cerrado
  230. call VisualizaCerrado5
  231. LeeEntrada6
  232. btfss PEntradasB,EntradaR6B ; ¿Entrada = 1?, ¿Entrada = Abierta?
  233. goto Entrada6Cerrado ; No, está cerrada.
  234. call VisualizaAbierto6
  235. goto LeeEntrada7
  236. Entrada6Cerrado
  237. call VisualizaCerrado6
  238. LeeEntrada7
  239. btfss PEntradasB,EntradaR7B ; ¿Entrada = 1?, ¿Entrada = Abierta?
  240. goto Entrada7Cerrado ; No, está cerrada.
  241. call VisualizaAbierto7
  242. goto LeeEntrada8
  243. Entrada7Cerrado
  244. call VisualizaCerrado7
  245. LeeEntrada8
  246. btfss PEntradasB,EntradaR8B ; ¿Entrada = 1?, ¿Entrada = Abierta?
  247. goto Entrada8Cerrado ; No, está cerrada.
  248. call VisualizaAbierto8
  249. goto FinVisualiza
  250. Entrada8Cerrado
  251. call VisualizaCerrado8
  252. FinVisualiza
  253. call RS232_LineasBlanco
  254. bcf INTCON,RBIF ; Limpia el flag de reconocimiento de la
  255. retfie
  256.  
  257. ;----------------------------------------------------------------------------------------
  258.  
  259. VisualizaAbierto1
  260. call LCD_Linea2 ; Seleccionar la línea 2.
  261. movlw Mensaje_ON ; Visualiza el mensaje "Abierto"
  262. call RS232_Mensaje ; en el HyperTerminal.
  263. return
  264.  
  265. VisualizaAbierto2
  266. call LCD_Linea2 ; Seleccionar la línea 2.
  267. movlw Mensaje_ON ; Visualiza el mensaje "Abierto"
  268. call RS232_Mensaje ; en el HyperTerminal.
  269. return
  270.  
  271. VisualizaAbierto3
  272. call LCD_Linea2 ; Seleccionar la línea 2.
  273. movlw Mensaje_ON ; Visualiza el mensaje "Abierto"
  274. call RS232_Mensaje ; en el HyperTerminal.
  275. return
  276.  
  277. VisualizaAbierto4
  278. call LCD_Linea2 ; Seleccionar la línea 2.
  279. movlw Mensaje_ON ; Visualiza el mensaje "Abierto"
  280. call RS232_Mensaje ; en el HyperTerminal.
  281. return
  282.  
  283. VisualizaAbierto5
  284. call LCD_Linea2 ; Seleccionar la línea 2.
  285. movlw Mensaje_ON ; Visualiza el mensaje "Abierto"
  286. call RS232_Mensaje ; en el HyperTerminal.
  287. return
  288.  
  289. VisualizaAbierto6
  290. call LCD_Linea2 ; Seleccionar la línea 2.
  291. movlw Mensaje_ON ; Visualiza el mensaje "Abierto"
  292. call RS232_Mensaje ; en el HyperTerminal.
  293. return
  294.  
  295. VisualizaAbierto7
  296. call LCD_Linea2 ; Seleccionar la línea 2.
  297. movlw Mensaje_ON ; Visualiza el mensaje "Abierto"
  298. call RS232_Mensaje ; en el HyperTerminal.
  299. return
  300.  
  301. VisualizaAbierto8
  302. call LCD_Linea2 ; Seleccionar la línea 2.
  303. movlw Mensaje_ON ; Visualiza el mensaje "Abierto"
  304. call RS232_Mensaje ; en el HyperTerminal.
  305. return
  306.  
  307. VisualizaCerrado1
  308. call LCD_Linea2 ; Seleccionar la línea 2.
  309. movlw Mensaje_OFF ; Visualiza el mensaje "Cerrado"
  310. call RS232_Mensaje ; en el HyperTerminal.
  311. return
  312.  
  313. VisualizaCerrado2
  314. call LCD_Linea2 ; Seleccionar la línea 2.
  315. movlw Mensaje_OFF ; Visualiza el mensaje "Cerrado"
  316. call RS232_Mensaje ; en el HyperTerminal.
  317. return
  318.  
  319. VisualizaCerrado3
  320. call LCD_Linea2 ; Seleccionar la línea 2.
  321. movlw Mensaje_OFF ; Visualiza el mensaje "Cerrado"
  322. call RS232_Mensaje ; en el HyperTerminal.
  323. return
  324.  
  325. VisualizaCerrado4
  326. call LCD_Linea2 ; Seleccionar la línea 2.
  327. movlw Mensaje_OFF ; Visualiza el mensaje "Cerrado"
  328. call RS232_Mensaje ; en el HyperTerminal.
  329. return
  330.  
  331. VisualizaCerrado5
  332. call LCD_Linea2 ; Seleccionar la línea 2.
  333. movlw Mensaje_OFF ; Visualiza el mensaje "Cerrado"
  334. call RS232_Mensaje ; en el HyperTerminal.
  335. return
  336.  
  337. VisualizaCerrado6
  338. call LCD_Linea2 ; Seleccionar la línea 2.
  339. movlw Mensaje_OFF ; Visualiza el mensaje "Cerrado"
  340. call RS232_Mensaje ; en el HyperTerminal.
  341. return
  342.  
  343. VisualizaCerrado7
  344. call LCD_Linea2 ; Seleccionar la línea 2.
  345. movlw Mensaje_OFF ; Visualiza el mensaje "Cerrado"
  346. call RS232_Mensaje ; en el HyperTerminal.
  347. return
  348.  
  349. VisualizaCerrado8
  350. call LCD_Linea2 ; Seleccionar la línea 2.
  351. movlw Mensaje_OFF ; Visualiza el mensaje "Cerrado"
  352. call RS232_Mensaje ; en el HyperTerminal.
  353. return ; interrupción.
  354. ; ---------------------------------------------------------------------------
  355.  
  356. IF (FinTablaASCII>0xFF)
  357. ERROR "¡CUIDADO!: La tabla ha superado el tamaño de los"
  358. MESSG "primeros 256 bytes de memoria ROM. No funcionará correctamente."
  359. ENDIF
  360.  
  361. INCLUDE  <RS232.INC>
  362. INCLUDE  <RS232MEN.INC>
  363. INCLUDE  <LCD_4BIT.INC>
  364. INCLUDE  <LCD_MENS.INC>
  365. INCLUDE  <RETARDOS.INC>
  366. INCLUDE  <EEPROM.INC>
  367. END

GOTO para asm o ensamblador de PIC, 8085, 8086, 8088 y demás, se usa obligado por el cual está diseñado así, para lenguajes de bajo nivel. Para alto nivel como explica nuestro amigo, es como dice.

Gracias por la explicación.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Imitar ordenador de los cines de antes en cuanto al sonido
« Respuesta #12 en: 1 Marzo 2016, 14:47 pm »

No comparto que el Goto no se recomiende en cualquier lenguaje de programación. El GOTO que se uso mucho es en ASM de los PIC. Lo usas si o si.

GOTO para asm o ensamblador de PIC, 8085, 8086, 8088 y demás, se usa obligado por el cual está diseñado así, para lenguajes de bajo nivel. Para alto nivel como explica nuestro amigo, es como dice.

Por supuesto, se entiende que lo que he dicho se aplica a cualquier lenguaje cuya utilización no sea obligatoria, donde no exista una alternativa en el paradigma bajo el que nos permite programar ese lenguaje.

En Batch por ejemplo también hay que utilizar Goto si o si, sería absurdo pensar que al utilizarlo en estas circunstancias es seguir malos hábitos de programación, ya que no hay elección, estamos limitados.

Como ya dije, el uso de Goto está totalmente considerado deprecado e irrecomendable desde hace décadas para todos los lenguajes de programación bajo el que nos encontremos, esto se aplica a los lenguajes actuales de alto nivel con lo s paradigmas de mayor abstracción, los lenguajes que están en continuidad, vaya, te recuerdo que ASM apareció en el año 1949, es normal pensar que FASM, MASM, Objective ASM y todos esos tengan compatibilidad con Goto y dispongan o no de una alternativa a su utilización.

Los inconvenientes del uso de GoTo se conocen desde tiempos remotos de la programación, como prueba este extracto de la declaración "Go To Statement Considered Harmful" de Edsger W. Dijkstra publicada en el año 1968:
"The unbridled use of the go to statement has as an immediate consequence that it becomes terribly hard to find a meaningful set of coordinates in which to describe the process progress. ... The go to statement as it stands is just too primitive, it is too much an invitation to make a mess of one's program."

Y algunos de los métodos propuestos en el año 1990 que nos indica la wikipedia en la documentación del paradigma de programación estructurada:
Up to 1990 there were quite a few proposed methods for eliminating gotos from existing program, while preserving most of their structure. The various approaches to this problem also proposed several notions of equivalence, which are stricter than simply Turing equivalence, in order to avoid output like the folk theorem discussed above. The strictness of the chosen notion of equivalence dictates the minimal set of control flow structures needed. The 1988 JACM paper by Lyle Ramshaw surveys the field up to that point, as well proposing its own method. Ramshaw's algorithm was used for example in some Java decompilers because the Java virtual machine code has branch instructions with targets expressed as offsets, but the high-level Java language only has multi-level break and continue statements. Ammarguellat (1992) proposed a transformation method that goes back to enforcing single-exit.

Esto es lo que nos aconseja la MSDN:
"GoTo statements can make code difficult to read and maintain. Whenever possible, use a control structure instead."
( hay que entender que el artículo está escrito para todo el público, por eso debemos cambiar las palabras "Whenever possible" por "Whenever you don't know other way to do". )

Soluciones al uso del Goto en C#/Vb.Net ya las expliqué en mi comentario anterior.

Saludos!
« Última modificación: 1 Marzo 2016, 15:38 pm por Eleкtro » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Juicio final cuanto antes « 1 2 ... 5 6 »
Foro Libre
@synthesize 58 29,192 Último mensaje 1 Junio 2010, 15:17 pm
por braulio--
¿Cuánto tiempo pasas delante del ordenador? « 1 2 3 »
Foro Libre
randomcito 27 10,411 Último mensaje 3 Agosto 2010, 00:14 am
por Draklit
Duda Cuanto antes mejor
Wireless en Windows
aloneee 0 2,276 Último mensaje 6 Marzo 2011, 16:39 pm
por aloneee
el sonido se me apaga en cuanto pasa un rato
Hardware
xGENiiiuS 0 1,739 Último mensaje 28 Enero 2016, 18:58 pm
por xGENiiiuS
¡Ccleaner hackeado! Actualiza cuanto antes, tu ordenador podría estar en peligro
Noticias
wolfbcn 3 2,657 Último mensaje 21 Septiembre 2017, 11:51 am
por Br1ant
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines