📄 test.c
字号:
#include <stdio.h>
#include <ADuC831.h>
#include <MATH.H>
#include <intrins.h>
int read_dac(void);
int start_stage(void);
int middle_stage(void);
main()
{
P0 = 0xFF;
//(P1=0x00 的设置删除,因为要将P0口设置为数据输入端,才设置为00H)
P2 = 0x0F;
RD = 0; //令SD为0,使IR2133的SD端为0
WR = 0; //令F_CLR清零
_nop_(); //空两个时钟周期
_nop_();
WR = 1; //令F_CLR为1,即IR2133每次需要上电清除错误
_nop_(); //空两个时钟周期
_nop_();
TMOD=0x11;
IT1=1; //设置T0 T1为下降沿触发
IT0=1;
//(ADCCON的设置删除)
ADCCON1=0xec; //(已修改,原来是0xe8)
ADCCON2=0x27;
PWMCON=0x93; //(已修改,原来是0x13),关闭P2.6
DACCON=0x7E; //设置DACCON,让DAC启动
while(1)
{
while(P1_5==1)
{
EA=0; //设置wacthdog,2s delay
WDWR=1;
WDCON=0x72;
EA=1;
read_dac();
start_stage();
WDE=1; //喂狗
}
}
}
int read_dac(void)
{
bit a;
DAC1H=P2&0x0f; //读高4位到DAC1H
B=P0;
a=B_0; //低8位翻转
B_0=B_7;
B_7=a;
a=B_1;
B_1=B_6;
B_6=a;
a=B_2;
B_2=B_5;
B_5=a;
a=B_3;
B_3=B_4;
B_4=a;
DAC1L=B; //读低8位到DAC1L
return 0;
}
int start_stage(void) //电机启动时,输出PWM
{
ADCDATAH=0xFF;
ADCDATAL=0xFF;
PWM1L=0xFF; //PWM1L=0xFF;
PWM1H=0x07; //PWM1H=0x0F; 将PWM频率提高一倍,5.9K
//PWM0L=ADCDATAL; //选择PWM工作模式1,12位PWM给定,在初始阶段给电机加速
//PWM0H=0x0F&ADCDATAH; //读取AD7口的模拟电压量
if(ADCDATAH%2==1)
{ PWM0L=(ADCDATAL>>1)|0x80;
PWM0H=0x0F&((0x0F&ADCDATAH)>>1);
}
else
{ PWM0L=ADCDATAL>>1;
PWM0H=0x0F&((0x0F&ADCDATAH)>>1);
}
//由于ADC采样回的满值为4096,要除以2,故将PWM0H/L寄存器里面值顺次右移1位
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -