#include "DSP2407A.h"
#define uint unsigned int
#define uchar unsigned char
volatile static uint a=0,b=0,c=0,mid1=0,mid2=0,max=0;
volatile static uint interrupt_count=0;
volatile static uchar direction=1;
volatile static uint adc_result;
void inline disable()
{
asm(" setc INTM");
}
void inline enable()
{
asm(" clrc INTM");
}
// 系统初始化子程序
void initial()
{
asm(" setc SXM"); // 符号位扩展有效
asm(" clrc OVM"); // 累加器中结果正常溢出
asm(" clrc CNF"); // B0被配置为数据存储空间
*SCSR1=0x81FE; // CLKIN=6M,CLKOUT=4*CLKIN=24M
*WDCR=0x0E8; // 不使能看门狗,因为SCSR2中的WDOVERRIDE
// 即WD保护位复位后的缺省值为1,故可以用软件禁止看门狗
*IMR=0x0001; // 允许INT1中断
*IFR=0x0FFFF; // 清除全部中断标志,"写1清0"
}
//时间中断程序
void interrupt T1INT()
{
++interrupt_count;
enable();
}
//AD中断程序
void interrupt adint()
{
asm("clrc SXM")
adc_result=RESULT0;
if(max<11)
{
a=b;
b=c;
c=*adc_result>>6;
mid1=mid2;
mid2=a>b?(b>c?b:(a>c?c:a)):(a>c?a:(b>c?c:b));//选择3个采样数值的中间值
if(direction) //上升状态处理
{
if(mid2>=mid1)
{
*ADCTRL2=*ADCTRL2|0X2000;
enable();
}
else
{
if(max==0) *T1CON=*0X0040; //启动计数器
++max;
direction=0;
*ADCTRL2=*ADCTRL2|0X2000;
enable();
}
}
else //下降状态处理
{
if(mid2<=mid1)
{
*ADCTRL2=*ADCTRL2|0X2000;
enable();
}
else
{
direction=1;
*ADCTRL2=*ADCTRL2|0X2000;
enable();
}
}
}
else
{
*T1CON=*T1CON&0XFFBF //停止计数
if(interrupt_count > 375)
{
*PADATDIR=*PADATDIR|0X0600; //小于1K,IOPA2输出低,IOPA1输出低
}
else if (interrupt_count >= 187)
{
*PADATDIR=*PADATDIR|0X0601//1K-2K,IOPA2输出低.IOPA1输出高
}
else if (interrupt_count >= 125)
{
*PADATDIR=*PADATDIR|0X0602;//2K-3K,IOPA2输出高.IOPA1输出低
}
else
{
*PADATDIR=*PADATDIR|0X0603;//>3K,IOPA2输出高.IOPA1输出高
}
interrupt_count = 0;
max = 0;
*ADCTRL2=*ADCTRL2|0X2000;
enable();
}
}
void interrupt nothing()
{
return;
}
main()
{
disable();
initial();
*MCRA&=*MCRA&0XFF00; //IOPA为一般I/O功能
*PADATDIR=*PADATDIR|0X0600; //IOPA1,IOPA2为输出
*EVAIFA=*EVAIFA|FFFF; //定时器1中断标志清除
*EVAIMRA=*EVAIMRA|0X0400; //定时器1上溢使能
*T1CON=0X160C; //定时器1为连续增,预分频64
*T1CNT=OX0000;//计数器清零
*ADCTRL1=0X0050;//连续转换模式,级连形式
*ADCTRL2=0X0400; //SEQ1中断模式1
*MAXCONV=0X0000; //转换个数1个
*CHSELSEQ1=0X0000;//转换通道选择1通道
*CHSELSEQ2=0X0000;
*CHSELSEQ3=0X0000;
*CHSELSEQ4=0X0000;
enable();
while(1);
{
}
}
adc.rar_2407_2407 AD_2407 ADC_2407代码
版权申诉
3 浏览量
2022-09-21
03:56:47
上传
评论
收藏 56KB RAR 举报
朱moyimi
- 粉丝: 64
- 资源: 1万+