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

📄 text.c

📁 MSC1210单片机在TINY操作系统下的C语言例程
💻 C
字号:

#include <REG1210.H>      /* special function register 1210       */
#include <stdio.h>        /* standard I/O .h-file                 */
#include <rtx51tny.h>	  /* RTX-51 tiny functions & defines      */
#include <stdlib.h>
#include <string.h>
#include <16b.h>

#define uint  unsigned int
#define uchar unsigned char


sbit   DAC8532=P1^4;         /*dac8532					*/    
unsigned char data ccnun=4,chanl_n=0;   
uint   daval1=0;
uint   daval2=0;


void write_8532(unsigned int val,unsigned char port) 
{
    uchar i;
	SPICON = SPICON_8532;
	DAC8532 =0;
	for(i=0;i<5;i++)
	{;}
    if(port==1)
	{
		while((AIE&0X08)!=0X08){}SPIDATA=Dac8532A;
		while((AIE&0X08)!=0X08){}SPIDATA=((val>>8)&0xFF);
    	while((AIE&0X08)!=0X08){}SPIDATA=((val)&0xFF);
	}
	if(port==2)
	{
		while((AIE&0X08)!=0X08){}SPIDATA=Dac8532B;
		while((AIE&0X08)!=0X08){}SPIDATA=((val>>8)&0xFF);
    	while((AIE&0X08)!=0X08){}SPIDATA=((val)&0xFF);
	}
	for(i=0;i<5;i++)
	{;} 
	DAC8532 =1;
}


/* initial spi ,SPICON在各自的子程序中设置*/
void init_spi(void)
{
	P1DDRH=0x75;	        /* SPI port setup */
	SPITCON=SCLK_EN|DRV_EN;
    PDCON &= ~(PDSPI);		/* turn on SPI  */
}

 /* initial ADC */
void init_adc(void)
{          	
	int decimation=720; 						/* factor of extractive  */
    EAI = CLEAR;				  
	ACLK = 4;									/* ACLK = 11.0592 MHz/(9+1) = 1.10592 MHz */
	ADCON0 &= (~(BOD|EVREF|VREFH|EBUF)|PGA_1);	/* Vref Off,Extenal Verf,Buff off,BOD off, PGA=1 */
	ADCON1 = (POL|SM_3|CAL_1);					/* Unipolar, sinc3, self calibration, offset, gain */
	ADCON2 = decimation & 0xff;					/* LSB of decimation */
	ADCON3 = (decimation >>8)&0x07;				/* MSB of decimation */
	SSCON = CLEAR;
	ADMUX = INP_0|INN_COM;						/* Select AIN0+/Acom- */
	adcsum.ps = CLEAR;							/* buffer sp clear */
    AIE = AD_EN;    							/* Enable Aux Interrupt */
	EAI=SET ;									
	AI=CLEAR;
}


       /*辅助中断服务程序*/
assistant_proc() interrupt 6 using 3
{
	signed long int xdata result;
	switch(PAI&0x0f)
	{
		case 0x06://adc滤波中断
		{
			if (ccnun--)	result=unipolar();				// Dummy read to clear ADCIRQ
			else
			{			
				result=unipolar();							// read to clear ADCIRQ
				adcsum.buf[adcsum.ps]=result>>8;			// read to clear ADCIRQ
				switch ((chanl_n++)&0x01)
				{
					case 0:
					{
						ADMUX=((chanl_n+1)<<3)|0x08;																																																																																																																																		
						adcsum.ps=(chanl_n+1)>>1;
					}break;
					case 1:
					{
						ADMUX=0x08;
						adcsum.ps=0;
					}break;
				}
				chanl_n= (chanl_n<8)? chanl_n : 0 ;
				ccnun=4;	
			}
		}break;

	}
	AI=CLEAR;
}

 /******************************************************************************/
/*        Task 0 'init': Initialize                                           */
/******************************************************************************/
void init (void) _task_ INIT  /* program execution starts here        */
{      
    init_spi();
    init_adc();
    PDCON |= PDWDT;						/* turn oFF WatchDog  */
 	WDTCON |= EWDT;         			/* set ewbt            */
 	WDTCON &= ~EWDT;        			/* clear ewbt set timeout=8,900ms    */
    PDCON &= ~(PDSPI|PDAD);		        /* turn on SPI and ADC device */ 
    DAC8532 =1;
    os_create_task (LOGIC_JUDGE);
	os_delete_task (INIT);              /* stop init task (no longer needed)    */
}

/*--------------------------------------------------------------------------
                      读写FPGA
---------------------------------------------------------------------------*/

void logic_judge (void) _task_ LOGIC_JUDGE  
{	
    int data i=0;
	while(1)
	{
		os_wait (K_TMO, 10,0);
	    for(i=0;i<5;i++)
        {
            *(W_ADDRESS+i)= adcsum.buf[i]; 
        }
		daval1=*(W_ADDRESS+64);
        write_8532(daval1,1);
		daval2=*(W_ADDRESS+65);
        write_8532(daval2,2);
	}
}


⌨️ 快捷键说明

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