ON 20060427@6:02:45 PM at page: http://www.piclist.com/techref/member/FL-gmail-A53/index.htm#38834.7519097222 Fredy Lievano[FL-gmail-A53] Code:
aqui esta un comverzor a/d que envia los datos por el rs323 y adeams recibe datos los manda al portb a su vez retorna el dato al pc here is c a/d that takes al the data referent to a volt on portb and send all that data to the pc via rs232 and it also reads data from the PC shows it on the portb and resend it to the serial port. LIST P=16F873 #INCLUDE "p16f873.inc" ;STATUS EQU 03H PORT_A EQU 05H PORT_B EQU 06H PORT_C EQU 07H ;PCLATC EQU 0AH ;INTCON EQU 0BH ;PIR1 EQU 0CH ;RCSTA EQU 18H ;TXREG EQU 19H ;RCREG EQU 1AH ;ADRESH EQU 1EH ;ADCON0 EQU 1FH ;TRISA EQU 85H ;TRISB EQU 86H ;TRISC EQU 87H ;TXSTA EQU 98H ;SPBRG EQU 99H ADRES1 EQU 9EH ;ADCON1 EQU 9FH ;RP0 EQU 5 ;RP1 EQU 6 ;IRP EQU 7 ;Z EQU 2 ;C EQU 0 ;TXIF EQU 4 LOOPS EQU 20H LOOPS2 EQU 21H CAJA1 EQU 22H CAJA2 EQU 23H CAJA3 EQU 24H BUFFER EQU 25H ;receive EQU 26H __CONFIG _CP_OFF & _PWRTE_OFF& _WDT_OFF & _XT_OSC & _LVP_OFF & _BODEN_OFF ;CONFIGURO ; PARA LA GRABACION, CODE PROTECT OFF, RESET DE ENCENDIDO ,ETC ;************************* COMIENZO DEL PROGRAMA ********************* ORG 00 GOTO INICIO ;----------------------------------------------------------------------- RETARDO MOVWF LOOPS ;RUTINA DE RETARDO EN MILISEGUNDOS TOP2 MOVLW .110 ;EL NUMERO DE MILISEC LLEGA CARGADO MOVWF LOOPS2 ;EN EL REGISTRO LOOPS TOP NOP DECFSZ LOOPS2,1 ;PREGUNTA SI TERMINO 1 mS. GOTO TOP DECFSZ LOOPS,1 ;PREGUNTA SI TERMINO RETARDO GOTO TOP2 RETLW 0 ;-----------------------------------------------------------------------; ; RUTINA DE CONVERSION A/D A 10 BITS DEVUELVE 3 DATOS EN HEXADECIMAL GUARDADOS ; ; ; ; EN LOS REGISTROS CAJA1, CAJA2 Y CAJA3 ; ;-----------------------------------------------------------------------; CONVER BSF STATUS,RP0 MOVLW B'10000010' ;SELECCIONA Vref INTERNO(+5 Y GND) MOVWF ADCON1 ;DATOS EN ADRESL Y 2 BITS EN ADRESH BCF STATUS,RP0 BSF ADCON0,GO ;INICIO DE CONVERSION NOP NOP CONSU BTFSC ADCON0,GO ;ESPERA QUE TERMINE DE CONVERTIR GOTO CONSU MOVF ADRESH,W MOVWF CAJA1 ;PASA TRES DIGITOS HEXADECIMALES MOVLW 30H ;A REGISTROS INDIVIDUALES ADDWF CAJA1,1 ;PARA SER TRANSMITIDO BSF STATUS,RP0 ;AL REGISTRO CAJA1 LE SUMA 30H MOVF ADRES1,W ;PARA CONVERTIRLO EN ASCII BCF STATUS,RP0 MOVWF BUFFER ANDLW 0FH MOVWF CAJA3 ;EL REGISTRO CAJA3 QUE CONTIENE MOVLW 0AH ;EL DIGITO MENOS SIGNIFICATIVO DEBE SUBWF CAJA3,0 ;PROBARSE PARA VER SI ES UN NUMERO MOVLW 37H ;DE 0 A 9 O SI ES LA LETRA A HASTA F BTFSS STATUS,C ;PARA HACER LA CONVERSION A ASCII MOVLW 30H ADDWF CAJA3,1 SWAPF BUFFER,0 ANDLW 0FH MOVWF CAJA2 ;EL DIGITO CAJA2 TIENE EL MISMO MOVLW 0AH ;PROCEDIMIENTO QUE CAJA3 SUBWF CAJA2,0 MOVLW 37H BTFSS STATUS,C MOVLW 30H ADDWF CAJA2,1 RETLW 0 ;-----------------------------------------------------------------------; ; ESTA RUTINA ENVIA LOS DATOS de CONVERSION ; ; ; ;-----------------------------------------------------------------------; ENVIAR MOVF CAJA1,0 ;TRANSMITE EL DIGITO HEXADECIMAL ESPER BTFSS PIR1,TXIF ;PDE MAYOR PESO GOTO ESPER MOVWF TXREG MOVF CAJA2,0 ;TX EL SEGUNDO DIGITO HEXA ESPERA BTFSS PIR1,TXIF ;PERO DEBE ESPERAR QUE TERMINE DE GOTO ESPERA ;TX EL DATO ANTERIOR MOVWF TXREG MOVF CAJA3,0 ;TX TERCER DIGITO ESPER2 BTFSS PIR1,TXIF GOTO ESPER2 MOVWF TXREG MOVLW .88 ;TX EL CARACTER "x" PARA SEPARAR ESPER3 BTFSS PIR1,TXIF ;CADA DATO DE LOS DIFERENTES CANALES GOTO ESPER3 MOVWF TXREG RETLW 0 ;-----------------------------------------------------------------------; ; ESTA RUTINA recive SERIALMENTE LOS DATOS ; ;-----------------------------------------------------------------------; dato bcf STATUS,RP0 ; RAM PAGE 0 movlw b'10010000' ; enable Async Reception movwf RCSTA nop nop movf RCREG,W ; save received data in W movwf TXREG ; send data in W TransWt bsf STATUS,RP0 ; RAM PAGE 1 WtHere btfss TXSTA,TRMT ; aquireboto dato para comprobar qeu leyo goto WtHere bcf STATUS,RP0 ; RAM PAGE movf RCREG,W movwf PORT_B RETLW 0 ;-----------------------------------------------------------------------; ; ;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------; ;PROGRAMA PRINCIPAL ;-----------------------------------------------------------------------; INICIO BSF STATUS,RP0 ;RAM PAGE 0 MOVLW B'11111111' MOVWF TRISA MOVLW B'00000000' MOVWF TRISB ;PUERTOS A Y B COMO ENTRADAS MOVLW B'10101111' MOVWF TRISC ;PUERTO C ENTRADAS Y PIN TX SALIDA MOVLW B'00100110' ;PROGRAMA USART ASINCRONO PARA TX MOVWF TXSTA ;ALTA RATA DE BAUDIOS MOVLW .25 ;CONFIGURA TEMPORIZADOR A 4MHZ MOVWF SPBRG ;9600 BPS (8,N,1) call dato BCF STATUS,RP0 ;RAM PAGE 0 BSF PIR1,TXIF MOVLW B'10000001' ;SELECCIONA CANAL 0 Y RELOJ DE CONV MOVWF ADCON0 ;CONVERTIDOR ENCENDIDO ;call dato CALL CONVER ;LLAMA RUTINA CONVERSION A/D CALL ENVIAR ;ENVIA DATOS SERIALES MOVLW B'10001001' ;SELECCIONA CANAL1 Y RELOJ DE CONVERSION MOVWF ADCON0 ;CONVERTIDOR ENCENDIDO CALL CONVER CALL ENVIAR MOVLW .13 ;LA SEPARACION ENTRE CADA BLOQUE ESPER4 BTFSS PIR1,TXIF ;DE 4 DATOS GOTO ESPER4 ;SE HACE CON EL CARRIAGE RETURN MOVWF TXREG ;Y UN CARACTER LINE FEED MOVLW .10 ;SIRVE PARA SEPARAR LAS LINEAS DE ;DATOS QUE SE RECIBEN, BAJA UN RENGLON ESPER5 BTFSS PIR1,TXIF ;EN EL PROGRAMA TERMINAL DE WINDOWS GOTO ESPER5 ;CADA LINEA DE DATOS TIENE ;CANAL0, CANAL1 , CANAL2 , CANAL3 MOVWF TXREG ESPER6 BTFSS PIR1,TXIF ;ESTA COMPROBACION ES PARA ;GARANTIZAR QUE SE TRANSMITA GOTO ESPER6 ;EL ULTIMO CARACTER ANTES DE SEGUIR MOVLW .110 ;RETARDO ENTRE BLOQUES DE 4 DATOS CALL RETARDO GOTO INICIO ;COMIENZA NUEVAMENTE PARA ENVIAR ;OTRO PAQUETE DE DATOS END any questions email me to fredylg@gmail.comON 20060427@6:11:52 PM at page: http://www.piclist.com/techref/member/FL-gmail-A53/index.htm#38834.7582407407 Fredy Lievano[FL-gmail-A53] Says 2 stepper motor driver ,
2 stepper motor driver ,
;;---------------Encabezado-------------
LIST P=16F873
#INCLUDE "p16f873.inc"
radix hex
;------------mapa de memoria---------
LOOPS EQU 20H
LOOPS2 EQU 21H
estado equ 0x03 ; Haciendo asignaciones
dc1 equ 0x0C ; Estos 3 registros los utilizaré
dc2 equ 0x0D ; para hacer el retardo
reg3 equ 0x0E
CONTADOR EQU 21H
cont EQU 0A
MEMORIA EQU 28H
__CONFIG _CP_OFF & _PWRTE_OFF& _WDT_OFF & _XT_OSC & _LVP_OFF & _BODEN_OFF ;CONFIGURO
;-------**** COMIENZO DEL PROGRAMA ****-----
ORG 00
GOTO INICIO
;-----------------------
LOOP
NO BTFSS PORTA,2
GOTO NO
MOVFW PORTA ;lee el dato y lo mandada
MOVWF MEMORIA ;a memoria
BTFSS MEMORIA,1 ;lee el dato de ra1
GOTO STEPCCW ;
BTFSS MEMORIA,0 ;si el pusador en ra0 esta en uno vulveve a mirara
GOTO STEPCW ;sino entonces anda hacia el otro lado
GOTO LOOP ; SI AMOS SON CERO VOALVO A LEER HASTA QEU CAMBIE
STEPCW
NOOO BTFSS PORTA,2
GOTO NOOO
CALL S1 ;da un paso y
BTFSS PORTA,1 ;si el pulsador 1 cambio
GOTO LOOP ;checkea
CALL S2
BTFSS PORTA,1
GOTO LOOP
CALL S3
BTFSS PORTA,1
GOTO LOOP
CALL S4
GOTO STEPCW
STEPCCW
NOO BTFSS PORTA,2
GOTO NOO
CALL S4
BTFSS PORTA,0
GOTO LOOP
CALL S3
BTFSS PORTA,0
GOTO LOOP
CALL S2
BTFSS PORTA,0
GOTO LOOP
CALL S1
GOTO STEPCCW
S1 MOVLW B'00000101'
MOVWF PORTC
CALL DELAY
CALL DELAY
RETURN
S2 MOVLW B'000000110'
MOVWF PORTC
CALL DELAY
CALL DELAY
RETURN
S3 MOVLW B'000001010'
MOVWF PORTC
CALL DELAY
CALL DELAY
RETURN
S4 MOVLW B'0000001001'
MOVWF PORTC
CALL DELAY
CALL DELAY
RETURN
;------------------------------------------------
DELAY movlw 35 ; Outer loop iteration count
movwf dc1
dl1 clrf dc2 ; Initialize inner loop
dl2 nop
nop
decfsz dc2,F
goto dl2
decfsz dc1,F
goto dl1
return
;-----------------------------------------------------------------------
INICIO BSF STATUS,RP0
MOVLW 06h
MOVWF ADCON1
MOVLW B'00001111'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISC
bcf STATUS,RP0 ; RAM PAGE 0
CLRF PORTB
CLRF PORTC
CLRF MEMORIA
GOTO LOOP
END
;---------------------------------------------------------------------------