mida 14 ;------------------------------------------------------------- ;Aplicación -> choco con pesadas propias ;Fecha -> octubre 30 2004 ; programa con control de peso propio no usa func ;dos canales ch1 y ch2 la cali deja en eeprom m1 y m2 ;lo mismo que b1 y b2 aplique y=mx+b ;rutinas> cali=calibracion, tempo=tempo universal ;el 22 se adiciona la tara en disp ;el 25 en disp saca promedios de promedios ;------------------------------------------------------------- scan equ 99 ;programa principal--------------------------------------- &ini ld scan jz &lea jmp ini10 &lea call &leavar ini10 ;ld 6 ;jz ini11 call disp1 ini11 ld ent and cle jz ini12 call cali ini12 ld rini20 ;reles aux para que los ciclos pasen por fin jnz ini20 ld rini32 jnz ini32 ld rini34 jnz ini34 ld sensor1 out led118 flanc sensor1 1 ;detecta si hay flanco jnz ini20 jmp inif ini20 ld sensor2 ;si hay flanco.... out led119 ld sensor2 ;hay sensor2? jnz ini30 set rini20 flanc sensor1 2 ;no sensor2..pero flanco en sensor1? jz inif reset rini20 call borre ;no hubo dosif borre e inicie reset basc1 reset led121 jmp inif ini30 set rini32 call dato ;tome pesos jmp inif ini32 reset rini32 movcf 0 movrf dato6 cpef inif reset basc1 reset led121 set rini34 call calc jmp inif ini34 reset rini34 call moto call borre inif end ;dato. toma datos-------------------------------- ; golp deja 2 golpes entre cambios de bascula dato movci 2 ;ya almaceno de la prim bascula, espero 2 golpes movri golp ;sigue con la seg bascula cpei dato30 movcf 0 ;ya lleno las 3 primeros datos? movrf dato3 cpef dato00 inc golp 1 ;si.... set basc1 set led121 dato00 movcf 0 ;dato1=0? movrf dato1 cpgf dato10 set basc1 ;seleccion bascula1 set led121 call pesa movrf rpesa stof dato1 clear disrf dato1 41 com 0 movci 1 stoi cualp clear disri cualp 1 com 1 jmp datof dato10 movcf 0 ;dato2=0? movrf dato2 cpgf dato20 set basc1 ;seleccion bascula1 set led121 call pesa movrf rpesa stof dato2 clear disrf dato2 41 com 0 movci 2 stoi cualp clear disri cualp 1 com 1 jmp datof dato20 movcf 0 ;dato3=0? movrf dato3 cpgf dato30 set basc1 ;seleccion bascula1 set led121 call pesa movrf rpesa stof dato3 clear disrf dato3 41 com 0 movci 3 stoi cualp com 1 clear disri cualp 1 jmp datof dato30 movcf 0 ;dato4=0? movrf dato4 cpgf dato40 reset basc1 ;seleccion bascula2 reset led121 call pesa movrf rpesa stof dato4 clear disrf dato4 41 com 0 movci 4 stoi cualp com 1 clear disri cualp 1 jmp datof dato40 movcf 0 ;dato5=0? movrf dato5 cpgf dato50 reset basc1 ;seleccion bascula2 reset led121 call pesa movrf rpesa stof dato5 clear disrf dato5 41 com 0 movci 5 stoi cualp clear disri cualp 1 com 1 jmp datof dato50 movcf 0 ;dato6=0? movrf dato6 cpgf datof reset basc1 ;seleccion bascula2 reset led121 call pesa movrf rpesa stof dato6 clear disrf dato6 41 com 0 movci 6 stoi cualp clear disri cualp 1 com 1 datof ret ;pesar. rutina de tomar datos del canal y sacar un peso-------------- pesa movci 0 stoi pesalo ;cuenta loops en entero movcf 0 stof cha1t ;suma todas las lecturas del 110 movri temtiep ;registro temporal para cuadrar tiempo espera toma dato stoi temtie call tempo pesa10 movif cha1 ;calcula n muestras o promedios del canal movrf cha1t addf stof cha1t inc pesalo 1 ld sensor2 jnz pesa10 ;el loop mas importante de toma de peso 110 ############# movrf cha1t movif pesalo divf stof cha1p ;pronmedio del cha1 ld basc1 jnz pesa20 movrf cha1p movrf m1 mulf movrf b1 addf stof rpesa jmp pesaf pesa20 movrf cha1p movrf m2 mulf movrf b2 addf stof rpesa pesaf movrf rpesa movrf tara subf stof rpesa ret ;calc. calculo de valores de peso--------------------------------- ; incrementa prome # de nuestras en el promedio ; datotot peso promedio final sumado calc movrf dato4 ;primer dato fuera de tolerancia menos? movrf dato1 subf stof datot1 movrf datot1 ;primer dato fuera de tol mas? movrf pesmin cplf calc10 movrf dato1 ;dato 1 en tolerancia... movrf pesmax cpgf calc10 movrf datot1 ;adicionelo al promedio movrf datotot addf stof datotot inc prome 1 calc10 movrf dato5 movrf dato2 subf stof datot2 movrf datot2 ;2 dato fuera de tol mas? movrf pesmin cplf calc20 movrf dato2 ;dato 2 en tolerancia... movrf pesmax cpgf calc20 movrf datot2 ;adicionelo al promedio movrf datotot addf stof datotot inc prome 1 calc20 movrf dato6 movrf dato3 subf stof datot3 movrf datot3 ;3 dato fuera de tol mas? movrf pesmin cplf calcf movrf dato3 ;dato 3 en tolerancia... movrf pesmax cpgf calcf movrf datot3 ;adicionelo al promedio movrf datotot addf stof datotot inc prome 1 calcf ret ;moto. mueve motor para correccion---------------------------------- ; motofac factor para generar pulsos ; cueplu varible para contar pulsos ; rele de direccion de movimiento moto movrf datotot ;dato final en tolerancias? movrf motomin cplf moto10 movrf datotot movrf motomax cpgf moto20 jmp motof ;ok en tolerancia.... moto10 movrf datotot movrf motomin subf movrf motofac stofi pulsos reset direc jmp moto30 moto20 movrf datotot movrf motomax subf movrf motofac stofi pulsos set direc moto30 setri cuepul 0 ;variable cuenta pulsos moto40 movri pulsos movri cuepul cpgi motof set rpul setri temtie 5 call tempo reset rpul setri temtie 5 call tempo inc cuepul 1 jmp moto40 motof ret ;borre. borra los datos1...6------------------------------ ; corra todos los datos 1...6 ; borra promedio de muestras prom ; borra peso promeio final datotot ; golp # de golpes para camb io de basc ; inicia basc 1 borre clear com 0 clear com 1 clear com 2 movcf 0 stof dato1 movcf 0 stof dato2 movcf 0 stof dato3 movcf 0 stof dato4 movcf 0 stof dato5 movcf 0 stof dato6 movcf 0 stof datotot movcf 0 stof datot1 movcf 0 stof datot2 movcf 0 stof datot3 setri prome 0 setri golp 0 borref ret ;cali.calibracion de las basculas------------------------------ cali clear ;seleccion de la bascula disri dnumbas 1 com 1 ini 2 stoi numbas movri numbas movci 0 ;no entro numero...retorna cpei cali movri numbas ;bascula 1 movci 1 cpei cali10 movri numbas ;bascula 2 movci 2 cpei cali20 jmp cali cali10 reset basc1 reset led121 clear ;balanza 1 disl cero com 1 ld izq jz cali10 set led126 setri temtie 50 ;toma canal bajo call tempo movci 0 stoi pesalo ;cuenta loops en entero movcf 0 stof cha1t ;suma todas las lecturas del 110 cali11 movif cha1 ;calcula n muestras o promedios del canal movrf cha1t addf stof cha1t inc pesalo 1 movci 1000 movri pesalo cpgei cali11 jmp cali11a cali11a movrf cha1t movif pesalo divf stof cha1p reset led126 movrf cha1p stofi x0 movcf 0 ;guarde el cero stof y0 cali12 clear disl span com 1 ld izq jz cali12 set led126 setri temtie 50 ;toma canal alto call tempo movci 0 stoi pesalo ;cuenta loops en entero movcf 0 stof cha1t ;suma todas las lecturas del 110 cali13 movif cha1 ;calcula n muestras o promedios del canal movrf cha1t addf stof cha1t inc pesalo 1 movci 1000 movri pesalo cpgei cali13 jmp cali13a cali13a movrf cha1t movif pesalo divf stof cha1p reset led126 movrf cha1p stofi x1 inf 2 1 ;guarde el y1 stof y1 movri x1 ;(x1-x0) movri x0 subi stoi xt movrf y1 ;y1/(x1-x0)=m movif xt divf stof m1 movcf -1 ;b= -mx0 movrf m1 mulf movif x0 mulf stof b1 clear com 1 clear com 2 cali14 call disp clear disrf rpesa 41 com 0 ld izq jz cali14 jmp calif cali20 set basc1 set led121 clear ;lo mismo para bascula 2 disl cero com 1 ld izq jz cali20 set led126 setri temtie 50 call tempo movci 0 stoi pesalo ;cuenta loops en entero movcf 0 stof cha1t ;suma todas las lecturas del 110 cali21 movif cha1 ;calcula n muestras o promedios del canal movrf cha1t addf stof cha1t inc pesalo 1 movci 1000 movri pesalo cpgei cali21 jmp cali21a cali21a movrf cha1t movif pesalo divf stof cha1p reset led126 movrf cha1p stofi x0 movcf 0 stof y0 cali22 clear disl span com 1 ld izq jz cali22 set led126 setri temtie 50 call tempo movci 0 stoi pesalo ;cuenta loops en entero movcf 0 stof cha1t ;suma todas las lecturas del 110 cali23 movif cha1 ;calcula n muestras o promedios del canal movrf cha1t addf stof cha1t inc pesalo 1 movci 1000 movri pesalo cpgei cali23 jmp cali23a cali23a movrf cha1t movif pesalo divf stof cha1p reset led126 movrf cha1p stofi x1 inf 2 1 stof y1 movri x1 movri x0 subi stoi xt movrf y1 movif xt divf stof m2 movcf -1 movrf m1 mulf movif x0 mulf stof b2 cali24 call disp clear disrf rpesa 41 com 0 ld izq jz cali24 calif ret ;disp1. display de peso basc1----------------------------------- disp movci 0 stoi pesalo ;cuenta loops en entero movcf 0 stof cha1t ;suma todas las lecturas del 110 disp01 ld 110 ;para la tarjeta MA14-02 out 125 ld 110 jnz disp01a jmp disp01 disp01a ;reset 110 movif cha1 ;calcula n muestras o promedios del canal movrf cha1t addf stof cha1t inc pesalo 1 movri pesaloi movri pesalo cpgei disp01 movrf cha1t movif pesalo divf stof cha1p ld basc1 ;selecciona con cuales registros calcula el peso jnz disp20 disp10 movrf cha1p ;con m1 y b1 movrf m1 mulf movrf b1 addf stof rpesa jmp disp22 disp20 movrf cha1p ;con m2 y b2 movrf m2 mulf movrf b2 addf stof rpesa disp22 ld cle ;como tarar la bascula jz dispf movrf rpesa stof tara dispf movrf rpesa ;resta el valor de la tara movrf tara subf stof rpesa movrf rpesap movrf rpesa addf stof rpesap movrf rpesap movif pesalop divf stof rpesap1 inc pesalop 1 movri pesaloip movri pesalop cpgei disp movrf rpesap1 stof rpesa movci 1 stoi pesalop movcf 0 stof rpesap ret ;dispp, promedio de promedios------------------------- dispp ;-------------------------------------------------------- disp1 call disp clear disrf rpesa 40 com 0 disp1f ret ;tempo. temporizador universal ;parametros: temtie=registro valor de tiempo tempo reset temaux1 reset temaux2 tempo1 ld temaux1 timr timtem temtie out temaux2 set temaux1 ld temaux2 jz tempo1 tempof ret ;--------------------------------------------------------- &leavar ;[REG_RELAYS] sensor1 equ 1 ;sensor de movimiento de banda sensor2 equ 2 ;sensor de llenado ent equ 30 cle equ 31 arr equ 32 izq equ 33 rpul equ 100 ;salida de pulsos direc equ 101 ;direccion movimiento motor basc1 equ 102 ;si esta en 1 esta seleccionada la bascula1(entrada) led118 equ 118 ;indica sensor1 led119 equ 119 indica sensor2 led121 equ 121 ;basc1 on es la de mas peso led126 equ 126 ;indica toma datos de canal en calibracion temaux1 equ 150 ;aux tempo1 temaux2 equ 151 ;aux tempo2 rini20 equ 153 ;aux rele ini20 rini32 equ 154 rini34 equ 155 ;[REG_INTEGERS] cha1 equ 110 ;conversor 1(cali) cha2 equ 111 ;conversor 2 x0 EQU 150 ;canal punto bajo calibracion x1 equ 151 ;canal alto de calibracion xt equ 152 ;x1-x0 numbas equ 153 ;numero de balanza que se calibra temtie equ 154 ;tiempo del temporizador golp equ 156 ;calcula 2 golpes despues de 1 bascula para cambio pesalo equ 157 ;temporal para conteo de loop en pesa prome equ 158 ;cantidad de muestras promedio almacenadas. pulsos equ 159 ;#pulsos para motor cuepul equ 160 ;temporal para pulsos de motor cualp equ 161 ;cual balanza esta pesando pesaloi equ 1100 ;numero de muestreos promedios en pesadas pesaloip equ 1101 pesalop equ 162 rpesai equ 163 temtiep equ 164 ;valor tiempo espera toma dato en pesa ;[REG_FLOATS] y0 equ 10 ;peso bajo de calibracion(cali) y1 equ 11 ;peso alto de calibracion t1 equ 12 ;tara canal 1 t2 equ 13 ;tara canal 2 mx equ 14 ;calculo de -mx dato1 equ 15 ;dato1 basc1(dato) dato2 equ 16 ;dato2 basc1 dato3 equ 17 ;dato3 basc1 dato4 equ 18 ;dato1 basc2 dato5 equ 19 ;dato2 basc2 dato6 equ 20 ;dato3 basc2 datot1 equ 21 ;dato total 1 pesada(calc) datot2 equ 22 datot3 equ 23 datotot equ 24 ;peso total promedio pesmin equ 25 ;peso min para entrar en promedio pesmax equ 26 ;peso max para entrar en promedio rpesa equ 27 ;peso entregado por pesa cha1t equ 28 ;tempral para cha1 cha1p equ 29 ;temporal para cha1 motomin equ 30 ;TOL MIN PARA MOVER MOTOR motomax equ 31 ; motofac equ 32 ;factor de multiplicacion para calcular pulsos tara equ 33 ;tara rpesap equ 34 rpesap1 equ 35 m1 equ 400 ;pendiente m canal 1 m2 equ 401 ;pendiente m canal 2 b1 equ 402 ;punto b canal 1 b2 equ 403 ;punto b canal 2 ;[TIM] timtem equ 48 ;[CNT] ;[NOP] ;TEXTOS cero lite "cero" span lite "span" dnumbas lite "bas" ;VARIABLES PARA INICIAR call borre movci 0 ;inicio en caso que sea cero movri temtiep cpli leavarf movci 3 stoi temtiep &leavarf ret ;-----------------------------------------------