///////////////////////////////////// // Generated Initialization File // ///////////////////////////////////// #include #include "C8051F060.h" #define EXTDATA P0_3 #define INVDATA P0_4 #define LED P0_5 #define PKDRESET P1_2 unsigned char dly_cycles=225; unsigned long sysclk=24000000; unsigned int samplingfreq=500, x; volatile unsigned int adc0data,adc1data; // ADC0 and ADC1 data volatile unsigned int peak; volatile unsigned int copiedpeak, lastpeak; volatile unsigned char copypeak, sampling; // set to 1 to copy the volatile paek value unsigned char s, end, inter, TX0, RX0, ss; // Peripheral specific initialization functions, // Called from the Init_Device() function void Reset_Sources_Init() { WDTCN = 0xDE; WDTCN = 0xAD; } void Timer_Init() { SFRPAGE = TIMER01_PAGE; TCON = 0x45; // INT0 & INT1 are edge triggered TMOD = 0x21; CKCON = 0x18; TH1 = 0xF3; // F3:115200 baud, FF:1,5M, SYSCLK=24 MHz SFRPAGE = TMR2_PAGE; TMR2CN = 0x04; RCAP2L = 0xEC; RCAP2H = 0xFF; // 0xFF9C 20000Hz sampling rate, 50us, 0xFFEC 66kHz 10us, /FFFF-FFEC=19 , 1/2000000 *19=10us /* SFRPAGE = TMR3_PAGE;//trigger TMR3CN = 0x04; TMR3L = 0x30; TMR3H = 0xF8;*/ } void UART_Init() { SFRPAGE = UART0_PAGE; SCON0 = 0x50; SSTA0 = 0x10; TI0=1; RI0=0; } void ADC_Init(void) { SFRPAGE = ADC0_PAGE; ADC0CF = 0x10; ADC0CN = 0x8C; // timer2 AD0INT=0; SFRPAGE = ADC1_PAGE; ADC1CF = 0x10; ADC1CN = 0x8C; // timer2 } void DAC_Init() { SFRPAGE = DAC0_PAGE; DAC0CN = 0x84; SFRPAGE = DAC1_PAGE; DAC1CN = 0x84; } void Voltage_Reference_Init() { SFRPAGE = ADC0_PAGE; REF0CN = 0x02; // 0x03 for internal, 0x02 for external reference SFRPAGE = ADC1_PAGE; REF1CN = 0x02; // 0x03 for internal, 0x02 for external reference SFRPAGE = ADC2_PAGE; REF2CN = 0x02; } void Port_IO_Init() { // P0.0 - TX0 (UART0), Push-Pull, Digital // P0.1 - RX0 (UART0), Open-Drain, Digital // P0.2 - INT0 (Tmr0), Open-Drain, Digital // P0.3 - Unassigned, Open-Drain, Digital // P0.4 - Unassigned, Push-Pull, Digital // P0.5 - Unassigned, Open-Drain, Digital // P0.6 - Unassigned, Open-Drain, Digital // P0.7 - Unassigned, Open-Drain, Digital // P1.0 - Unassigned, Open-Drain, Digital // P1.1 - Unassigned, Open-Drain, Digital // P1.2 - Unassigned, Push-Pull, Digital // P1.3 - Unassigned, Open-Drain, Digital // P1.4 - Unassigned, Open-Drain, Digital // P1.5 - Unassigned, Open-Drain, Digital // P1.6 - Unassigned, Open-Drain, Digital // P1.7 - Unassigned, Open-Drain, Digital // P2.0 - Unassigned, Open-Drain, Digital // P2.1 - Unassigned, Open-Drain, Digital // P2.2 - Unassigned, Open-Drain, Digital // P2.3 - Unassigned, Open-Drain, Digital // P2.4 - Unassigned, Open-Drain, Digital // P2.5 - Unassigned, Open-Drain, Digital // P2.6 - Unassigned, Open-Drain, Digital // P2.7 - Unassigned, Open-Drain, Digital // P3.0 - Unassigned, Open-Drain, Digital // P3.1 - Unassigned, Open-Drain, Digital // P3.2 - Unassigned, Open-Drain, Digital // P3.3 - Unassigned, Open-Drain, Digital // P3.4 - Unassigned, Open-Drain, Digital // P3.5 - Unassigned, Open-Drain, Digital // P3.6 - Unassigned, Open-Drain, Digital // P3.7 - Unassigned, Open-Drain, Digital SFRPAGE = CONFIG_PAGE; P0MDOUT = 0x11; P1MDOUT = 0x04; XBR0 = 0x04; XBR1 = 0x14;// /INT0 /INT1 XBR2 = 0x40; } void Oscillator_Init() { int i = 0; SFRPAGE = CONFIG_PAGE; OSCXCN = 0x67; for (i = 0; i < 3000; i++); // Wait 1ms for initialization while ((OSCXCN & 0x80) == 0); CLKSEL = 0x01; } void Interrupts_Init() { //IE = 0x05;// /INT0 /INT1 IE = 0x90;// all UART0 // IE = 0x04;// /INT1 // EIE1 = 0x80; // EIE2 = 0x01;//timer3 out trigger } // Initialization function for device, // Call Init_Device() from your main program void Init_Device(void) { Reset_Sources_Init(); Timer_Init(); UART_Init(); ADC_Init(); DAC_Init(); Voltage_Reference_Init(); Port_IO_Init(); Oscillator_Init(); Interrupts_Init(); } void putchar_PC(unsigned char c) { SFRPAGE = UART0_PAGE; SBUF0=c; while(!TX0); TX0=0; } void putchar( char c) { SFRPAGE = UART0_PAGE; SBUF0=c; while(!TX0); TX0=0; } char getchar_PC(void) { SFRPAGE = UART0_PAGE; while (!RX0) {} RX0=0; return SBUF0; } void UART0_ISR (void) interrupt 4 //PC { if (RI0) { //SFRPAGE = UART0_PAGE; RI0 = 0; RX0 = 1; s = SBUF0; if (s == 'x') sampling = 0; } if (TI0) { TI0 = 0; TX0 = 1; } } void Delay_ms(short ms) { short i; for(i=0; i<24*ms; i++) { { /* about 1ms, 11059200/12 Hz */ _asm push b mov b,_dly_cycles 00001$: djnz b,00001$ mov b,_dly_cycles 00002$: djnz b,00002$ pop b _endasm; } } } void ADC0_irqhandler (void) interrupt 13 { AD0INT = 0; AD1INT = 0; SFRPAGE = ADC1_PAGE; adc1data=(ADC1H << 8) | ADC1L; if (peak> 8; //} void ContSampling(void) { unsigned char rec_chr; unsigned int x; // Delay_ms(500); rec_chr=0; SFRPAGE = TMR2_PAGE; TMR2CN = 0x00; SFRPAGE = ADC0_PAGE; AD0INT=0; SFRPAGE = ADC1_PAGE; AD1INT=0; SFRPAGE=CONFIG_PAGE; LED=0; //EA=1;//all //IE = 0x94;// /INT1 EX1 = 1; EIE1 = 0x80; SFRPAGE = TMR2_PAGE; TMR2CN = 0x04; SFRPAGE = PCA0_PAGE; PCA0CN = 0x40; PCA0MD = 0x08; ss=0; sampling=1; copypeak=0; while (sampling == 1) { while(!ss); ss=0; while (copypeak){} copypeak=1; while (copypeak){} x=(5000L*copiedpeak)/65536L; putchar_PC('#'); putchar_PC('m'); putchar_PC(x); putchar_PC(x >> 8); } SFRPAGE=CONFIG_PAGE; LED=1; EX1 = 0; } void main() { unsigned char e, f; Init_Device(); TX0 = 0; RX0=0; PKDRESET = 0; fin=0; while(1) { peak=0; lastpeak=0; copiedpeak = 0; //SetDAC(0); //LED=1; //Delay_ms(100); e=getchar_PC(); if (e=='#') { putchar_PC(e); f=getchar_PC(); if (f=='S') { putchar_PC(f); ContSampling(); } } } }