THERM.C
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:2k
源码类别:

操作系统开发

开发平台:

DOS

  1. /*
  2.  * therm.exe - display thermometer results
  3.  *           - see README file
  4.  */
  5. #include <rtos.h>
  6. #include <kconio.h>
  7. #include <ldriver.h>
  8. #include <emath.h>
  9. /*********************************************************************/
  10. /*********************************************************************/
  11. /***********************************************************************/
  12. /***********************************************************************/
  13. void therm_thread(DWORD port)
  14. {
  15.     int i, j;
  16.     int a;
  17.     // float temp;
  18.     int degreesF, degreesC;
  19.     EM emF, emC;
  20.     char buffer[ 64 ];
  21.     for ( j = 0 ; j < 10 ; ++j ) {
  22.         for ( i = 0 ; i < 2 ; ++i ) {
  23.             PutA2DChannel( i );
  24.             a = GetA2D();
  25.             /* integer calculations */
  26.             degreesC = (a-2732)/10;
  27.             degreesF = ( (a*9)/5 - 4597 ) / 10;
  28.             /* fixed point, higher accuracy calculations */
  29.             emC = EM_DIV( EM_SUB( EM_ASSIGN(a,1), EM_ASSIGN( 2732 , 1 )), EM_ASSIGN( 10, 1));
  30.             emF = EM_DIV( EM_SUB( EM_MUL(EM_ASSIGN(a,1),EM_ASSIGN(9,5)), EM_ASSIGN( 4597,1)),EM_ASSIGN(10,1));
  31.             cprintf("sensor %u: %i F, %i C,  ", i, degreesF, degreesC );
  32.             cprintf(" %s F, ", emtostr( emF, buffer ));
  33.             cprintf(" %s C  ", emtostr( emC, buffer ));
  34.             cprintf("rn");
  35.         }
  36.         rt_sleep( 1000 );
  37.     }
  38.     rt_halt("done");
  39. }
  40. /*********************************************************************/
  41. main ()
  42. {
  43.     int msg;
  44.     DWORD data;
  45.     rt_init (200);
  46.     rt_timerfreq( 100 );
  47.     kpreemptive = 1;
  48.     rt_newthread(therm_thread, 0 , 8192, 0, "therm session" );
  49.     kreadmessage( &msg, &data );
  50. }