|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - karen81
76
« en: Jueves 8 de Julio de 2004, 05:42 »
El mplab que se puede bajar de la pagina de microchip gratis.
77
« en: Jueves 8 de Julio de 2004, 05:39 »
Los pic solo tienen reset por encendido y no por pin fisico, cuando tu le das el reset por el pin fisico el toma a esto como una interrupcion y se va a la direccion 0000 y sigue con lo que esta despues de ahi,que no precisamente es el inicio de tu programa, entonces si tu quieres que al darle reset por ese pin sea lo mismo que al apagarlo y volverle a encender tienes que colocar un salto incondicional asi: ORG 0 goto inicio ORG 4 goto rutina ;alguna rutina de interrupcion si estas utilizando interrupciones ORG 5 inicio : te lo digo por experiencia propia ya que yo tuve el mismo problema, si no se corrige tu error avisame bye y suerte
78
« en: Jueves 8 de Julio de 2004, 05:23 »
Espero que te pongan buena nota, cualquier otra duda aqui estamos adios
79
« en: Viernes 2 de Julio de 2004, 08:15 »
pinguinospn me alegro que te sirviera el programa y como ves Eternal Idol eso es lo que necesitaba el necesitaba un programa para microprocesador 8086 que es de 16 bits ¿a que horas dijo el que necesitaba uno de 32 bits? y como no es mi intencion iniciar una discucion, ya que no tengo tiempo para ello doy por cerrado el tema. adios y cuidense
80
« en: Jueves 1 de Julio de 2004, 10:21 »
obviamente no puedes ver los cambios en los leds por que vas contanto en fracciones de segundo lo que debes hacer es colocarles un retraso que se yo de un segundo o mas entre cada dato que envias eso lo haces con lazos verifica en tu set de instrucciones cuanto se tarda cada instruccion y has tu lazo que se tarde un segundo en salirse de el. este retraso que te pongo aqui se podria decir que es el maximo lazo1 mov cx,ffffh lazo2: loop lazo2 lo que se hace es repetirlo varias veces de la siguiente forma mov bx,00ffh lazo1 mov cx,ffffh lazo2: loop lazo2 dec bx jnz lazo1 pruebalo si es muy grande disminuyele bx y si no ves cambio porque el retraso es muy pequeño aumentale bx poco a poco hasta llegar a ffffh si es necesario en cuanto al programa que te dije no lo tengo en la computadora lo tengo a mano tendria que digitarlo , estos dias estare ocupada si no te urge avisame asi podria digitarlo el fin de semana o cualquier dia de la otra semana pero si es urgente no te lo puedo mandar. adios
81
« en: Jueves 1 de Julio de 2004, 09:48 »
No se porque se han enredado tanto en esto. pinguinospn el programa que necesitas es bastante sencillo no te preocupes, como te dije tienes que usar las interrupciones de la bios, aqui te pongo un programita que acabo de hacer,te pongo el codigo fuente para que veas que es lo que le tienes que cambiar y el ejecutable para que veas que si funciona. es un programa sencillo que solo muestra un mensaje en fondo azul y con letras verdes modificalo para hacer el tuyo. cualquier pregunta aqui seguimos. si tienes problema para ensamblarlo avisame y te mando mi version del masm. lamento no haber escrito antes, y haber evitado este enredo, con todo respeto realmente no tengo idea de lo que esta hablando Eternal Idol jamas he usado lo que esta diciendo en ensamblador datos segment
dibujo db ' ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»' ,13,10 db ' º PRESIONE 0 PARA SALIR º',13,10 db ' ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ',13,10,'$' datos ends
pila segment stack
db 128 dup ('pila')
pila ends codigo segment
assume cs:codigo, ss:pila, ds:datos
PANTA PROC NEAR PUSH AX ;la clave esta en esta rutina, por eso solo te voy PUSH BX ; a explicar esta PUSH CX PUSH DX MOV CX,0 MOV DX,2479h MOV BH,12h ;es justamente aqui en BH que se especifica eso ;ese 12h indica 1=fondo azul 2=letras verdes ; si fuera 21h seria 2=fondo verde =letras azules ;4= es rojo 0=es negro , si pones 04 fondo negro letras rojas ;7 = es blanco MOV AX,0600H INT 10h POP DX POP CX POP BX POP AX RET PANTA ENDP
CURSOR PROC NEAR PUSH AX PUSH BX PUSH CX MOV BH,00 MOV AH,02 INT 10h POP CX POP BX POP AX RET CURSOR ENDP STRING PROC NEAR PUSH AX PUSH BX PUSH CX MOV AH,09 INT 21h POP CX POP BX POP AX RET
STRING ENDP
PROGRA PROC FAR
INICIO: push ds sub ax,ax ;para regresar al sistema operativo push ax
mov ax,datos mov ds,ax ;inicializa el ds al segmento de datos MOV AX,0000 MOV BX,0000 MOV CX,0000 MOV DX,0000 CALL PANTA MOV DX,0600h CALL CURSOR LEA DX,dibujo CALL STRING MOV AH,01 INT 21h CMP AL,30h jz fin JMP INICIO fin: MOV AX,4C00h INT 21h PROGRA ENDP
codigo ends
end PROGRA
END adios y hasta pronto
82
« en: Jueves 1 de Julio de 2004, 08:10 »
Con ese pic he trabajado y si es util para tus propositos es bastante sencillo, cualquier duda que tengas escribela en el foro microcontroladores como dice super G, ya que este foro es lenguaje ensamblador para microprocesadores. adios
83
« en: Martes 29 de Junio de 2004, 06:19 »
Eso que al inicio los led esten encendidos creo que es normal ya que los pines se ponen en uno, podrias al iniciar el programa mandar un cero por el puerto, pero como te decia la rutina que te puse ahi es una guia, incluso creo que olvide ponerle algo a la estructura del masm podria ser eso, pero podrias hacer un menu si me das tu correo te mando un programa que con un menu hace diferentes cosas si le tecleas 1. hace una suma si tecleas dos saca raiz cuadrada etc, les puedes quitar esas rutinas y ponerle la de sacar los datos por el puerto paralelo. otra cosa el numero que sacas por el puerto se queda enganchado hasta que sacas otro dato cualquier cosa me avisas
84
« en: Martes 29 de Junio de 2004, 06:10 »
te refieres a que colores se pueden poner de fondo de pantalla y en las letras ????, si es para eso tienes que utilizar las interrupciones de la bios y los colores que yo se que existen son: negro,blanco,azul,rojo y verde, no se si habran otros, estos son los unicos que he visto. no se si te referias a eso. si no es eso me avisas
85
« en: Lunes 28 de Junio de 2004, 00:50 »
No se si entendi quieres saber como configurar el convertidor analogico-digital ???aqui esta un ejemplo de configuracion y conversion si no es eso avisame. nos vemos ******************************************************************* ; rutina inic_ATD: Inicializa el ATD ******************************************************************* inic_ATD: ldaa #$80 ; Permite al ATD funcionar normalmente, staa ATDCTL2 ; borrado normal de banderas y desabilita interrupciones. ; bsr retraso ; Retraso (100uS) para el tiempo de retraso de ESPERA. ; ldaa #$00 ; Selecciona conversiones continuas en el Modo BGND. staa ATDCTL3 ; Ignora FREEZE en el ATDCTL3. ; ldaa #$01 ; Selecciona un tiempo de muestreo final = 2 ciclos de reloj A/D staa ATDCTL4 ; Prescala = Div entre 4 (PRS4:0 = 1) ;
ldaa #$04 ; Inicializa el ATD a SCAN=0, MULT=0, PAD6. ; Se escribe para borrar banderas. staa ATDCTL5 ; 4 conversiones activan una Secuencia de Conversión Única. EsperaConv: brclr ATDSTATH,#$80,EsperaConv ; Espera la bandera de Secuencia Completa ldd ADR2H ; Carga el resultado de la conversión (ADR2H) ; en el acumulador para hacer con el lo que se necesite.
86
« en: Viernes 18 de Junio de 2004, 21:28 »
explicate mejor que es lo que quieres que te muestre informacion en pantalla o que?, si es eso obviamente tienes que usar dos y las interrrupciones de ensamblador
87
« en: Martes 15 de Junio de 2004, 22:43 »
Me hubiera gustado que me hubieras puesto el tipo de errores que te puso que habia ya que se pueden ver en el archivo .LST si son de sintaxis o de que??? Ahora, respecto a la instruccion at: loop at (talvez no te la entendio porque no le pusiste los dos puntos ya que at es una etiqueta igual cambiala por: etiq: loop etiq, si quieres o cualquier etiqueta, lo que hace esta instruccion es estar saltando a ella misma hasta que CX valga cero, es decir cada salto decrementa cx (te ahorra estar decrementando manualmente cx para el retraso) Ahora los errores que de seguro te dio fue porque solo copiaste lo que puse en el mensaje y lo pegaste y le pusiste la estructura de un archivo.asm. Y no era asi la cosa, ese código es una idea basica para que supieras como se envian los datos, y esta echa para un principiante que apenas sabe usar el debug, pero creo que a ustedes no les enseñan el debug si no que de una vez el ensamblador , el debug trabaja con numeros hexadecimales mientras que el ensamblador trabaja con DECIMALES por eso te dio un error en mov cx,00FF, tenias que haber puesto mov cx,00FFh o pasar 00ff a decimal otro error es esa instruccion int 20 ; que solo es para el debug (para que acabe porque ahi no se le puede poner END) A CONTINUACION TE PONGO EL ARCHIVO COMO DEBE SER PARA EL ENSAMBLADOR (ya corregido todo) ES EL ARCHIVO .LST QUE OBTUVE AL COMPILAR EL ARCHIVO.ASM Y VERAS QUE NO ME PUSO NI ERROR NI ADVERTENCIA NI NADA( Ahora segun la version de tu masm asi cambia la estructura, si me das tu correo te envio mi version de masm, si no te funciona en el tuyo) The Microsoft MACRO Assembler , Version 1.25 Page 1-1 06-15-:4
1 ;PROGRAMA DE ENVIO 2 3 4 5 6 7 0000 datos segment 8 9 10 11 0000 datos ends 12 13 0000 pila segment stack 14 15 0000 80 [ db 128 dup ('pila') 16 70 69 6C 61 17 ] 18 19 20 0200 pila ends 21 22 0000 codigo segment 23 24 assume cs:codigo, ss:pila, ds:datos 25 0000 BB 0500 inicio: mov bx,0500h 26 0003 8A 07 ot: mov al,[bx] 27 0005 BA 0378 mov dx,0378h 28 0008 EE out dx,al 29 0009 B9 00FF mov cx,00FFh 30 000C E2 FE AT: loop AT 31 000E 43 inc bx 32 000F 81 FB 0600 cmp bx,0600h 33 34 0013 75 EE jnz ot 35 36 37 38 0015 codigo ends 39 40 end
The Microsoft MACRO Assembler , Version 1.25 Page Symbols -1 06-15-:4
Segments and groups:
N a m e Size align combine class
CODIGO . . . . . . . . . . . . . 0015 PARA NONE DATOS. . . . . . . . . . . . . . 0000 PARA NONE PILA . . . . . . . . . . . . . . 0200 PARA STACK
Symbols:
N a m e Type Value Attr
AT . . . . . . . . . . . . . . . L NEAR 000C CODIGO INICIO . . . . . . . . . . . . . L NEAR 0000 CODIGO OT . . . . . . . . . . . . . . . L NEAR 0003 CODIGO
Warning Severe Errors Errors 0 0
saludos y cualquier cosa aqui seguimos
88
« en: Viernes 11 de Junio de 2004, 23:57 »
Yo he usado mucho el pic 16f877 y su convertidor analogico digital y al ver tu programa no se le ve ningun error, este programa que te pongo aqui es uno que ya esta probado y ha funcionado, La parte de la conversion, si la revisas es casi identica a la tuya solo que nosotros no le pusimos esos NOP (no creo que eso sea pero deberias probar quitandolos). Lo que yo creo es que talvez la direccion de algun registro este mal, o no te entiende cosas como poner B'10000001' o algun detallito asi proba con este programa que te pongo aqui (sin modificarle nada a ver que tal??) ;*********************************************************** ; ADT.ASM ;*********************************************************** LIST p=16F877 ; indica el modelo de PIC
#include "P16F877.INC" ; archivo de encabezado
portb equ 0x06 ;Define el puerto b como salida fisica trisb equ 0x06 ;Define la dirección del registro de direccion TRISB status equ 0x03 ;Define la dirección del registro de estado adresh equ 0x1e ;Registro de datos del convertidor A/D (Parte alta) adcon0 equ 0x1f ;Registro 0 de control y estado del convertidor A/D adcon1 equ 0x1f ;Registro 1 de control y estado del convertidor A/D
rp0 equ 5 ;Bits del registro de estado para cambiar de banco de memoria de datos w equ 0 ;destino de la operacion registro w
ORG 0 movlw 00 ;Pone el valor de 00 en el registro de trabajo bsf status,rp0 ;Apunta al banco 1 movwf trisb ;Se configura el puerto b como salida clrf adcon1 ;Se configura que los datos de la conversion estaran justificados a la izquierda ;y se trabajara con las referencias de la fuente primaria de alimentacion (Vdd=6v) bcf status,rp0 ;Apunta al banco 0 movlw 0x81 ;Activamos el convertidor A/D, seleccionamos el canal 0 para la conversion movwf adcon0 ;y configuramos la sincronia del convertidor a su valor maximo (Fosc/32=625Khz) conver: bsf adcon0,2 ;Iniciamos la conversion para leer el ATD check: btfsc adcon0,2 ;Verificamos la conversion completa si ya se completo salte de lo contrario repita goto check movf adresh,w movwf portb goto conver ;Repita el proceso para leer un nuevo valor del atd
END Espero que te funcione si te funciona o no por favor avisame adios
89
« en: Viernes 11 de Junio de 2004, 23:03 »
unos mensajes abajo (buscalo Tommy es el iniciador) he puesto un codigo para comunicarte con el puerto paralelo ya sea enviando y recibiendo datos, en tu caso necesitaras estar enviando los datos como son seis leds tendrias que sacar el numero binario 111111 que en hexadecimal (el que usa el ensamblador) es "3F" verifica el codigo cualquier duda escribela adios
90
« en: Sábado 5 de Junio de 2004, 23:12 »
en el titulo dices "Envio De Datos Por El Puerto Serial En Asm" y en tu mensaje hola necesito ayuda, tengo que hacer un programa en asembler que envie datos por el puerto paralelo, porfa responder o mandar mail a: leogallegoscl@hotmail.com ¿serial o paralelo? si es paralelo unos mensajes mas abajo he colocado un codigo (tommy preguntó).
91
« en: Sábado 5 de Junio de 2004, 23:04 »
Las interrupciones son un conjunto de excepciones asincrónicas que permite el microprocesador para alterar la ejecución secuencial normal de instrucciones; estas se manejan a través de vectores que contienen la dirección física de la memoria donde se encuentra la rutina de servicio a la excepción solicitada. es decir hacemos un programa que acepta interrupciones por lo que cada vez que se da una interrupcion el programa se interrumpe el micro guarda la direccion donde se interrumpio el programa y otras cosas en la pila (depende de que microcontrolador estemos usando) luego se va al vector de interrupcion donde esta la direccion de la rutina de servicio (que es la rutina que queremos que haga cuando se da la interrupcion) luego de realizarla saca lo que guardo en la pila y retorna a la direccion donde se dio la interrupcion y continua. La diferencia entre las interrupciones enmascarables y las noenmascarables es que las enmascarables se pueden evitar, es decir si no queremos que se den las enmascaramos poniendo a uno o a cero una bandera (depende del micro) y aunque se de la condicion no se da la interrupcion. En cambio las noenmascarables no se puede evitar que se den ejemplo los RESET no se pueden evitar. En cuanto a la interrupcion NMI e IRQ tendrias que especificar a que micro te refieres. Espero que esto te ayude, si algo no te queda claro avisame ya que es un tema que recien acabo de pasar por lo que lo recuerdo muy bien adios
92
« en: Sábado 5 de Junio de 2004, 22:06 »
la verdad no estoy segura si la direccion es la misma en todas las Pc pero creo que no, en las computadoras que yo usaba en mi lugar de estudio nos dijeron que esas eran las direcciones. voy a averiguar bien y te aviso
93
« en: Sábado 22 de Mayo de 2004, 04:22 »
yo hice un dado electronico con microcontrolador HC12 y no utilice otra circuiteria mas que un display siete segmentos lo que hice fue lo siguiente: conecte de esta forma los pines del puerto b al display ; pb1 ; ----- ;pb2 I I pb0 ; ----- <----- pb3 ;pb4 I I pb6 ; ----- ; pb5
asi con un lazo de comparacion sacaba los siguientes numeros: cuando era 1 sacaba el hexadecimal 41 que como ves va a encender un uno cuando era 2 sacaba el hexadecimal 3B que como ves va a encender un dos y asi sucesivamente 3 = 6B, 4 = 4D, 5 = 6E, 6= 7E y cero seria 76 creo para que no se me perdieran los numeros del 1 al 6 los guardaba en una variable auxiliar sacaba el dato al puerto y volvia a cargar los numeros del 1 al 6 no se si esto te ayude espero que si saludos.
94
« en: Domingo 16 de Mayo de 2004, 04:36 »
bueno supongo que ya sabes usar interrupciones. la interrupcion 1A permite obtener informacion del sistema si se escoge la funcion te da la hora del sistema ya en BCD , la hora la coloca en los registros cx y dx de la siguiente forma: CH:Hora BCD, Cl:minutos BCD, Dh:segundos BCD el siguiente programa almacena la hora del sistema en las siguientes direcciones 0200 horas (00 a 24 hrs) 0201 minutos (00 a 59) 0201 segundos (00 a 59)
MOV AH,2 ;necesario para poder leer la hora del sistema INT 1A MOV [200],CH MOV [201],CL MOV [202],DH INT 20 ;esto finaliza el programa tendria que hacer un retardo de 15segundos, mandar la direccion 201 por el puerto, llamar otra vez al retardo de 15segundos y luego mandar la direccion 200 por el puerto y volver al inicio, lo de leer del teclado tambien se hace con interrupciones y podrias estarte preguntando si ya se toco la tecla en medio de las rutinas de 15 segundos. Espero que esto te ayude. si tienes alguna duda avisame
95
« en: Lunes 10 de Mayo de 2004, 02:33 »
Hola , seria bueno que explicaras como lo has pensado hacer ya que el programa que colocas no tiene comentarios y no es tan facil de entender . supongo que al ingresar por ejemplo: abzde quieres que te salga abdez , cierto? yo hice uno asi hace algun tiempo con la limitante que solo se podian ingresar letras minusculas, como los datos son ingresados por el teclado se guardan en ascii o sea los numeros 61 a 7a (a a la z) entonces el programa lo unico que debe de hacer es ordenar los numeros de menor a mayor, ese algoritmo lo debo de tener por ahi guardado, lo buscare, por lo pronto esa es la idea. No dejas muy claro cual es tu duda, si no era esa me avisas.
96
« en: Lunes 26 de Abril de 2004, 19:28 »
gracias creo que he comprendido una ultima duda es para el motorola hc12 ocurre igual se da una interrupcion y el se va a un vector especifico ya que cada uno tiene uno propio el timer tiene el suyo que esta en la ffxx (no recuerdo bien) como seria en ese caso? ¿igual que con el pic o como? gracias de antemano
97
« en: Lunes 26 de Abril de 2004, 04:01 »
Se lo que es una interrupcion, lo que necesito saber es por ejemplo el convertidor analogico digital dispara una interrupcion cuando completa una conversion al hacerlo se debe mandar un una al puerto pero lo que no se es como el programa sabe que tiene que hacer cuando se da la interrupcion por que como tengo entendido cuando se da la interrupcion el cpu va a un vector en la direccion 0004h especificamente. lo que no se es como decirle por ejemplo que lo que tiene que hacer esta en la direccion xxxxx ¿se debe de guardar en esa direccion (0004h) la direccion xxxx. para que cuando se de la interrupcion se vaya para allá? gracias de antemano. atte Karen Giraldo.
98
« en: Viernes 23 de Abril de 2004, 20:04 »
Hola no se si alguien tiene un problema cualquiera en pic 16f877 que utilice interrupciones aun tengo dudas del esquema a utilizar o si pueden decirme como debe ser la estructura de un programa que utilice interrupciones Gracias de antemano
99
« en: Lunes 12 de Abril de 2004, 00:12 »
Hola no se si alguno de ustedes sepa algo del microcontrolador rfPIC12F675F Y SU RECEPTOR o conozca alguna direccion donde brinden informacion sobre este microcontrolador de radio frecuencia (a parte de microchip). gracias de antemano
100
« en: Lunes 5 de Abril de 2004, 02:00 »
noooooo. es funcion de transferencia no trasnsformada de fourier
|
|
|