
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit CLK = P3^4
sbit CS = P3^3
sbit D1 = P1^2
uint outdata=0//电压值
/*******************子程序***********************/戚芦
void Delay(uchar t)
void AD_init(void)
uint AD_read()
/*******************主运行程源悔序*******************/
void main(void)
{
while(1)
{
AD_init()
outdata=AD_read()
outdata=outdata*4.9/255//电压计算值,后面采用if来比较,雹仔正下面比较简单了你自己写把。
}
}
/*****************延时子程序********************/
void Delay(uchar t)
{
uchar i
while(t--!=0)
{
for(i=0i<55i++)
{}
}
}
/******************AD0832初始化***************/
void AD_init(void)
{
CS=1//开始禁止芯片工作
CLK=0//初始到0,芯片还没工作,没影响
CS=0//开始芯片工作
D1=1
CLK=1
D1=1
CLK=0
CLK=0//延时用
CLK=1
D1=1
CLK=0
CLK=0//延时用
CLK=1
D1=0
CLK=0
_nop_()
}
/*****************AD0832值计算***************/
uint AD_read()
{
uchar i
uchar outdata0=0
uchar outdata1=0
for(i=0i<8i++)
{
CLK=1
_nop_()
outdata0=outdata0<<1
if(D1 == 1)
{
outdata0|=0x01
}
else
{
outdata0|=0x00
}
CLK=0
_nop_()
}
CS=1
return
(outdata0)
}
void Timer3_Init(){
TMR3CN = 0x02
TMR3R = -44236//定时2ms
TMR3= 0xffff
EIE2 &= ~0x01
TMR3CN |= 0x04
}
void ADC0_Init(void)
{
AMX0SL=0x00//选择通道0
AMX0CF=0x00//选择AIN0和AIN1为独立输入
REF0CN=0x03//选择外部的电压液薯衫为基准电压
ADC0CF=(SYSCLK/2500000)<<3//时钟手拿为 ,增益为1
ADC0CN=0x84//ADC0使能且为ADCBUSY的开启方式
EIE2|=0x02//开启ADC0的中断
}
void ADC0_ISR() interrupt 15
{
static unsigned int_dec=INT_DEC
static long accumulator=0L
AD0INT = 0 // 清 ADC 中断标志位
accumulator += ADC0 // 累加ADC采样数据
int_dec-- // 指针减1
if (int_dec == 0) /闹腔/ 累加完了吗?
{
int_dec = INT_DEC // 指针复位
result = accumulator >>8
accumulator = 0L // 累加和变量清0
t=1
}
}ADC0转换,定时器3开启的方式
这是图纸是硬件组态
下面是程序
CALL FC 117
IN0 :=PIW8 调速杆1 0-10V 对应 0-27648
IN1 :=27648
IN2 :=0
IN3 :=20
IN4 :=-20
OUT5:=MW304
汪歼 NOP 0
该程序将调速杆迅陵亮1的位置信号0-10V转换为 -20到20的数亩宽值
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)