home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1996 September
/
pcwk_09_96.iso
/
demo
/
wgelectr
/
pk51demo
/
files.2
/
EXAMPLES
/
MEASURE
/
MCOMMAND.C
< prev
next >
Wrap
C/C++ Source or Header
|
1995-06-08
|
6KB
|
122 lines
/*------------------------------------------------------------------------------
MCOMMAND.C: Time Set Commands for the Remote Measurement Recorder
Copyright 1995 KEIL Software, Inc.
------------------------------------------------------------------------------*/
#include <stdio.h> /* standard ANSI I/O .h-file */
#include <reg515.h> /* special function register 80515 */
struct clock { /* structure of the clock record */
unsigned char hour; /* hour */
unsigned char min; /* minute */
unsigned char sec; /* second */
unsigned int msec; /* milli second */
};
struct mrec { /* structure for measurement records */
struct clock time; /* time of measurement */
unsigned char port4; /* state of port 4 */
unsigned char port5; /* state of port 5 */
unsigned char analog [4]; /* voltage on analog Pins AN0 .. AN3 */
};
struct interval { /* structure for interval record */
unsigned char min; /* minute */
unsigned char sec; /* second */
unsigned int msec; /* millisecond */
};
extern code char ERROR []; /* ERROR message string */
extern struct mrec current; /* current measurements */
extern struct interval setinterval; /* interval setting values */
extern struct interval interval; /* interval counter */
/******************************************************************************/
/* Display measurements */
/******************************************************************************/
measure_display (struct mrec display) {
unsigned char i; /* index count for AN0 - AN3 */
printf ("\rTime: %2bd:%02bd:%02bd.%03d P4:%b02X P5:%b02X ",
display.time.hour, /* display hour */
display.time.min, /* display minute */
display.time.sec, /* display second */
display.time.msec, /* display millisecond */
display.port4, /* display port 4 value */
display.port5); /* display port 5 value */
for (i = 0; i != 4; i++) { /* display AN0 through AN3 */
printf (" AN%bd:%4.2fV", i, (float) display.analog[i] * 5.0 / 256);
}
}
/******************************************************************************/
/* Set Current Time */
/******************************************************************************/
void set_time (char * buffer)
{
struct clock time; /* temporary time values */
unsigned char args; /* number of arguments */
time.sec = 0; /* preset seconds... */
time.msec = 0; /* ...and milliseconds */
args = sscanf (buffer, "%bd:%bd:%bd", /* scan input line for */
&time.hour, /* hour, minute and second */
&time.min,
&time.sec);
if (time.hour > 23 || time.min > 59 || /* check for valid inputs */
time.sec > 59 || args < 2 || args == EOF) {
printf (ERROR, "INVALID TIME FORMAT");
}
else { /* if inputs valid then */
EAL = 0; /* disable interrupts while */
current.time = time; /* setting the new time */
interval.min = 0; /* force new interval */
interval.sec = 0;
interval.msec = 0;
EAL = 1; /* enable interrupts again */
}
}
/******************************************************************************/
/* Set Interval Time */
/******************************************************************************/
void set_interval (char * buffer) {
struct interval itime; /* temporary interval record */
unsigned char args; /* number of arguments */
float second; /* float sec for ss.mmm format */
args = sscanf (buffer, "%bd:%f", /* scan input line for */
&itime.min, /* minute, second and */
&second); /* milliseconds */
/* check valid inputs */
if (second >= 60.0 || args < 2 || args == EOF) {
printf (ERROR, "INVALID INTERVAL FORMAT");
}
else { /* if inputs are valid then */
itime.sec = second; /* calculate second and millisecond..*/
itime.msec = (second - itime.sec) * 1000; /* ..from float values */
if (itime.min != 0 || itime.sec != 0 || itime.msec != 0) {
if (itime.msec-- == 0) { /* correct interval time for */
itime.msec = 999; /* interrupt routine */
if (itime.sec-- == 0) {
itime.sec = 59;
itime.min--;
}
}
}
EAL = 0; /* disable interrupts for copy */
setinterval = itime; /* of the new setinterval time */
interval.min = 0; /* force new interval */
interval.sec = 0;
interval.msec = 0;
EAL = 1; /* enable interrupts again */
}
}