#include "bios.h"
#include "conio.h"
#include "stdio.h"

char err_no=0;

main()
{
        unsigned char readbuf[100],*p;
        int i;

        clrscr();
        gotoxy(3,2);
        printf("measuring from the IDRC CP-300 POWER METER ...............");

        initial_sys();                  /* initial RS-232 BAUD_RATE=2400 */

        send("R1");        /* set fix range                             */
        send("V3");        /* set voltage range to 500 V                */
        send("A3");         /* set current range to 20 A ( 50 A or 60 A) */

        for(i=0;i<10;i++)
                {
                if(err_no==1)
                    break;

                send("?S;");       /* reading measurement data   */
                p=readbuf;
                read(p);

                gotoxy(3,4+2*i);
                printf("reading = %s\n",readbuf);

                }
        send("LOCAL;");           /* set device to local mode   */

 }

initial_sys()
{
        outportb(0x3fb,0x80);
        outportb(0x3f8,0x30);
        outportb(0x3f9,0x00);
        outportb(0x3fb,0x07);
        outportb(0x3fb,0x03);
};

send(unsigned char *p)
{
        unsigned status;
        int      i,j,k;

        j=strlen(p);
        for(i=0;i<j;i++)
                {
                for(k=0;k<10000;k++)
                        {
                         status=inportb(0x3fd);
                         if(status & 0x20)
                               {
                                if(*p==';')
                                     outportb(0x3f8,0x0d);
                                else
                                    {
                                     outportb(0x3f8,*p);
                                     p++;
                                     }
                                break;
                                }
                        }

                if(k==10000)
                        {
                         err_no=1;
                         gotoxy(3,23);
                         printf("RS232 sending timeout..............");
                         break;
                         }
               }
}

read(unsigned char *p)
{
        unsigned char status;
	long int   k;

	err_no=1;
	for(k=0;k<3000000;k++)
                {
                 status=inportb(0x3fd);
                 if(status & 0x01)
                        {
                         *p=inportb(0x3f8);
                         if(*p==0x0a)
                                {
                                 *++p=0;
				 err_no=0;
				 break;
                                 }

                        p++;
			}
		}

	if(err_no==1)
	      {
	       gotoxy(3,23);
	       printf("RS232 reading timeout..............\n");
	       }
}
