ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
68937 Топик полностью
Гудвин (14.09.2006 22:35, просмотров: 1) ответил -Tумблер- на Ничего не понимаю. :(
+1 И я о том-же... Как припрет, ужом изовьешься, лишь бы было полезно... 

#include <windows.h>
#include <dos.h>

#define ST_PORT	        0x368           /*  Адрес программного запуска      */

#define TIMER_0		0x36c           /*  Адрес 0-го таймера/счетчика 	*/
#define TIMER_1		0x36d           /*  Адрес 1-го таймера/счетчика 	*/
#define TIMER_2		0x36e           /*  Адрес 2-го таймера/счетчика 	*/
#define TIMER_CTRL	0x36f           /*  Адрес управляющего регистра таймера	*/


#define INTR 0X8    /* The clock tick interrupt */

#ifdef __cplusplus
    #define __CPPARGS ...
#else
    #define __CPPARGS
#endif

int count=0;      
int count1=0;
int out_mas[8];
unsigned char out_val;
unsigned char i;


void FAR interrupt ( *oldhandler)(__CPPARGS);

void FAR interrupt handler(__CPPARGS)
{
      count++;
      count1++;
      outportb(0x378,out_val);
      for(i=0;i<8;i++)
   	 {
   	   if(out_mas[i] < count) out_val &= 255-(1<<i);
	   else  out_val |= (1<<i);
         }
      if(count==31)count=0;

      if(count1==128)

	   {
	    count1=0;
	    oldhandler(); /* call the old routine */
	    }
       else outportb(0x20,0x20);

}




#pragma argsused
int FAR PASCAL LibMain( HINSTANCE hInstance, WORD wDataSegment,
                                   WORD wHeapSize, LPSTR lpszCmdLine )
{
    if ( wHeapSize != 0 )
	UnlockData( 0 );

  outp(0x364,0);  //init adc
  outp(TIMER_CTRL, 0x34);               /*  Задание частоты запусков АЦП	*/
  outp(TIMER_0, 0xff);                  /*  Частота = 2000/К (кГц)		*/
  outp(TIMER_0, 0x00);                    /*  К - код в счетчике 0		*/

  outp(TIMER_CTRL, 0x74);               /*  Задание частоты запусков АЦП	*/
  outp(TIMER_1, 0xff);                  /*  Частота = 2000/К (кГц)		*/
  outp(TIMER_1, 0x00);                    /*  К - код в счетчике 0		*/


     oldhandler = getvect(INTR);
     setvect(INTR, handler);
     outportb(0x43,0x36);
     outportb(0x40,0);
     outportb(0x40,0x2); //18.2*128
     return 1; 
}


#pragma argsused
int FAR PASCAL WEP ( int bSystemExit )
{
    setvect(INTR, oldhandler);
    outportb(0x43,0x36);
    outportb(0x40,0);
    outportb(0x40,0); //18.2
    return 1;
}


int  FAR PASCAL _export ADC(int   * channel)

{
  outp(0x360,* channel);
  while(! (inp(0x366) & 1));
  return((inpw(0x360)) & 0xfff);
}


void FAR PASCAL _export DAC(int *channel,int *value)

{
  out_mas[*channel] = *value >>7;

}