|
#include "pic.h"
#include "fls.h"
#include "picpc.h"
#include <math.h>
volatile unsigned char INDF; // 0x00;
volatile unsigned char TMR0; // 0x01;
volatile unsigned char PCL; // 0x02;
volatile unsigned char STATUS; // 0x03;
unsigned char FSR; // 0x04;
volatile unsigned char PORTA; // 0x05;
volatile unsigned char PORTB; // 0x06;
volatile unsigned char PORTC; // 0x07;
#ifdef __PINS_40
volatile unsigned char PORTD; // 0x08;
volatile unsigned char PORTE; // 0x09;
#endif
unsigned char PCLATH; // 0x0A;
volatile unsigned char INTCON; // 0x0B;
volatile unsigned char PIR1; // 0x0C;
volatile unsigned char PIR2; // 0x0D;
volatile unsigned char TMR1L; // 0x0E;
volatile unsigned char TMR1H; // 0x0F;
volatile unsigned char T1CON; // 0x10;
volatile unsigned char TMR2; // 0x11;
volatile unsigned char T2CON; // 0x12;
#if !defined(_16F870) && !defined(_16F871)
volatile unsigned char SSPBUF; // 0x13;
volatile unsigned char SSPCON; // 0x14;
#endif
volatile unsigned char CCPR1L; // 0x15;
volatile unsigned char CCPR1H; // 0x16;
volatile unsigned char CCP1CON; // 0x17;
#ifndef _16F872
volatile unsigned char RCSTA; // 0x18;
volatile unsigned char TXREG; // 0x19;
volatile unsigned char RCREG; // 0x1A;
#if !defined(_16F870) && !defined(_16F871)
volatile unsigned char CCPR2L; // 0x1B;
volatile unsigned char CCPR2H; // 0x1C;
volatile unsigned char CCP2CON; // 0x1D;
#endif
#endif
volatile unsigned char ADRESH; // 0x1E;
volatile unsigned char ADCON0; // 0x1F;
/* bank 1 registers */
unsigned char bank1 OPTION; // 0x81;
volatile unsigned char bank1 TRISA; // 0x85;
volatile unsigned char bank1 TRISB; // 0x86;
volatile unsigned char bank1 TRISC; // 0x87;
#ifdef __PINS_40
volatile unsigned char bank1 TRISD; // 0x88;
volatile unsigned char bank1 TRISE; // 0x89;
#endif
volatile unsigned char bank1 PIE1; // 0x8C;
volatile unsigned char bank1 PIE2; // 0x8D;
volatile unsigned char bank1 PCON; // 0x8E;
#if !defined(_16F870) && !defined(_16F871)
volatile unsigned char bank1 SSPCON2; // 0x91;
#endif
volatile unsigned char bank1 PR2; // 0x92;
#if !defined(_16F870) && !defined(_16F871)
volatile unsigned char bank1 SSPADD; // 0x93;
volatile unsigned char bank1 SSPSTAT; // 0x94;
#endif
#ifndef _16F872
volatile unsigned char bank1 TXSTA; // 0x98;
volatile unsigned char bank1 SPBRG; // 0x99;
#endif
#ifdef __A_TYPE
volatile unsigned char bank1 CMCON; // 0x9C;
volatile unsigned char bank1 CVRCON; // 0x9D;
#endif
volatile unsigned char bank1 ADRESL; // 0x9E;
volatile unsigned char bank1 ADCON1; // 0x9F;
/* bank 2 registers */
volatile unsigned char bank2 EEDATA; // 0x10C;
volatile unsigned char bank2 EEADR; // 0x10D;
volatile unsigned char bank2 EEDATH; // 0x10E;
volatile unsigned char bank2 EEADRH; // 0x10F;
/* bank 3 registers */
volatile unsigned char bank3 EECON1; // 0x18C;
volatile unsigned char bank3 EECON2; // 0x18D;
/* STATUS bits */
volatile bit IRP ; // (unsigned)&STATUS*8+7;
volatile bit RP1 ; // (unsigned)&STATUS*8+6;
volatile bit RP0 ; // (unsigned)&STATUS*8+5;
volatile bit TO; // (unsigned)&STATUS*8+4;
volatile bit PD; // (unsigned)&STATUS*8+3;
volatile bit ZERO ; // (unsigned)&STATUS*8+2;
volatile bit DC ; // (unsigned)&STATUS*8+1;
volatile bit CARRY ; // (unsigned)&STATUS*8+0;
/* PORTA bits */
volatile bit RA5; // (unsigned)&PORTA*8+5;
volatile bit RA4; // (unsigned)&PORTA*8+4;
volatile bit RA3; // (unsigned)&PORTA*8+3;
volatile bit RA2; // (unsigned)&PORTA*8+2;
volatile bit RA1; // (unsigned)&PORTA*8+1;
volatile bit RA0; // (unsigned)&PORTA*8+0;
/* PORTB bits */
volatile bit RB7; // (unsigned)&PORTB*8+7;
volatile bit RB6; // (unsigned)&PORTB*8+6;
volatile bit RB5; // (unsigned)&PORTB*8+5;
volatile bit RB4; // (unsigned)&PORTB*8+4;
volatile bit RB3; // (unsigned)&PORTB*8+3;
volatile bit RB2; // (unsigned)&PORTB*8+2;
volatile bit RB1; // (unsigned)&PORTB*8+1;
volatile bit RB0; // (unsigned)&PORTB*8+0;
/* PORTC bits */
volatile bit RC7; // (unsigned)&PORTC*8+7;
volatile bit RC6; // (unsigned)&PORTC*8+6;
volatile bit RC5; // (unsigned)&PORTC*8+5;
volatile bit RC4; // (unsigned)&PORTC*8+4;
volatile bit RC3; // (unsigned)&PORTC*8+3;
volatile bit RC2; // (unsigned)&PORTC*8+2;
volatile bit RC1; // (unsigned)&PORTC*8+1;
volatile bit RC0; // (unsigned)&PORTC*8+0;
/* PORTD bits */
#ifdef __PINS_40
volatile bit RD7; // (unsigned)&PORTD*8+7;
volatile bit RD6; // (unsigned)&PORTD*8+6;
volatile bit RD5; // (unsigned)&PORTD*8+5;
volatile bit RD4; // (unsigned)&PORTD*8+4;
volatile bit RD3; // (unsigned)&PORTD*8+3;
volatile bit RD2; // (unsigned)&PORTD*8+2;
volatile bit RD1; // (unsigned)&PORTD*8+1;
volatile bit RD0; // (unsigned)&PORTD*8+0;
/* PORTE bits */
volatile bit RE2; // (unsigned)&PORTE*8+2;
volatile bit RE1; // (unsigned)&PORTE*8+1;
volatile bit RE0; // (unsigned)&PORTE*8+0;
#endif
/* INTCON bits */
volatile bit GIE; // (unsigned)&INTCON*8+7;
volatile bit PEIE; // (unsigned)&INTCON*8+6;
volatile bit T0IE; // (unsigned)&INTCON*8+5;
volatile bit INTE; // (unsigned)&INTCON*8+4;
volatile bit RBIE; // (unsigned)&INTCON*8+3;
volatile bit T0IF; // (unsigned)&INTCON*8+2;
volatile bit INTF; // (unsigned)&INTCON*8+1;
volatile bit RBIF; // (unsigned)&INTCON*8+0;
// alternate definitions
volatile bit TMR0IE; // (unsigned)&INTCON*8+5;
volatile bit TMR0IF; // (unsigned)&INTCON*8+2;
/* PIR1 bits */
#ifdef __PINS_40
volatile bit PSPIF; // (unsigned)&PIR1*8+7;
#endif
volatile bit ADIF; // (unsigned)&PIR1*8+6;
#ifndef _16F872
volatile bit RCIF; // (unsigned)&PIR1*8+5;
volatile bit TXIF; // (unsigned)&PIR1*8+4;
#endif
#if !defined(_16F870) && !defined(_16F871)
volatile bit SSPIF; // (unsigned)&PIR1*8+3;
#endif
volatile bit CCP1IF; // (unsigned)&PIR1*8+2;
volatile bit TMR2IF; // (unsigned)&PIR1*8+1;
volatile bit TMR1IF; // (unsigned)&PIR1*8+0;
/* PIR2 bits */
#ifdef __A_TYPE
volatile bit CMIF; // (unsigned)&PIR2*8+6;
#endif
volatile bit EEIF; // (unsigned)&PIR2*8+4;
#if !defined(_16F870) && !defined(_16F871)
volatile bit BCLIF; // (unsigned)&PIR2*8+3;
#ifndef _16F872
volatile bit CCP2IF; // (unsigned)&PIR2*8+0;
#endif
#endif
/* T1CON bits */
volatile bit T1CKPS1; // (unsigned)&T1CON*8+5;
volatile bit T1CKPS0; // (unsigned)&T1CON*8+4;
volatile bit T1OSCEN; // (unsigned)&T1CON*8+3;
volatile bit T1SYNC ; // (unsigned)&T1CON*8+2;
volatile bit TMR1CS ; // (unsigned)&T1CON*8+1;
volatile bit TMR1ON ; // (unsigned)&T1CON*8+0;
/* T2CON bits */
volatile bit TOUTPS3; // (unsigned)&T2CON*8+6;
volatile bit TOUTPS2; // (unsigned)&T2CON*8+5;
volatile bit TOUTPS1; // (unsigned)&T2CON*8+4;
volatile bit TOUTPS0; // (unsigned)&T2CON*8+3;
volatile bit TMR2ON ; // (unsigned)&T2CON*8+2;
volatile bit T2CKPS1; // (unsigned)&T2CON*8+1;
volatile bit T2CKPS0; // (unsigned)&T2CON*8+0;
/* SSPCON bits */
#if !defined(_16F870) && !defined(_16F871)
volatile bit WCOL; // (unsigned)&SSPCON*8+7;
volatile bit SSPOV; // (unsigned)&SSPCON*8+6;
volatile bit SSPEN; // (unsigned)&SSPCON*8+5;
volatile bit CKP; // (unsigned)&SSPCON*8+4;
volatile bit SSPM3; // (unsigned)&SSPCON*8+3;
volatile bit SSPM2; // (unsigned)&SSPCON*8+2;
volatile bit SSPM1; // (unsigned)&SSPCON*8+1;
volatile bit SSPM0; // (unsigned)&SSPCON*8+0;
#endif
/* CCP1CON bits */
volatile bit CCP1X; // (unsigned)&CCP1CON*8+5;
volatile bit CCP1Y; // (unsigned)&CCP1CON*8+4;
volatile bit CCP1M3; // (unsigned)&CCP1CON*8+3;
volatile bit CCP1M2; // (unsigned)&CCP1CON*8+2;
volatile bit CCP1M1; // (unsigned)&CCP1CON*8+1;
volatile bit CCP1M0; // (unsigned)&CCP1CON*8+0;
/* RCSTA bits */
#ifndef _16F872
volatile bit SPEN; // (unsigned)&RCSTA*8+7;
volatile bit RX9 ; // (unsigned)&RCSTA*8+6;
volatile bit SREN; // (unsigned)&RCSTA*8+5;
volatile bit CREN; // (unsigned)&RCSTA*8+4;
volatile bit ADDEN; // (unsigned)&RCSTA*8+3;
volatile bit FERR; // (unsigned)&RCSTA*8+2;
volatile bit OERR; // (unsigned)&RCSTA*8+1;
volatile bit RX9D; // (unsigned)&RCSTA*8+0;
#endif
/* CCP2CON bits */
#if !defined(_16F870) && !defined(_16F871) && !defined(_16F872)
volatile bit CCP2X; // (unsigned)&CCP2CON*8+5;
volatile bit CCP2Y; // (unsigned)&CCP2CON*8+4;
volatile bit CCP2M3; // (unsigned)&CCP2CON*8+3;
volatile bit CCP2M2; // (unsigned)&CCP2CON*8+2;
volatile bit CCP2M1; // (unsigned)&CCP2CON*8+1;
volatile bit CCP2M0; // (unsigned)&CCP2CON*8+0;
#endif
/* ADCON0 bits */
volatile bit ADCS1; // (unsigned)&ADCON0*8+7;
volatile bit ADCS0 ; // (unsigned)&ADCON0*8+6;
volatile bit CHS2; // (unsigned)&ADCON0*8+5;
volatile bit CHS1; // (unsigned)&ADCON0*8+4;
volatile bit CHS0; // (unsigned)&ADCON0*8+3;
volatile bit ADGO; // (unsigned)&ADCON0*8+2;
volatile bit ADON; // (unsigned)&ADCON0*8+0;
/* OPTION bits */
bank1 bit RBPU; // (unsigned)&OPTION*8+7;
bank1 bit INTEDG; // (unsigned)&OPTION*8+6;
bank1 bit T0CS; // (unsigned)&OPTION*8+5;
bank1 bit T0SE; // (unsigned)&OPTION*8+4;
bank1 bit PSA; // (unsigned)&OPTION*8+3;
bank1 bit PS2; // (unsigned)&OPTION*8+2;
bank1 bit PS1; // (unsigned)&OPTION*8+1;
bank1 bit PS0; // (unsigned)&OPTION*8+0;
/* TRISA bits */
volatile bank1 bit TRISA5; // (unsigned)&TRISA*8+5;
volatile bank1 bit TRISA4; // (unsigned)&TRISA*8+4;
volatile bank1 bit TRISA3; // (unsigned)&TRISA*8+3;
volatile bank1 bit TRISA2; // (unsigned)&TRISA*8+2;
volatile bank1 bit TRISA1; // (unsigned)&TRISA*8+1;
volatile bank1 bit TRISA0; // (unsigned)&TRISA*8+0;
/* TRISB bits */
volatile bank1 bit TRISB7; // (unsigned)&TRISB*8+7;
volatile bank1 bit TRISB6; // (unsigned)&TRISB*8+6;
volatile bank1 bit TRISB5; // (unsigned)&TRISB*8+5;
volatile bank1 bit TRISB4; // (unsigned)&TRISB*8+4;
volatile bank1 bit TRISB3; // (unsigned)&TRISB*8+3;
volatile bank1 bit TRISB2; // (unsigned)&TRISB*8+2;
volatile bank1 bit TRISB1; // (unsigned)&TRISB*8+1;
volatile bank1 bit TRISB0; // (unsigned)&TRISB*8+0;
/* TRISC bits */
volatile bank1 bit TRISC7; // (unsigned)&TRISC*8+7;
volatile bank1 bit TRISC6; // (unsigned)&TRISC*8+6;
volatile bank1 bit TRISC5; // (unsigned)&TRISC*8+5;
volatile bank1 bit TRISC4; // (unsigned)&TRISC*8+4;
volatile bank1 bit TRISC3; // (unsigned)&TRISC*8+3;
volatile bank1 bit TRISC2; // (unsigned)&TRISC*8+2;
volatile bank1 bit TRISC1; // (unsigned)&TRISC*8+1;
volatile bank1 bit TRISC0; // (unsigned)&TRISC*8+0;
#ifdef __PINS_40
/* TRISD bits */
volatile bank1 bit TRISD7; // (unsigned)&TRISD*8+7;
volatile bank1 bit TRISD6; // (unsigned)&TRISD*8+6;
volatile bank1 bit TRISD5; // (unsigned)&TRISD*8+5;
volatile bank1 bit TRISD4; // (unsigned)&TRISD*8+4;
volatile bank1 bit TRISD3; // (unsigned)&TRISD*8+3;
volatile bank1 bit TRISD2; // (unsigned)&TRISD*8+2;
volatile bank1 bit TRISD1; // (unsigned)&TRISD*8+1;
volatile bank1 bit TRISD0; // (unsigned)&TRISD*8+0;
/* TRISE bits */
volatile bank1 bit IBF; // (unsigned)&TRISE*8+7;
volatile bank1 bit OBF; // (unsigned)&TRISE*8+6;
volatile bank1 bit IBOV; // (unsigned)&TRISE*8+5;
volatile bank1 bit PSPMODE; // (unsigned)&TRISE*8+4;
volatile bank1 bit TRISE2 ; // (unsigned)&TRISE*8+2;
volatile bank1 bit TRISE1 ; // (unsigned)&TRISE*8+1;
volatile bank1 bit TRISE0 ; // (unsigned)&TRISE*8+0;
#endif
/* PIE1 bits */
#ifdef __PINS_40
volatile bank1 bit PSPIE; // (unsigned)&PIE1*8+7;
#endif
volatile bank1 bit ADIE; // (unsigned)&PIE1*8+6;
#ifndef _16F872
volatile bank1 bit RCIE; // (unsigned)&PIE1*8+5;
volatile bank1 bit TXIE; // (unsigned)&PIE1*8+4;
#endif
volatile bank1 bit SSPIE; // (unsigned)&PIE1*8+3;
volatile bank1 bit CCP1IE; // (unsigned)&PIE1*8+2;
volatile bank1 bit TMR2IE; // (unsigned)&PIE1*8+1;
volatile bank1 bit TMR1IE; // (unsigned)&PIE1*8+0;
/* PIE2 bits */
#ifdef __A_TYPE
volatile bank1 bit CMIE; // (unsigned)&PIE2*8+6;
#endif
volatile bank1 bit EEIE; // (unsigned)&PIE2*8+4;
volatile bank1 bit BCLIE; // (unsigned)&PIE2*8+3;
#ifndef _16F872
volatile bank1 bit CCP2IE; // (unsigned)&PIE2*8+0;
#endif
/* PCON bits */
volatile bank1 bit POR; // (unsigned)&PCON*8+1;
volatile bank1 bit BOR; // (unsigned)&PCON*8+0;
/* SSPCON2 bits */
#if !defined(_16F870) && !defined(_16F871)
volatile bank1 bit GCEN; // (unsigned)&SSPCON2*8+7;
volatile bank1 bit ACKSTAT; // (unsigned)&SSPCON2*8+6;
volatile bank1 bit ACKDT; // (unsigned)&SSPCON2*8+5;
volatile bank1 bit ACKEN; // (unsigned)&SSPCON2*8+4;
volatile bank1 bit RCEN; // (unsigned)&SSPCON2*8+3;
volatile bank1 bit PEN; // (unsigned)&SSPCON2*8+2;
volatile bank1 bit RSEN; // (unsigned)&SSPCON2*8+1;
volatile bank1 bit SEN; // (unsigned)&SSPCON2*8+0;
#endif
/* SSPSTAT bits */
#if !defined(_16F870) && !defined(_16F871)
volatile bank1 bit STAT_SMP; // (unsigned)&SSPSTAT*8+7;
volatile bank1 bit STAT_CKE; // (unsigned)&SSPSTAT*8+6;
volatile bank1 bit STAT_DA ; // (unsigned)&SSPSTAT*8+5;
volatile bank1 bit STAT_P ; // (unsigned)&SSPSTAT*8+4;
volatile bank1 bit STAT_S ; // (unsigned)&SSPSTAT*8+3;
volatile bank1 bit STAT_RW ; // (unsigned)&SSPSTAT*8+2;
volatile bank1 bit STAT_UA ; // (unsigned)&SSPSTAT*8+1;
volatile bank1 bit STAT_BF ; // (unsigned)&SSPSTAT*8+0;
#endif
/* TXSTA bits */
#ifndef _16F872
volatile bank1 bit CSRC; // (unsigned)&TXSTA*8+7;
volatile bank1 bit TX9; // (unsigned)&TXSTA*8+6;
volatile bank1 bit TXEN; // (unsigned)&TXSTA*8+5;
volatile bank1 bit SYNC; // (unsigned)&TXSTA*8+4;
volatile bank1 bit BRGH; // (unsigned)&TXSTA*8+2;
volatile bank1 bit TRMT; // (unsigned)&TXSTA*8+1;
volatile bank1 bit TX9D; // (unsigned)&TXSTA*8+0;
#endif
#ifdef __A_TYPE
/* CMCON Bits */
volatile bank1 bit C2OUT; // (unsigned)&CMCON*8+7;
volatile bank1 bit C1OUT; // (unsigned)&CMCON*8+6;
volatile bank1 bit C2INV; // (unsigned)&CMCON*8+5;
volatile bank1 bit C1INV; // (unsigned)&CMCON*8+4;
volatile bank1 bit CIS; // (unsigned)&CMCON*8+3;
volatile bank1 bit CM2; // (unsigned)&CMCON*8+2;
volatile bank1 bit CM1; // (unsigned)&CMCON*8+1;
volatile bank1 bit CM0; // (unsigned)&CMCON*8+0;
/* CVRCON Bits */
volatile bank1 bit CVREN; // (unsigned)&CVRCON*8+7;
volatile bank1 bit CVROE; // (unsigned)&CVRCON*8+6;
volatile bank1 bit CVRR; // (unsigned)&CVRCON*8+5;
volatile bank1 bit CVR3; // (unsigned)&CVRCON*8+3;
volatile bank1 bit CVR2; // (unsigned)&CVRCON*8+2;
volatile bank1 bit CVR1; // (unsigned)&CVRCON*8+1;
volatile bank1 bit CVR0; // (unsigned)&CVRCON*8+0;
#endif
/* ADCON1 bits */
volatile bank1 bit ADFM; // (unsigned)&ADCON1*8+7;
#ifdef __A_TYPE
volatile bank1 bit ADCS2; // (unsigned)&ADCON1*8+6;
#endif
volatile bank1 bit PCFG3; // (unsigned)&ADCON1*8+3;
volatile bank1 bit PCFG2; // (unsigned)&ADCON1*8+2;
volatile bank1 bit PCFG1; // (unsigned)&ADCON1*8+1;
volatile bank1 bit PCFG0; // (unsigned)&ADCON1*8+0;
/* EECON1 bits */
volatile bank3 bit EEPGD; // (unsigned)&EECON1*8+7;
volatile bank3 bit WRERR; // (unsigned)&EECON1*8+3;
volatile bank3 bit WREN; // (unsigned)&EECON1*8+2;
volatile bank3 bit WR; // (unsigned)&EECON1*8+1;
volatile bank3 bit RD; // (unsigned)&EECON1*8+0;
volatile UINT16 timer1_clone;
volatile UINT16 ccpr1_clone;
volatile UINT16 ccpr2_clone;
BOOL bCtrlHandler = FALSE;
int c;
double dSystemTime;
// timer 0
HANDLE hTimer0Thread;
DWORD dwTimer0ThreadId;
UINT32 ui32_Timer0Counts;
double dTimer0TimeOut;
volatile BOOL bTimer0ThreadExit;
// timer 1
HANDLE hTimer1Thread;
DWORD dwTimer1ThreadId;
UINT32 ui32_Timer1Counts;
double dTimer1TimeOut;
volatile BOOL bTimer1ThreadExit;
// adc
UINT16 adc_adres;
char* adc_buf = NULL;
DWORD dwADCPointer = 0;
DWORD dwADCFSize;
extern void SetCtrlHandler( void );
void _adc_delete_buf( void ) {
if ( adc_buf ) {
free( adc_buf );
adc_buf = NULL;
}
}
BOOL _adc_load_data( void ) {
DWORD dwBR;
HANDLE fadc;
dwADCPointer = 0;
fadc = CreateFile( "adc.txt",
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL );
if ( fadc != INVALID_HANDLE_VALUE ) {
dwADCFSize = GetFileSize( fadc, NULL );
if ( adc_buf == NULL )
adc_buf = malloc( dwADCFSize+1 );
ZeroMemory( adc_buf, dwADCFSize+1 );
ReadFile( fadc, adc_buf, dwADCFSize, &dwBR, NULL );
CloseHandle( fadc );
return TRUE;
}
else {
return FALSE;
}
}
void adc_init_channels( void ) {
adc.ui8_Channel[ADC_CH0_ui16_A] = ADC_CH0;
adc.ui8_Channel[ADC_CH1_ui16_B] = ADC_CH1;
adc.ui8_Channel[ADC_CH2_ui16_C] = ADC_CH2;
adc.ui8_Channel[ADC_CH0_ui16_AA] = ADC_CH0;
adc.ui8_Channel[ADC_CH1_ui16_BB] = ADC_CH1;
adc.ui8_Channel[ADC_CH2_ui16_CC] = ADC_CH2;
}
UBYTE adc_continue( void ) {
if ( ++adc.ui8_Index < ADC_SIGNALS )
adc_start( ADC_AUTO );
else
adc.ui8_Index = 0;
return adc.ui8_Index;
}
UINT16 adc_get_adres( void ) {
UINT16 _adres;
if ( ADCON1&0x80 ) {
LowByte(_adres) = ADRESL;
HighByte(_adres) = ADRESH;
}
else {
// Assumes that by justifying to the left
// an ADC resolution of 8-bit is desired
_adres = ADRESH;
}
return _adres;
}
void adc_start( UBYTE adc_ch ) {
ADCON0 &= 0xC7;
if ( ADC_AUTO == adc_ch ) {
adc_ch = adc.ui8_Channel[adc.ui8_Index];
}
ADCON0 |= adc_ch;
asm("nop");
for ( adc_ch=0;adc_ch<5;adc_ch++ );
asm("nop");
ADGO = 1;
adc_adres = 0xFFFF;
if ( dwADCPointer < dwADCFSize ) {
sscanf( &adc_buf[dwADCPointer], "%u", &adc_adres );
do {
++dwADCPointer;
}while( adc_buf[dwADCPointer]!=0x0A && dwADCPointer<dwADCFSize );
}
ADGO = 0;
ADIF = 1;
if ( ADCON1&0x80 ) {
ADRESH = (UBYTE)((adc_adres>>8)&0x000F);
ADRESL = (UBYTE)(adc_adres&0x00FF);
}
else {
ADRESH = (UBYTE)((adc_adres>>2)&0x00FF);
ADRESL = (UBYTE)((adc_adres<<6)&0x00C0);
}
if ( ADIE )
isr();
}
UINT16 adc_read( UBYTE adc_ch ) {
adc_start( adc_ch );
while ( ADGO );
return adc_get_adres();
}
ADC_SETUP0( UBYTE _adcon0 ) {
ADCON0 = _adcon0;
if ( ADCON0&0x80 ) {
_adc_load_data();
}
}
ADC_SETUP1( UBYTE _adcon1 ) {
ADCON1 = _adcon1;
}
CLRWDT() {
}
SET_OPTION( UBYTE _option ) {
OPTION = _option;
SetCtrlHandler();
}
// timer 0
DWORD WINAPI _timer0_thread( LPVOID lpParameter ) {
LARGE_INTEGER liTi;
LARGE_INTEGER liTi_old;
while ( !bTimer0ThreadExit ) {
QueryPerformanceCounter( &liTi_old );
do {
QueryPerformanceCounter( &liTi );
}while ( (liTi.QuadPart-liTi_old.QuadPart)<ui32_Timer0Counts );
++TMR0;
if ( 0 == TMR0 ) {
T0IF = 1;
isr();
}
}
return -41;
}
TIMER0_EVENT_ENABLE() {
double t0int;
LARGE_INTEGER liFreq;
T0IE = 1;
dTimer0TimeOut = 4.0/OSC_FREQUENCY;
if ( (OPTION&0x08) == 0 ) {
int r = (OPTION&0x07) + 1;
double res = pow( 2, r );
dTimer0TimeOut = dTimer0TimeOut*res;
}
else {
dTimer0TimeOut *= 2;
}
QueryPerformanceFrequency( &liFreq );
dSystemTime = 1.0/(double)liFreq.QuadPart;
ui32_Timer0Counts = (UINT32)(dTimer0TimeOut/dSystemTime);
t0int = 1e3*dTimer0TimeOut*(256.0-TIMER0_OFFSET);
printf( "-----------------------------------------\n" );
printf( "Computer time: \t\t%G us\n"
"PIC timer0 interrupt: \t%G ms\n"
"PIC timer0 execution: \t%G ms\n",
dSystemTime*1e6,
t0int,
t0int*TIMER0_COUNTER_LIMIT );
printf( "-----------------------------------------\n" );
bTimer0ThreadExit = FALSE;
hTimer0Thread = CreateThread( NULL,
0,
_timer0_thread,
NULL,
0,
&dwTimer0ThreadId );
if ( hTimer0Thread == NULL ) {
printf( "timer0_setup(): thread could not be created\n" );
}
SetCtrlHandler();
}
TIMER0_EVENT_DISABLE() {
T0IE = 0;
}
TIMER0_SET( UBYTE _tmr0 ) {
}
// timer 1
DWORD WINAPI _timer1_thread( LPVOID lpParameter ) {
LARGE_INTEGER liTi;
LARGE_INTEGER liTi_old;
while ( !bTimer0ThreadExit ) {
QueryPerformanceCounter( &liTi_old );
do {
QueryPerformanceCounter( &liTi );
}while ( (liTi.QuadPart-liTi_old.QuadPart)<ui32_Timer1Counts );
++timer1_clone;
if ( 0 == timer1_clone ) {
TMR1IF = 1;
isr();
}
}
return -42;
}
TIMER1_SETUP( UBYTE _t1con ) {
T1CON = _t1con;
}
TIMER1_EVENT_ENABLE() {
double t1int;
LARGE_INTEGER liFreq;
TMR1IE = 1;
dTimer1TimeOut = 4.0/OSC_FREQUENCY;
if ( T1CON&0x01 ) {
int r = (T1CON&0x30)>>4;
double res = pow( 2, r );
dTimer1TimeOut *= res;
QueryPerformanceFrequency( &liFreq );
dSystemTime = 1.0/(double)liFreq.QuadPart;
ui32_Timer1Counts = (UINT32)(dTimer1TimeOut/dSystemTime);
t1int = dTimer1TimeOut*1e3*(65536-TIMER1_OFFSET);
printf( "-----------------------------------------\n" );
printf( "Computer time: \t\t%G us\n"
"PIC timer1 interrupt: \t%G ms\n"
"PIC timer1 execution: \t%G ms\n",
dSystemTime*1e6,
t1int,
t1int*TIMER1_COUNTER_LIMIT );
printf( "-----------------------------------------\n" );
bTimer1ThreadExit = FALSE;
hTimer1Thread = CreateThread( NULL,
0,
_timer1_thread,
NULL,
0,
&dwTimer1ThreadId );
if ( hTimer1Thread == NULL ) {
printf( "timer1_setup(): thread could not be created\n" );
}
}
SetCtrlHandler();
}
TIMER1_EVENT_DISABLE() {
TMR1IE = 0;
bTimer1ThreadExit = TRUE;
}
TIMER1_SET( UINT16 _tmr1 ) {
}
// timer 2
TIMER2_SETUP( UBYTE _tmr2 ) {
}
// ccp
PWM_FREQ_SETUP( UBYTE freq ) {
}
PWM1_DC_SETUP( UINT16 dc ) {
}
CCP1_SETUP( UBYTE _ccp1 ) {
}
CCP2_SETUP( UBYTE _ccp2 ) {
}
PWM2_DC_SETUP( UINT16 dc ) {
}
UBYTE _EEPROMRead( UBYTE addr ) {
return 0;
}
void EEPROMRead( UBYTE addr, UBYTE size, UBYTE* data ) {
}
void _EEPROMWrite( UBYTE addr, UBYTE data ) {
}
void EEPROMWrite( UBYTE addr, UBYTE size, UBYTE* data ) {
}
BOOL WINAPI _HandlerRoutine( DWORD dwCtrlType ) {
switch ( dwCtrlType ) {
case CTRL_C_EVENT:
case CTRL_BREAK_EVENT:
case CTRL_CLOSE_EVENT:
case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT:
printf( "\nShutting down...\n" );
_adc_delete_buf();
ExitProcess( 0 );
return TRUE;
}
return FALSE;
}
void SetCtrlHandler( void ) {
if ( !bCtrlHandler ) {
SetConsoleCtrlHandler( _HandlerRoutine, TRUE );
bCtrlHandler = TRUE;
printf( "\nPress <Ctrl-C> to stop program...\n" );
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.