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

📄 diy0816_09._c

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 _C
字号:
//9.	I/O端口的又一应用-发声。
//PB.0端口开关控制PC.0输出报警声程序! 
//请你修改程序改变报警声音调及快慢。
//     www.sl.com.cn
//     teny@sl.com.cn    05-11-12
// Target : mega16     Crystal: 8.0000Mhz

#include <iom16v.h>
#include <macros.h>
		 //微秒级延时
void delay_us(int time)
{     
 do
 {
  time--;
 }	
  while (time>1);
}	  
	  	//毫秒级延时
void delay_ms(unsigned int time)
{
 while(time!=0)
 {		
  delay_us(1000);
  time--;
 }
}		

void port_init(void)
{	 //端口初始化
 DDRA  = 0x00;PORTA = 0xFF;
 DDRB  = 0x00;PORTB = 0xFF;
 DDRC  = 0xFF;PORTC = 0xFF;
 DDRD  = 0x00;PORTD = 0xFF; 
}

//TIMER1 initialisation - prescale:8
// desired value: 100uSec
// actual value: 100.000uSec (0.0%)
void timer1_init(void)
{	 //定时/计数器1初始化
 TCCR1B = 0x00; //stop
 TCNT1H = 0xFe; //setup
 TCNT1L = 0x86;
 OCR1AH = 0x00;
 OCR1AL = 0x64;
 OCR1BH = 0x00;
 OCR1BL = 0x64;
 TCCR1A = 0x00;
 TCCR1B = 0x02; //start Timer
}

#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{	 //定时/计数器1溢出中断处理函数
 TCNT1 = 0xFe86; //reload counter value
 PORTC^=0x01;
}

//call this routine to initialise all peripherals
void init_devices(void)
{//芯片初始化
 //stop errant interrupts until set up
 CLI(); //关中断
 port_init();//调用端口初始化函数
 timer1_init();//调用定时/计数器1初始化函数

 MCUCR = 0x00;
 GIMSK = 0x00;
 TIMSK = 0x04;
// SEI(); //开中断
}

void main(void)
{	 //主函数
 unsigned char pb_buf;//定义局部字符型变量
 init_devices();//调用芯片初始化函数
 while(1) //等待PB0按键按下
 {		  //无键按下等待
  pb_buf=PINB & 0x01;
  if(pb_buf==0x00){break;}
 }//有键按下运行下面的程序
 SEI();//开中断
 while(1)//循环运行
 {
  DDRC = 0xFF;//PC口做输出口
  delay_ms(500);//报警声
  DDRC = 0x00;//PC口做输入口
  delay_ms(500);//间隔
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -