;------------------------------------------------------------- ;Aplicación -> temperatura y humedad relativa ; los movif se guardan en flotantes y luego se llaman ;Fecha -> marzo 29 2003 ;------------------------------------------------------------- mida 64 scan equ 399 &ini ld scan jz &lea jmp ini0 &lea call &leavar ;programa principal ---------------------------------------- ini0 call dbtoma ;toma de base de datos call &lecca64 ;lectura y calibracion de los canales movri &dec ;display con 0 decimales movci 0 cpei ini01 movri &dec ;display con 1 decimal movci 1 cpei ini1 movri &dec ;display con 2 decimales movci 2 cpei ini2 movri &dec ;display con 3 decimales movci 3 cpei ini3 ini01 call disp0 jmp fin ini1 call disp1 jmp fin ini2 call disp2 jmp fin ini3 call disp3 fin end ;fin programa principal---------------------------------------- ;subrutinas de display para diferentes decimales--------------- disp0 clear ;muestra en pantalla disl tem loc 7 disrf &valdat0 60 loc 16 disl hum loc 23 disrf &valdat1 60 com 0 ret disp1 clear ;muestra en pantalla disl tem loc 7 disrf &valdat0 61 loc 16 disl hum loc 23 disrf &valdat1 61 com 0 ret disp2 clear ;muestra en pantalla disl tem loc 7 disrf &valdat0 62 loc 16 disl hum loc 23 disrf &valdat1 62 com 0 ret disp3 clear ;muestra en pantalla disl tem loc 7 disrf &valdat0 63 loc 16 disl hum loc 23 disrf &valdat1 63 com 0 ret ;fin rutinas de display-------------------------------------- ;dbtoma toma de datos --------------------------------------- dbtoma ld tec8 jnz dbtoma0 jmp dbtoma1 dbtoma0 reset dbaux3 reset led5 jmp dbfin dbtoma1 ld dbaux3 ;aux que indica que el puntero esta en eof() jnz db00 ld tec5 ;entra con tecla f5 jnz dbini jmp dbfin dbini clear com 3 reset &enttem reset &cletem clear ;avisos de entrada para e/c disl dbin loc 16 disl &lec com 0 ink &ent out &enttem ink &cle out &cletem ld &enttem ;loop hasta tecla e/c or &cletem jz dbini ld &enttem ;seleccion tecla entra jnz dbini0 ld &cletem ;seleccion tecla sale jnz dbfin jmp dbfin dbini0 reset &enttem ;entra a seleccion de tiempo reset &cletem clear ;avisos de entrada para e/c disl dbtimm loc 16 disl dblec com 0 ld &ent out &enttem ld &cle out &cletem ld &enttem ;loop hasta tecla e/c or &cletem jz dbini ld &enttem ;seleccion tecla entra jnz dbini00 ld &cletem ;seleccion tecla sale jnz db0 dbini00 movri dbtiem ;reg tiempo/10 para mostrar en display movci 10 divi stoi dbtiemd clear ;cambia el tiempo disl dbcamt loc 12 disri dbtiemd 4 com 0 ini 4 stoi dbtiemt movri dbtiemt ;si es cero no cambia el tiempo anterior movci 0 cpei db0 movri dbtiemt movci 10 muli stoi dbtiem db0 set led5 ;indica inicio de toma de datos movci 0 stoi 50 ;puntero fichero movri dbtiem movci 2 divi stoi dbtiem0 movri dbtiem0 stoi dbtiem1 db00 ld dbaux4 ;aux para saber que ya en timr jnz db1 reset dbaux1 ;inicio del timr reset dbaux2 reset dbaux5 reset dbaux6 db1 ld dbaux1 ;temporrizacion toma de datos timr dbtim dbtiem0 ;tiempo total/2 out dbaux2 set dbaux1 set dbaux3 set dbaux4 ld dbaux2 jnz db2 jmp dbfin db2 ld dbaux5 timr dbtim1 dbtiem1 ;tiempo total/2 out dbaux6 set dbaux5 ld dbaux6 jnz db22 jmp dbfin db22 write 0 1 ;escritura de datos clear disri 50 4 ;muestra el puntero en com3 com 3 reset dbaux4 movri 50 ;pregunta si llego al final eof() movri dbpunt ;largo de la db 1000 cpei db3 jmp dbfin db3 reset dbaux3 ;si llego al eof reset led5 y aux3 reset led5 dbfin ret ;fin toma de datos----------------------------------------------- ;============================================================== ;&lecca64 ;programa que permite calibracion en dos puntos y genera resultado ;en registros 20 y 21 &lecca64 &ini0 ld &up ;teclas para entrar a calibrar and &dow out &encal ld &encal jnz &ini1 jmp &ini2 &ini1 call &men ;menu de calibracion &ini2 ld &auxc0 ;aux para cambio de canal de 60 a 61 xor &auxc1 out &auxcf jz &canal0 jmp &canal1 &canal0 movci 60 ;datos para canal 60 stoi &can movfx &kt0 stof &kt movri &p00 stoi &p0t movrf &p0v0 stof &p0vt jmp &ini22 &canal1 movci 61 ;datos para canal 61 stoi &can movfx &kt1 stof &kt movri &p01 stoi &p0t movrf &p0v1 stof &p0vt &ini22 movci 0 ;inicio de los calculos de promedio stoi &procon movcf 0 stof &summed &ini3 movix &can ;suma en summed x veces el valor del canal stoi &cantem movif &cantem stof &cantemf movrf &cantemf movrf &summed addf stof &summed inc &procon 1 movri &procon movri &pro cpli &ini3 movif &procon stof &proconf movrf &summed ;divide summed entre el numero de muestras para sacar el promedio movrf &proconf divf stof &valtem ;es Y lo pasa a flotante el promedio de los puntos del conversor movif &p0t stof &p0tf movrf &valtem ;X-Xo movrf &p0tf subf stof &valmed1 movrf &valmed1 ;multiplica por k movrf &kt mulf stof &valmed2 movrf &valmed2 ;suma Yo Y=k(X-Xo)+Yo movrf &p0vt addf stof &valdat movri &can ;si es canal 60 guarda en &k0 movci 60 cpei &val0 movri &can ;si es 61 guarda en &k1 movci 61 cpei &val1 jmp &fin &val0 movrf &valdat stof &valdat0 jmp &fin &val1 movrf &valdat stof &valdat1 &fin ld &auxcf ;cambia para hacer la xor out &auxc1 ret ;fin programa principal-------------------------------- ;&men--------------------------------------------------- &men clear ;avisos de entrada pra e/c disl &lcal loc 16 disl &lec com 0 ink &ent out &enttem ink &cle out &cletem ld &enttem ;loop hasta tecla e/c or &cletem jz &men ld &enttem ;seleccion tecla jnz &men1 ld &cletem jnz &menf jmp &menf &men1 clear ;numero promedios de lecturas disl &prolec loc 12 disri &pro 4 com 0 ini 5 stoi &prot movri &prot movci 0 cpei &men12 movri &prot stoi &pro &men12 clear ;numero de decimales disl &decdis loc 15 disri &dec 1 com 0 ini 2 stoi &dec &men13 clear ;entrada a calibracion disl &calib loc 16 disl &lecup com 0 ld &up out &enttem ld &cle out &cletem ld &enttem ;loop hasta tecla e/c or &cletem jz &men13 ld &enttem ;seleccion tecla jnz &men14 ld &cletem jnz &menf jmp &menf &men14 clear ;seleccion del canal disl &canal com 0 ini 3 stoi &can clear ;seleccion punto bajo disl &lp_0 com 0 inf 5 1 ;valor punto 0 stof &p0v movix &can stoi &p0 clear ;seleccion punto alto disl &lp_1 com 0 inf 5 1 ;valor punto 1 stof &p1v movix &can stoi &p1 movri &p1 ;calculo X-Xo movri &p0 subi stoi &resx movrf &p1v ;calculo Y-Yo movrf &p0v subf stof &resy movif &resx stof &resxf movrf &resy movrf &resxf divf stof &k movri &can ;si es canal 60 guarda en &k0 movci 60 cpei &k60 movri &can ;si es 61 guarda en &k1 movci 61 cpei &k61 jmp &mens &k60 movrf &k stof &k0 movri &p0 stoi &p00 movrf &p0v stof &p0v0 jmp &mens &k61 movrf &k stof &k1 movri &p0 stoi &p01 movrf &p0v stof &p0v1 &mens clear com 0 clear com 1 &menf ret ;leavar================================================= &leavar ;[REG_RELAYS] &ent equ 340 &cle equ 341 &up equ 342 &dow equ 343 &encal equ 500 &enttem equ 501 &cletem equ 502 &auxc0 equ 503 &auxc1 equ 504 &auxcf equ 505 dbaux1 equ 506 dbaux2 equ 507 dbaux3 equ 508 dbaux4 equ 509 dbaux5 equ 510 dbaux6 equ 511 tec5 equ 360 led5 equ 324 tec8 equ 363 ;[REG_INTEGERS] &can equ 504 ;canal a leer integer &bas equ 505 ;numero de bascula para funciones func &dec equ 506 ;decimales para canal 0 &pro equ 507 ;numero de muestras para sacar promedio &fes equ 508 &tar equ 509 ;tara para canal 0 &cer equ 510 &procon equ 511 ;aux de &pro para llevar conteo de numero de muestras tomadas &p0 equ 512 ;puntos canal 0 para calibrar &p1 equ 513 ;puntos canal 0 para calibrar &kt0 equ 514 &kt1 equ 515 &resx equ 516 ;resta de X-Xo &valtemi equ 517 &cantem equ 518 ;temporal de &can para pasarlo a flotante &p00 equ 519 &p01 equ 520 &p0t equ 521 dbtiem equ 524 ;tiempo para toma de datos dbpunt equ 525 dbtiem0 equ 526 ;dbtiem/2 por si el tiempo es mayor a 32000 dbtiem1 equ 527 ;dbtiem/2 dbtiemt equ 528 ;guarda el tiempo en temporal para ver si es cero dbtiemd equ 529 ;timp/10 para mostrar en display &prot equ 530 &dect equ 532 ;[REG_FLOATS] &valdat equ 20 &valtem equ 500 &resy equ 501 ;resta de Y-Yo &k equ 502 ;k para canal 0 &p0v equ 503 ;dato0 canal 0 para calibrar &p1v equ 504 ;dato1 canal 0 para calibrar &summed equ 505 &valmed equ 506 &valmed1 equ 507 &valmed2 equ 508 &valmed3 equ 509 &valmed4 equ 510 &k0 equ 511 &k1 equ 512 &p0v0 equ 513 &p0v1 equ 514 &p0vt equ 515 &kt equ 516 &cantemf equ 517 &proconf equ 518 &p0tf equ 519 &resxf equ 520 &valdat0 equ 21 &valdat1 equ 22 ;[TIM] dbtim equ 250 dbtim1 equ 251 ;[CNT] ;[NOP] ;[textos] &lcal lite "calibracion" &lec lite "Enter / Clear" &lecup lite "Up / Clear" &lp_0 lite "Punto bajo" &lp_1 lite "Punto alto" &canal lite "Canal (60-61)" tem lite "Temp:" hum lite "Hr%:" dbin lite "Inicia tom_dat?" ;15 dbtimm lite "Tiempo(sg):" ;11 dblec lite "Ent(si)/Cle(no)" :15 dbcamt lite "Tiempo(sg)" &prolec lite "Lec.Pro." &decdis lite "Decimales" &calib lite "Calibra?" ;iniciar variables-------------------------------- file 0,40i,41i,42i,44i,45i,46i,47i,21f,22f,len=1000,type=l movci 1000 stoi &pro movci 1 stoi &bas set &auxc0 movci 511 stoi &kt0 movci 512 stoi &kt1 reset dbaux3 movci 10 stoi dbtiem movci 1000 stoi dbpunt movci 3 stoi &dec movci 0 ;temporal!!! stoi &bas ret ;======================================================