📄 text.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 + -