avr mega8 PWM 超声发射试验程序

2020-09-16来源: 51hei关键字:avr  mega8  PWM  超声发射

// 采用硬件件定时器产生宽度可调PWM信号

//ICC-AVR application builder : 2020/3/23 10:29:05

// Target : M8

// Crystal: 11.059Mhz

//

#include

#include


// #define  FG1 0xFEED   // 20KHz

// #define  FG2 0x0113   //


#define  FG1 0xA99C    // 500HZ

#define  FG2 0x5664    //



unsigned char rtu0=0;

////////////////////////////////////////////////////////////////////////////////

void port_init(void)

{

PORTB = 0xE9;

DDRB  = 0x16;   // 0001 0110

PORTC = 0x7F;   // m103 output only

DDRC  = 0x00;

PORTD = 0xFF;

DDRD  = 0x00;

}

////////////////////////////////////////////////////////////////////////////////

//TIMER1 initialize - prescale:1

// WGM: 14) PWM fast, TOP=ICRn

// desired value: 20KHz

// actual value: 20.069KHz (0.2%)

void timer1_init(void)

{

TCCR1B = 0x00; // stop

TCNT1 = FG1;   // setup

//OCR1A = 247; // 90%FULL  

OCR1A = FG2>>1;

OCR1B = FG2;

ICR1  = FG2;


TCCR1A = 0x82;

TCCR1B = 0x19; //start Timer

}

////////////////////////////////////////////////////////////////////////////////

// TIMER2 initialize - prescale:1024

// WGM: Normal

// desired value: 23mSec

// actual  value: 22.963mSec (0.2%)

void timer2_init(void)

{

TCCR2 = 0x00; // stop

ASSR  = 0x00; // set async mode

TCNT2 = 0x08; // setup

OCR2  = 0xF8; //

TCCR2 = 0x07; // start

}

////////////////////////////////////////////////////////////////////////////////

#pragma interrupt_handler timer2_ovf_isr:iv_TIM2_OVF

void timer2_ovf_isr(void)

{

TCNT2 = 0x08;           // reload counter value


// if(OCR1A

// else OCR1A=0;


// rtu0++;

if( rtu0>20 )

{ rtu0=0; PORTB^=0x14;} // B2

}

////////////////////////////////////////////////////////////////////////////////

//UART0 initialize

// desired baud rate: 9600

// actual: baud rate:9600 (0.0%)

void uart0_init(void)

{

UCSRB = 0x00; //disable while setting baud rate

UCSRA = 0x00;

UCSRC = BIT(URSEL) | 0x06;

UBRRL = 0x47; //set baud rate lo

UBRRH = 0x00; //set baud rate hi

UCSRB = 0xD8;

}

////////////////////////////////////////////////////////////////////////////////

#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC

void uart0_rx_isr(void)

{

//uart has received a character in UDR

}

////////////////////////////////////////////////////////////////////////////////

#pragma interrupt_handler uart0_tx_isr:iv_USART0_TXC

void uart0_tx_isr(void)

{

//character has been transmitted

}

////////////////////////////////////////////////////////////////////////////////

//ADC initialize

// Conversion time: 75uS

void adc_init(void)

{

ADCSR = 0x00; //disable adc

ADMUX = 0x00; //select adc input 0

ACSR  = 0x80;

ADCSR = 0x86;

}

////////////////////////////////////////////////////////////////////////////////

//call this routine to initialize all peripherals

void init_devices(void)

{

//stop errant interrupts until set up

CLI(); //disable all interrupts

port_init();

timer1_init();

timer2_init();

uart0_init();

adc_init();


MCUCR = 0x00;

GICR  = 0x00;

TIMSK = 0x40; //timer interrupt sources

SEI(); //re-enable interrupts

//all peripherals are now initialized

}

////////////////////////////////////////////////////////////////////////////////



void main(void)

{


init_devices();


PORTB|=0x04;


while( 1 )

  {

  

  OCR1A=FG2/2;

  

  

   asm("NOP");asm("NOP");asm("NOP");asm("NOP");

   asm("NOP");asm("NOP");//asm("NOP");asm("NOP");

   

   // PORTB^=0x02;  //B1

   // while(1);

  }

}

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////


关键字:avr  mega8  PWM  超声发射 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic510371.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:AT90S8515单片机SPI驱动74LS595源程序
下一篇:bascom avr tiny45驱动74hc595

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

BASCOM-AVR 驱动数码管简洁代码
''''''''''''''''''''''  BASCOM-AVR 驱动一个数码管显示数字 0-9 下载附件查看原理图 代码 实物照片 '''''''''''''''''''''''''''''''
发表于 2020-09-17
BASCOM-<font color='red'>AVR</font> 驱动数码管简洁代码
能显示温度及时间(能调时闹时)的bascom-avr程序
$regfile = "m16def.dat"$crystal = 8000000Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0Config Lcd = 16 * 2Config 1wire = Porta.0'*************************************************Dim Id(8) As ByteDim I As ByteDim C(2) As ByteDim T As Word&nb
发表于 2020-09-17
AVR单片机熔丝位的设置及拯救方法
AVR单片机需要设置合适的熔丝位才能实现其功能,如果熔丝位设置的不对将有可能导致单片机自锁,这是我整理的AVR单片机熔丝位的设置及拯救方,希望对大家有帮助。 
发表于 2020-09-17
<font color='red'>AVR</font>单片机熔丝位的设置及拯救方法
BASCOM AVR 版 RC5红外发射与接收遥控
单片机源程序如下:rem Main.bas file generated by New Project wizardrem  RC5编码发射rem Created:   周六 12月 21 2019   taotierem Processor: ATmega8rem Compiler:  BASCOM-AVRrem Write your code here$regfile ="m8def.dat"$crystal =8000000DDRD=&B00000000PORTD=&B11111111  main:  do&nb
发表于 2020-09-16
BASCOM <font color='red'>AVR</font> 版 RC5红外发射与接收遥控
bascom avr tiny45驱动74hc595
如题,代码如下:$regfile = "attiny45.dat"                                   '指定单片机型号$crystal = 8000000                     &
发表于 2020-09-16
Mega8 智能充电器-12. 终于实现-dV检测
方法:1) ADC部分, 硬件RC滤波, 软件每次测量连续获取5个ADC值, 去掉最高和最低的值, 最后剩下的取平均.2) 记录电压的最高值, 只要达到了一个电压值,就记录在变量TOP内. 如果电压下降到top-12mV,并且连续3次,则确认-dV, 充电完成.3) 只要突破TOP,则-dV计数复位.if( ic->top_voltage > (ic->voltage+0.012) ){            ic->delta_times++;          infon(&q
发表于 2019-12-11
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved