📄 舵机测试仪.c
字号:
#include<main.h>
//A/D转换
interrupt [ADC_INT] void ADC_R(void)
{SREG|=0x80;
if(zz==1){ch1=ADCW;zz=2;}
else if(zz==2){ch2=ADCW;zz=1;}
}
//T1溢出
interrupt [TIM1_OVF] void T1_OVF(void)
{if(fs==1)
{if(td==1){td=2;OCR1B=ch1*5/31+190;}
else {td=1;OCR1B=ch2*5/31+190;}
TCNT1=0;}
if(fs==4){ch1=js1;ch2=js2;TCNT1=3036;js1=js2=0;}//500ms
}
//T1比较匹配A
interrupt [TIM1_COMPA] void T1_COMPA(void)
{if(td==1)out1=1;
else out2=1;
}
//T1比较匹配B
interrupt [TIM1_COMPB] void T1_COMPB(void)
{if(td==1)out1=0;
else out2=0;
}
//INT0中断
interrupt [EXT_INT0] void INT0(void)
{if(fs==2)
{if(in0==0){in0=1;TCNT1=0x00;MCUCR&=0xfe;}
else if(in0==1){in0=0;ch1=TCNT1;MCUCR|=0x01;}}
if(fs==4)
{js1=js1+1;}
}
//INT1中断
interrupt [EXT_INT1] void INT1(void)
{if(fs==2)
{if(in1==0){in1=1;TCNT1=0x00;MCUCR&=0xfb;}
else if(in1==1){in1=0;ch2=TCNT1;MCUCR|=0x04;}}
if(fs==4)
{js2=js2+1;}
}
//延时
void delay_us(uint i)
{while(i--);
}
//主函数
void main(void)
{//uchar i=0;
SREG=0x80;DDRB=0xff;
while(1)
{ini_xt();
display();
if(1==get_key()){if(fs<4)fs=fs+1;else fs=1;ch1=ch2=0;}
}
}
//------------------------注释-------------------------------------
// TCNT2 T2计数寄存器 OCR2 T2比较寄存器
// TIMSK Tn中断屏蔽寄存器 TIFR Tn中断标志寄存器
// SFIOR 特殊功能I/O寄存器 TCCR2 T2控制寄存器
//
// TCNT1H T2计数寄存器H TCNT1L T2计数寄存器L
// OCR1AH T1比较寄存器AH OCR1AL T1比较寄存器AL
// OCR1BH T1比较寄存器BH OCR1BL T1比较寄存器BL
// ICR1H 输入捕捉寄存器 ICR1L 输入捕捉寄存器L
// TCCR1A T1控制寄存器A TCCR1B T1控制寄存器B
//
// MCUCR 中断方式控制 GICR 外部中断使能
// GIFR 外部中断标志
//
//
//
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -