发 帖  
[问答] 超声波测距-AVR程序代码
192 超声波测距 AVR
分享
本帖最后由 一只耳朵怪 于 2018-6-26 11:31 编辑



以前学习AVR时候写的程序,分享一下





#include

#include  

#define uchar unsigned char

#define uint unsigned int

uchar int_flag;

uint qian,bai,shi,ge;

uint i;

float distance;



// Alphanumeric LCD Module functions

#asm

    .equ __lcd_port=0x18 ;PORTB

#endasm

#include



// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{#asm("sei")

if(int_flag)

{

distance=i*17.3;



}

else if(int_flag==0)

{

i=0;      

int_flag=1;

TCCR0=0x0A;

}



}



// Timer 0 output compare interrupt service routine

interrupt [TIM0_COMP] void timer0_comp_isr(void)

{

i++;

}



// Declare your global variables here



void main(void)

{

// Declare your local variables here



// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0x01;



// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x00;



// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00;

DDRC=0x00;



// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTD=0x04;

DDRD=0x00;



// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: 2000.000 kHz

// Mode: CTC top=OCR0

// OC0 output: Disconnected

TCCR0=0x00;

TCNT0=0x00;

OCR0=0xc8;



// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;



// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;



// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Any change

// INT1: Off

// INT2: Off

GICR|=0x40;

MCUCR=0x01;

MCUCSR=0x00;

GIFR=0x40;



// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x02;



// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;



// LCD module initialization

lcd_init(16);



// Global enable interrupts

#asm("sei")

PORTA.0=1;

delay_us(15);

PORTA.0=0;



while (1)

       {

        qian=(int)distance/1000;

      bai=(int)distance00/100;

      shi=(int)distance0/10;

      ge=(int)distance;

      lcd_gotoxy(0,0);

      lcd_putchar(qian+48);

      lcd_putchar(bai+48);

      lcd_putchar(shi+48);

      lcd_putchar(ge+48);

      delay_ms(200);

      PORTA.0=1;

delay_us(15);

PORTA.0=0;

int_flag=0;

       };

}


0
2018-6-26 02:47:34   评论 邀请回答

只有小组成员才能发言,加入小组>>

38个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表