📄 kongwen120.c
字号:
{
set_v_out(tem_v_out0-150,0); //6<x<7 20v
}
break;
case 16:
{
set_v_out(tem_v_out0-160,0); //6<x<7 20v
}
break;
case 17:
{
set_v_out(2300,0); //180v 8<x<15
}
break;
case 18:
{
set_v_out(100,0); //220v x>15
}
break;
//***************************************************//
case 20:
{
set_v_out(tem_v_out0+10,0); //-2<x<0 v
}
break;
case 21:
{
set_v_out(tem_v_out0+20,0); //-5<x<-2 41v
}
break;
case 22:
{
set_v_out(tem_v_out0+30,0); //-10<x<-5 20v
}
break;
case 23:
{
set_v_out(tem_v_out0+40,0); //x<-10 0v
}
break;
case 24:
{
set_v_out(tem_v_out0+50,0); //x<-10 0v
}
break;
case 25:
{
set_v_out(tem_v_out0+60,0); //x<-10 0v
}
break;
case 26:
{
set_v_out(tem_v_out0+70,0); //x<-10 0v
}
break;
case 27:
{
set_v_out(tem_v_out0+80,0); //x<-10 0v
}
break;
case 28:
{
set_v_out(4800,0); //x<-10 0v
}
break;
case 29:
{
set_v_out(4990,0); //x<-10 0v
}
break;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
switch(tem_flag2)
{
case 0:
{
set_v_out(tem_v_out0,1); //0<x<1
}
break;
case 1:
{
set_v_out(tem_v_out0-10,1); //1<x<2 164v
}
break;
case 2:
{
set_v_out(tem_v_out0-20,1); //2<x<3 180v
}
break;
case 3:
{
set_v_out(tem_v_out0-30,1); //3<x<4 220v
}
break;
case 4:
{
set_v_out(tem_v_out0-40,1); //4<x<5 v
}
break;
case 5:
{
set_v_out(tem_v_out0-50,1); //5<x<6 41v
}
break;
case 6:
{
set_v_out(tem_v_out0-60,1); //6<x<7 20v
}
break;
case 7:
{
set_v_out(tem_v_out0-70,1); //6<x<7 20v
}
break;
case 8:
{
set_v_out(tem_v_out0-80,1); //6<x<7 20v
}
break;
case 9:
{
set_v_out(tem_v_out0-90,1); //6<x<7 20v
}
break;
case 10:
{
set_v_out(tem_v_out0-100,1); //6<x<7 20v
}
break;
case 11:
{
set_v_out(tem_v_out0-110,1); //6<x<7 20v
}
break;
case 12:
{
set_v_out(tem_v_out0-120,1); //6<x<7 20v
}
break;
case 13:
{
set_v_out(tem_v_out0-130,1); //6<x<7 20v
}
break;
case 14:
{
set_v_out(tem_v_out0-140,1); //6<x<7 20v
}
break;
case 15:
{
set_v_out(tem_v_out0-150,1); //6<x<7 20v
}
break;
case 16:
{
set_v_out(tem_v_out0-160,1); //6<x<7 20v
}
break;
case 17:
{
set_v_out(2300,1); //180v 8<x<15
}
break;
case 18:
{
set_v_out(100,1); //220v x>15
}
break;
//***************************************************//
case 20:
{
set_v_out(tem_v_out0+10,1); //-2<x<0 v
}
break;
case 21:
{
set_v_out(tem_v_out0+20,1); //-5<x<-2 41v
}
break;
case 22:
{
set_v_out(tem_v_out0+30,1); //-10<x<-5 20v
}
break;
case 23:
{
set_v_out(tem_v_out0+40,1); //x<-10 0v
}
break;
case 24:
{
set_v_out(tem_v_out0+50,1); //x<-10 0v
}
break;
case 25:
{
set_v_out(tem_v_out0+60,1); //x<-10 0v
}
break;
case 26:
{
set_v_out(tem_v_out0+70,1); //x<-10 0v
}
break;
case 27:
{
set_v_out(tem_v_out0+80,1); //x<-10 0v
}
break;
case 28:
{
set_v_out(4800,1); //x<-10 0v
}
break;
case 29:
{
set_v_out(4990,1); //x<-10 0v
}
break;
}
}
}
}
//系统初始化,使用外部时钟
void sysclk_init (void)
{
int i; // 延时计数变量
OSCXCN = 0x67; // 启用外部时钟
for (i=0; i < 2560; i++) ; // 等待时钟启动成功
while (!(OSCXCN & 0x80)) ;
OSCICN = 0x88; // 选择外部时钟作为系统时钟,使能时钟丢失检测器
for (i=0; i < 2560; i++) ;
}
//端口初始化,配置交叉开关,设置输出方式
void port_init (void)
{
XBR0 = 0x04; // 使能串口0 rx0,tx0连接到2个端口引脚
XBR1 = 0x00;
XBR2 = 0x40; // 使能交叉开关,设置端口为弱上拉
P0MDOUT = 0x00; //
P1MDOUT= 0x00; //
P2MDOUT = 0x00; //
P3MDOUT= 0x00; //
P74OUT=0x00; //
}
// 这个子程序将定时器4设置为自装载模式,定时间隔由参数counts改变
void timer4_init (int counts)
{
T4CON = 0; //停止计数设置为自动装载模式
CKCON &=~0x40; // T4M = '1'; 工作时钟选为系统时钟
RCAP4 = -counts; // 设置自动装载数据,注意为负值
T4 = RCAP4; //设置捕捉、重新装载功能
EIE2 |= 0x04; // 使能定时器4中断
T4CON |= 0x04; // 启动定时器4
}
//定时器0初始化函数
void timer0_init(unsigned char counts)
{
CKCON &=0xf7; //定时器0采用系统12分频
TMOD |=0x02; //定时器0设置为自动重装载方式
TMOD &=0xfe; //
TH0=-counts; //装载数据
TL0=-counts;
// ET0=1; //使能定时器0中断
// TR0=1; //启动定时器0
}
void disable_dog(void)
{
WDTCN = 0xde; // 禁止看门狗定时器
WDTCN = 0xad;
}
//初始化dac0
void init_dac0(void)
{
// REF0CN = 0x03; // 使能内部电压基准,内部电压缓冲器工作
DAC0CN = 0x87; // 设置DAC0为右对齐数据方式,使能dac0
//写DAC0H输出
}
//初始化dac1
void init_dac1(void)
{
// REF0CN = 0x03; // 使能内部电压基准
DAC1CN = 0x87; // 设置DAC1为右对齐数据方式,使能dac1
//写DAC1H输出
}
//微动dac的初始化
void micro_init_dac1(void)
{
REF0CN = 0x03; // 使能内部电压基准
DAC0CN = 0x87;
DAC1CN = 0x87; // 设置DAC1为左对齐数据方式使能dac1 定时器4
//溢出更新
}
//尺蠖蠕动方式运动初始化dac0和dac1
void inchworm_init(void)
{
REF0CN = 0x03; // 使能内部电压基准,内部电压缓冲器工作
DAC0CN = 0x87; // 设置DAC0为左对齐数据方式,使能dac0
//定时器4溢出更新
T4CON=0;
DAC1CN = 0x87; // 设置DAC1为左对齐数据方式使能dac
}
//初始化adc0,
void adc0_init (void)
{
ADC0CN = 0x81; // ADC0使能,正常跟踪模式
// 通过写AD0BUSY位启动一次ad转换
// ADC0数据左对齐
REF0CN = 0x07; // 使能温度传感器,使能片内电压基准
// 使能电压基准输出缓冲
AMX0CF=0x03; //0 1 2 3差分输入
ADC0CF = (sysclk/2500000) << 3; // AD转换时钟为2.5MHz
ADC0CF |= 0x00; // 增益放大倍数为2
EIE2 &= ~0x02; // 禁止ad转换完成中断,采用查询模式
EIE1 &= ~0x04;
delay_time(1000);
}
//单路初始化adc0
void adc0_single_init (unsigned char channel)
{
AMX0SL = channel; // 选择channel 0信号输入到dac中
}
//延时函数
void delay_time(unsigned int time_value)
{
int hi,hj;
for (hi=0; hi<time_value; hi++)
{
for (hj=0; hj < 2000; hj++) ;
}
}
// 定时器1作为串口时钟, 变量<baudrate>代表波特率,8位数据,无校验,1位停止位.
void uart0_init (void)
{
SCON0 = 0x50; // SCON0: mode 1, 8-bit UART, enable RX
// IP|=0x10; //设置uart为最高优先级中断
TMOD = 0x20; // TMOD: 定时器1,方式2,8位重装载
TH1 = -(sysclk/BAUDRATE/16); // 设定波特率
TR1 = 1; // 启动定时器1
CKCON |= 0x10; // 定时器1选用系统时钟作为时钟源
PCON |= 0x80; // SMOD0 = 1
// ES0 = 1; // 指示发送准备好
TI0=1;
}
//定时器4中断服务子程序
void timer4_ISR (void) interrupt 16 using 3
{
T4CON &= ~0x80; // 清定时器4的溢出标志
sample_period++;
if(foot_flag)
{
foot_acc++;
if(foot_acc==robot1.robot_position)
{
em0=1;
foot_flag=0;
foot_acc=0;
}
}
if((foot_sw==0))
{
foot_acc1++;
if(foot_acc1==3)
{
foot_flag=1;
em0=0;
foot_acc1=0;
}
}
if(sample_period>robot1.samples)
{
control_flag=1;
sample_period=0;
}
}
//串口发送数据
void send_lcd_data(char *str)
{
unsigned char i;
for(i=0;str[i];i++) //循环发送字符串
{
write_ram(str[i]);
}
}
//串口发送数据
void Tdata(char *str)
{
unsigned char i;
ES0=0;
for(i=0;str[i];i++) //循环发送字符串
{
SBUF0=str[i];
while(TI0==0);//发送完成
TI0=0;
}
ES0= 1;
}
//发送单个数据
void Tdatar(char s)
{
ES0=0;
SBUF0=s;
while(TI0==0);//发送完成
TI0=0;
ES0=1;
}
//从字符串中取字符 s:字符串指针,begin:开始位置,longth:要取的字符串长度
char * strmid(char * s,unsigned char begin,unsigned char longth)
{
unsigned char ii;
ii=0;
for(ii=0;ii<longth;ii++) array[ii]=s[begin+ii];
array[ii]='\0';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -