/* SPHINX Programming 1994 P.Freyer 20 avril 96 */ ? print "options compilation...\n" ? parsecommandline TRUE ? stack 2*1024 // 2k stack ? align ? beep ? DOSrequired 0x0600 ? maxerrors 4 ? use8086 ? ctrl_c TRUE ? print "fichiers entete *.H--\n" ?include "inc\\VIDEO.H--" ?include "inc\\WRITE.H--" ?include "inc\\STRING.H--" ?include "inc\\VESA.H--" ?include "inc\\DOS.H--" ?include "inc\\SYSTEM.H--" // Low level system. ?include "inc\\GWRITE.H--" // Graphics mode text output. ? print "declaration de variables..\n" word count,parameters; long MU,MR; byte a,b,c; int i,j,k,k1,l; int Adc; int x0,x1,y0,y1; byte RAZ[100]; int m,Nb; long ,kl,Total; long Moyenne; //char Cputype[4]={" 8086"," 80186"," 80286"," 80386"," 80486" }; /* voir version TST7896.C En Entree: passage parametre LPTx En Sortie: 1 mesure de tension par adc AD 7896 format 12 bits utilise regulateur ZRT401 4,01V comme reference tension LM135DZ comme capteur de temperature Hardware: 2= D0 = clock 3= D1 = selection boitier 11= BUSY= lecture bit 14= AUTO FEED = alimentation montage */ ? define BUSY 128 //masque pour test BUSY ? define TEXTE 03 ? print "debut de main\n" void main () { k=632; WRITESTR("Parametres ligne de commande : "); parameters = @ PARAMCOUNT(); WRITEWORD(parameters); WRITESTR(" \n"); count = 0; IF( count < parameters ) {do {WRITESTR("parametre #"); WRITEWORD(count); WRITESTR(" : \ "); WRITESTR(PARAMSTR(count)); WRITELN(); count++; } while(count < parameters); } i=STRLEN(PARAMSTR(0)); IF (STRCMP(PARAMSTR(0),"632")>0) k=632; IF (STRCMP(PARAMSTR(0),"888")>0) k=888; WRITESTR("parametre Adc passe = "); WRITEWORD(k); if (k<889) { if(k>631) Adc=k; } WAIT(40); i=0; do { BX=i; RAZ[BX]=0; i=i+1; } while (i<100); BX=100; RAZ[BX]=0; INITADC(); WAIT(10); /* i= setVESAvideomode(VESA_800x600_256);*/ i= setVESAvideomode(0x103); GWRITESTR("retour mode VESA :");WRITEHEX(i);WAIT(50); if (i==0) { GWRITESTR("\nLecture Temperature en 1/10øC via LM35DZ + AD7896 12 bits en Mode VESA 800x600.",10); GWRITESTR("\n P.F.Octobr 2000 en SPHINX C__ +asm V0.2 9710. "); GWRITESTR(" Adresse Adc=",14);GWRITEWORD(Adc); GWRITESTR("\n",7); } ELSE GWRITESTR("Impossible d'initialiser ce mode VESA.\n",4); DX = Adc; i=0; j=4; Nb=0; x0=750; x1=750; y0=590; Total=0; Nb=0; do { GOTOXY(i,j); i=i+8; if (i>80) { i=0;j=j+1;}; if (j>26) { j=3; /* GOTOXY(70,27);WRITELONG(Total);*/ Moyenne=Total * 10; Moyenne=Moyenne/Nb; /*GOTOXY(76,27);GWRITEWORD(Nb);*/ MU=Moyenne/100; /* GOTOXY(70,28);WRITEDWORD(Moyenne); GOTOXY(76,28);GWRITEWORD(Nb); */ Total=MU*100; MR=Moyenne-Total; GOTOXY(0,31); GWRITESTR("Moyenne : "); GOTOXY(0,31); GWRITESTR("Moyenne : ",2); GWRITEWORD(MU);GWRITESTR(".");GWRITEWORD(MR); GWRITESTR("øC sur ");GWRITEWORD(Nb);GWRITESTR(" datas"); Nb=0; Total=0; GOTOXY(i,j); } k=LECTADC(Adc); Total=Total+k; Nb=Nb+1; WRITEDIGITS(k); x0= k / 10; x1= x0 * 10; k1=k-x1; x1=k1*3; /* probleme ............... BX=0 RAZ[BX]=0; GWRITESTR(RAZ[0],4); ..........................*/ l=0; k1=k/10; GOTOXY(0,28); GWRITESTR("0....5....10...15....20...25....30...35....40...45....50øC <- Echelle",4); GOTOXY(0,30); GWRITESTR("0.1..2..3..4..5..6..7..8..9 <- Zoom 1/10 øC",14) ; do { GOTOXY(l+1,27); if (l<=x0) GWRITESTR("²",4); else GWRITESTR(" ",0); l++; }while (l<55); l=0; do { GOTOXY(l+1,29); if (l selection boitier, clock=0 $ OUT DX,AL //1 er front descendant $ NOP $ MOV AL,2 $ OUT DX,AL $ INC DX $ NOP Testbusy: $ IN AL,DX $ TEST AL,64 $ JNZ Testbusy $ DEC DX $ MOV CX,2048 // 2 ^11 car bit 0 a bit 11 => 12 bits $ MOV BX,0 //init mesure a 0 $ MOV AL,3 // 1er front $ OUT DX,AL $ MOV AL,2 $ OUT DX,AL $ MOV AL,3 // 2em $ OUT DX,AL $ MOV AL,2 $ OUT DX,AL $ MOV AL,3 // 3em $ OUT DX,AL $ MOV AL,2 $ OUT DX,AL $ MOV AL,3 // 4em $ OUT DX,AL $ MOV AL,2 $ OUT DX,AL L0: $ MOV AL,3 $ OUT DX,AL $ INC DX //positionne @ Port sur LPTX+1 $ IN AL,DX //lecture ACK @ Port LPTX+1 $ DEC DX //repositionne DX sur LPTX $ TEST AL,128 $ JNZ L1 $ OR BX,CX L1: $ MOV AL,2 $ OUT DX,AL $ SHR CX,1 $ JNC L0 $ MOV AL,0 $ OUT DX,AL $ MOV AX,BX //retour mesure $ AND AX,16383 $ STI return (AX); } /* ?print "Put Pixel\n " word PUTPIXELBIOS() { CX=X0; DX=k; $ MOV AL,0x00 $ MOV AH,0x0C $ MOV BX,0x0001 $ MOV BH,BL $ INT 16 return(AX); } */ /* On entry: ES:SI = segment:offset of string On return: word in AX word Atoi() { $ XOR AX,AX; CX = 10; $ XOR BH,BH NEXT_CHAR: BL = ESBYTE[SI]; IF (BL < '0') $ JMP DONE IF (BL > '9') $ JMP DONE $ MUL CX BL -= '0'; AX += BX; SI++; $ JMP NEXT_CHAR DONE: } */ ? print "fin de compilation ........ Ok.\n" /* end of Base00.C-- */