⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 舵机测试仪.i

📁 mega8产生的两路PWM信号
💻 I
字号:

// CodeVisionAVR C Compiler
// (C) 1998-2004 Pavel Haiduc, HP InfoTech S.R.L.

// I/O registers definitions for the ATmega8


#pragma used+
sfrb TWBR=0;
sfrb TWSR=1;
sfrb TWAR=2;
sfrb TWDR=3;
sfrb ADCL=4;
sfrb ADCH=5;
sfrw ADCW=4;      // 16 bit access
sfrb ADCSRA=6;
sfrb ADMUX=7;
sfrb ACSR=8;
sfrb UBRRL=9;
sfrb UCSRB=0xa;
sfrb UCSRA=0xb;
sfrb UDR=0xc;
sfrb SPCR=0xd;
sfrb SPSR=0xe;
sfrb SPDR=0xf;
sfrb PIND=0x10;
sfrb DDRD=0x11;
sfrb PORTD=0x12;
sfrb PINC=0x13;
sfrb DDRC=0x14;
sfrb PORTC=0x15;
sfrb PINB=0x16;
sfrb DDRB=0x17;
sfrb PORTB=0x18;
sfrb EECR=0x1c;
sfrb EEDR=0x1d;
sfrb EEARL=0x1e;
sfrb EEARH=0x1f;
sfrw EEAR=0x1e;   // 16 bit access
sfrb UBRRH=0x20;
sfrb UCSRC=0X20;
sfrb WDTCR=0x21;
sfrb ASSR=0x22;
sfrb OCR2=0x23;
sfrb TCNT2=0x24;
sfrb TCCR2=0x25;
sfrb ICR1L=0x26;
sfrb ICR1H=0x27;
sfrw ICR1=0x26;   // 16 bit access
sfrb OCR1BL=0x28;
sfrb OCR1BH=0x29;
sfrw OCR1B=0x28;  // 16 bit access
sfrb OCR1AL=0x2a;
sfrb OCR1AH=0x2b;
sfrw OCR1A=0x2a;  // 16 bit access
sfrb TCNT1L=0x2c;
sfrb TCNT1H=0x2d;
sfrw TCNT1=0x2c;  // 16 bit access
sfrb TCCR1B=0x2e;
sfrb TCCR1A=0x2f;
sfrb SFIOR=0x30;
sfrb OSCCAL=0x31;
sfrb TCNT0=0x32;
sfrb TCCR0=0x33;
sfrb MCUCSR=0x34;
sfrb MCUCR=0x35;
sfrb TWCR=0x36;
sfrb SPMCR=0x37;
sfrb TIFR=0x38;
sfrb TIMSK=0x39;
sfrb GIFR=0x3a;
sfrb GICR=0x3b;
sfrb SPL=0x3d;
sfrb SPH=0x3e;
sfrb SREG=0x3f;
#pragma used-

// Interrupt vectors definitions





extern void delay_us(unsigned int i);
extern void ini_xt(void);
extern unsigned char get_key(void);
extern void display(void);

extern unsigned int ch1,ch2;        //通道1,通道2,

extern unsigned char fs,td;         //方式(输入输出),输入通道,ADC结果指针

extern unsigned char in0,in1;	    //外部中断次数

extern unsigned int js1,js2;       //转速计数 

extern unsigned char zz;       //AD转换切换

extern const unsigned char sz[];


//A/D转换
interrupt [15] void ADC_R(void)
{SREG|=0x80;
if(zz==1){ch1=ADCW;zz=2;}
else if(zz==2){ch2=ADCW;zz=1;}
 } 

//T1溢出 
interrupt [9] 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 [7] void T1_COMPA(void)
{if(td==1)PORTD.2=1;
else PORTD.3=1;
 }
 
//T1比较匹配B 
interrupt [8] void T1_COMPB(void)
{if(td==1)PORTD.2=0;
else PORTD.3=0;
 }

//INT0中断
interrupt [2] 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 [3] 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(unsigned int 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 + -