/*********************************************************************************************
* Software Timer *
**********************************************************************************************/
#pragma interrupt 5 softwatre_timer0_int
void softwatre_timer0_int()
{
ioport1 = 0x01;
/****************************** Timer Reinitialization **************************************/
hso_command = 0b0011000; // Enabling software timer 0 & HSO.2
hso_time = timer1 + 1550;// adjusting for 1.25 msec interrupt ===> 1550
/************************************** Indicator **********************************/
/************************************** Interrupt Function **********************************/
temp_int = current;
temp_int2 = magnitude;
#pragma asm
LD index0,sample_index
SUBB index0,#16
LD index1,index0
INCB index1
LD index2,index1
INCB index2
LD index3,index2
INCB index3
LD index4,index3
INCB index4
LD index5,index4
INCB index5
LD index6,index5
INCB index6
LD index7,index6
INCB index7
LD index8,index7
INCB index8
LD index9,index8
INCB index9
LD index10,index9
INCB index10
LD index11,index10
INCB index11
LD index12,index11
INCB index12
LD index13,index12
INCB index13
LD index14,index13
INCB index14
LD index15,index14
INCB index15
ADD index0 ,index0
ADD index1 ,index1
ADD index2 ,index2
ADD index3 ,index3
ADD index4 ,index4
ADD index5 ,index5
ADD index6 ,index6
ADD index7 ,index7
ADD index8 ,index8
ADD index9 ,index9
ADD index10,index10
ADD index11,index11
ADD index12,index12
ADD index13,index13
ADD index14,index14
ADD index15,index15
/************************************** CHANNEL 0 *******************************************/
/****************** Real Cosine *******************/
//( 0-8 )*255 + (1 - 7 + 15 - 9)*236 + (2 - 6 + 14 - 10)*180 + (3 - 5 + 13 - 11)*98
/******** ( 1 - 7 + 15 - 9 ) * 236 ***********/
LD _AX,(analog_inputs+0)[index1] // 2 to address element no. 1 (int == 2 bytes)
SUB _AX,(analog_inputs+0)[index7] // element 7
ADD _AX,(analog_inputs+0)[index15] // element 15
SUB _AX,(analog_inputs+0)[index9] // element 9
MUL _BAX,#236
/******** ( 2 - 6 + 14 - 10 ) * 180 ***********/
LD _CX,(analog_inputs+0)[index2] // element 2
SUB _CX,(analog_inputs+0)[index6] // element 6
ADD _CX,(analog_inputs+0)[index14] // element 14
SUB _CX,(analog_inputs+0)[index10] // element 10
MUL _DCX,#180
ADD _AX,_CX
ADDC _BX,_DX
/******** ( 3 - 5 + 13 - 11 ) * 98 ***********/
LD _CX,(analog_inputs+0)[index3] // element 3
SUB _CX,(analog_inputs+0)[index5] // element 5
ADD _CX,(analog_inputs+0)[index13] // element 13
SUB _CX,(analog_inputs+0)[index11] // element 11
MUL _DCX,#98
ADD _AX,_CX
ADDC _BX,_DX
/******** ( 0 - 8 ) * 255 ***********/
LD _CX,(analog_inputs+0)[index0] // element 0
SUB _CX,(analog_inputs+0)[index8] // element 8
MUL _DCX,#255
ADD _AX,_CX
ADDC _BX,_DX
ST _AX,[temp_int]+
ST _BX,[temp_int]+
SHLL _BAX,#8
MUL _FEX,_BX,_BX
/***************** Imaginary Sine *******************/
//(4 - 12)*255 + (1 - 9 + 7 - 15)*98 + (2 - 10 + 6 - 14)*180 + (3 - 11 + 5 - 13)*236
/******** (1 - 9 + 7 - 15) * 98 ***********/
LD _AX,(analog_inputs+0)[index1] // element 1
SUB _AX,(analog_inputs+0)[index9] // element 9
ADD _AX,(analog_inputs+0)[index7] // element 7
SUB _AX,(analog_inputs+0)[index15] // element 15
MUL _BAX,#98
/******** (2 - 10 + 6 - 14)*180 ***********/
LD _CX,(analog_inputs+0)[index2] // element 2
SUB _CX,(analog_inputs+0)[index10] // element 6
ADD _CX,(analog_inputs+0)[index6] // element 14
SUB _CX,(analog_inputs+0)[index14] // element 10
MUL _DCX,#180
ADD _AX,_CX
ADDC _BX,_DX
/******** (3 - 11 + 5 - 13)*236 ***********/
LD _CX,(analog_inputs+0)[index3] // element 1
SUB _CX,(analog_inputs+0)[index11] // element 11
ADD _CX,(analog_inputs+0)[index5] // element 5
SUB _CX,(analog_inputs+0)[index13] // element 13
MUL _DCX,#236
ADD _AX,_CX
ADDC _BX,_DX
/********** (4 - 12)*255 *******************/
LD _CX,(analog_inputs+0)[index4] // element 4
SUB _CX,(analog_inputs+0)[index12] // element 12
MUL _DCX,#255
ADD _AX,_CX
ADDC _BX,_DX
ST _AX,[temp_int]+
ST _BX,[temp_int]+
SHLL _BAX,#8
MUL _BAX,_BX,_BX
ADD _AX,_EX
ADDC _BX,_FX
ST _AX,[temp_int2]+
ST _BX,[temp_int2]+
/************************************** CHANNEL 1 *******************************************/
/****************** Real Cosine *******************/
//( 0-8 )*255 + (1 - 7 + 15 - 9)*236 + (2 - 6 + 14 - 10)*180 + (3 - 5 + 13 - 11)*98
/******** ( 1 - 7 + 15 - 9 ) * 236 ***********/
LD _AX,(analog_inputs+512)[index1] // 2 to address element no. 1 (int == 2 bytes)
SUB _AX,(analog_inputs+512)[index7] // element 7
ADD _AX,(analog_inputs+512)[index15] // element 15
SUB _AX,(analog_inputs+512)[index9] // element 9
MUL _BAX,#236
/******** ( 2 - 6 + 14 - 10 ) * 180 ***********/
LD _CX,(analog_inputs+512)[index2] // element 2
SUB _CX,(analog_inputs+512)[index6] // element 6
ADD _CX,(analog_inputs+512)[index14] // element 14
SUB _CX,(analog_inputs+512)[index10] // element 10
MUL _DCX,#180
ADD _AX,_CX
ADDC _BX,_DX
/******** ( 3 - 5 + 13 - 11 ) * 98 ***********/
LD _CX,(analog_inputs+512)[index3] // element 3
SUB _CX,(analog_inputs+512)[index5] // element 5
ADD _CX,(analog_inputs+512)[index13] // element 13
SUB _CX,(analog_inputs+512)[index11] // element 11
MUL _DCX,#98
ADD _AX,_CX
ADDC _BX,_DX
/******** ( 0 - 8 ) * 255 ***********/
LD _CX,(analog_inputs+512)[index0] // element 0
SUB _CX,(analog_inputs+512)[index8] // element 8
MUL _DCX,#255
ADD _AX,_CX
ADDC _BX,_DX
ST _AX,[temp_int]+
ST _BX,[temp_int]+
SHLL _BAX,#8
MUL _FEX,_BX,_BX
/***************** Imaginary Sine *******************/
//(4 - 12)*255 + (1 - 9 + 7 - 15)*98 + (2 - 10 + 6 - 14)*180 + (3 - 11 + 5 - 13)*236
/******** (1 - 9 + 7 - 15) * 98 ***********/
LD _AX,(analog_inputs+512)[index1] // element 1
SUB _AX,(analog_inputs+512)[index9] // element 9
ADD _AX,(analog_inputs+512)[index7] // element 7
SUB _AX,(analog_inputs+512)[index15] // element 15
MUL _BAX,#98
/******** (2 - 10 + 6 - 14)*180 ***********/
LD _CX,(analog_inputs+512)[index2] // element 2
SUB _CX,(analog_inputs+512)[index10] // element 6
ADD _CX,(analog_inputs+512)[index6] // element 14
SUB _CX,(analog_inputs+512)[index14] // element 10
MUL _DCX,#180
ADD _AX,_CX
ADDC _BX,_DX
/******