⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 das1210.c

📁 msc1201 编程1
💻 C
字号:
// Texas Instruments
// Name:	DAS1210.c
// Revision: 	1.0
// Description: MSC1210 DAQ-EVM Demo
#include <REG1210.H>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
extern signed long bipolar(void);
extern void put_string(char code *string);
extern char rx_byte(void);
extern void putspace1(void);
extern void putspace2(void);
extern void putspace3(void);
extern void putspace4(void);
extern void putcr(void);
extern void tx_hex(char);
extern void tx_byte(char);
extern char rx_byte_echo(void);
extern unsigned int rx_hex_double_echo(void);
extern void autobaud(void);
sbit TP3 = P1^4; 
sbit TP4 = P1^5; 
sbit TP5 = P1^6; 
sbit TP6 = P1^7; 
data char ROM_temp0 _at_ 0x000a;  // For put_string function
data char ROM_temp1 _at_ 0x000b;
unsigned int n;	// number of ADC conversion per ENOB calculation
unsigned char odac_temp;
// recursive digit display routine
void prt_digit(unsigned long int i, signed char d) reentrant
{	unsigned long int j; char c;
	j=i/10; c=i-j*10; d--;
	if (j!=0 || !(d &0x80)) prt_digit(j,d);
	if (d==0) tx_byte('.');
	tx_byte(c+48);
}
// Display long integer number with sign and decimal
void print(signed long int i, unsigned char d) 
{
	if (i<0) { tx_byte('-'); i*=-1;}
	prt_digit(i,d); putspace4();		
}
void acquire()
{
	signed long int data adres, ienob, iu;
   float x,u,sd ; unsigned char j; int i;
	for (j=0;j<5;j++)adres=bipolar(); // discard initial 5 conversions
	ODAC=odac_temp;
	adres=bipolar();
	while(1){
		put_string("\x1b[37m\x1b[5;1HTP3="); tx_byte(TP3 | 0x30);
		put_string("\tTP4=");tx_byte(TP4 | 0x30);
		put_string("\tTP5=");tx_byte(TP5 | 0x30);
		put_string("\tTP6=");tx_byte(TP6 | 0x30);
		u=0;x=0; i=0; putcr();
		while (i<n){ // acquire n points
			putcr();
			for (j=0;j<4;j++){
				adres=bipolar(); 
				u+=adres; x+= adres*adres;	print(adres,0); 
				tx_byte('\t'); tx_byte('\t'); 
				if(i<n) i++; else break;
			}
		}
		u=u/n; sd=sqrt(x/n-u*u); 
		put_string("\nENOB="); print((24-log(sd)/log(2))*100.0,2); 
		put_string("\nAve="); print(u*100,2); 
		put_string("\nSD="); print(sd*100,2); 
		putspace4();
	}
}	
int settings(void)
{ 
	PDCON &= 0x0f7;			//turn on adc
	ACLK = 0;					// ACLK = 1.8432MHz/(1+1)= 0.9216MHz
	if(rx_byte_echo()!='N'){
		n=32;
		DECIMATION = 1440;	// Data Rate = ACLK/64/1440 = 10.000Hz
		ADMUX = 0x033;			// Select AIN3-AIN3
		ADCON0 = 0x30;			// Vref on 2.5V, Buff on, BOD off, PGA 1
		ADCON1 = 0x01;			// bipolar, auto, self calibration, offset, gain
	} else {
		put_string("\n4 hex#: #Samp?"); n=rx_hex_double_echo();
		put_string("\tDECIMATION?"); DECIMATION = rx_hex_double_echo();
		put_string("\n2 hex#: ADMUX?"); ADMUX = rx_hex_echo();
		put_string("\tADCON0?"); ADCON0 = rx_hex_echo();
		put_string("\tODAC?"); odac_temp = rx_hex_echo();  
		put_string("\tADCON1?"); ADCON1 = rx_hex_echo();
	}	
	return(n);	
}
void greeting(void)
{
	TH1 = 255;			// 4800 Baud @ 1.8432MHz
	SCON = 0x52;		// Async mode 1, 8-bit UART, enable rcvr, TI=1, RI=0
	TMOD = 0x20;		// T1 at 8 bit counter with auto reload
	TR1 = 1;				// Run T1 
	put_string("\x1b[1;34;46m\x1b[2J\x1b[12CDAS1210\nDefault Y/N?");
}
void main(void)
{
	greeting();
	n=settings();
	acquire();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -