单片机
返回首页

AVR之最简单外部中断、定时器0、定时器1程序

2021-06-21 来源:eefocus

程序太简单啦,就不说啦,自己看吧

ATMEGA16用ICCAVR编译器

1、外部中断

#include

#include

unsigned char temp=0x80;

void main()

{    

    DDRA=0xff;

    GICR|=0x40;//使能外部INT0

    MCUCR|=0x01;//INT0下降沿触发

    SEI();//总中断

    while(1);

}

#pragma interrupt_handler int0_isr:iv_INT0

void int0_isr(void)

{

    PORTA=temp;

    temp=temp>>7|temp<<1;

}


2、定时器0--普通模式

#include

#include

unsigned char count;

void main()

{

    //TCCR0=0;

  TCNT0=12;

  //OCR0=244;

  TCCR0=0x05;

  TIMSK=0x01;

  SEI();

  DDRA=0xff;

  PORTA=0;

  while(1);

}

#pragma interrupt_handler Timer0:iv_TIMER0_OVF

void Timer0()

{

     TCNT0=12;

     count++;

    if(count==2)

    {

      PORTA=~PORTA;

    count=0;

    }

}

3、定时器0--匹配模式

#include

#include

void main()

{

    //TCCR0=0;

  TCNT0=12;//设置计数初值,计数244后清零申请中断

  OCR0=244;//从0计数到244,匹配申请中断

  TCCR0=0x0d;//CTC模式,1024预分频

  TIMSK=0x02;//使能输出比较匹配中断

  SEI();

  DDRA=0xff;

  PORTA=0;

  while(1);

}

#pragma interrupt_handler Timer0:iv_TIMER0_COMP

void Timer0()

{

     count++;

    if(count==2)

    {

      PORTA=~PORTA;

    count=0;

    }

}

4、定时器1

#include

#include

void main()

{

    TCCR1A=0;//WGM11、10清零

  TCCR1B=0;

  TCNT1H=0x0b;

  TCNT1L=0xdb;

  TCCR1B=2;//WGM13、12清零,为普通模式,时钟选择CS02~00:8预分频

    TIMSK=0x04;

  SEI();

  DDRA=0xff;

  PORTA=0;

  while(1);

}

#pragma interrupt_handler timer1:iv_TIMER1_OVF

void timer1()

{

     TCNT1H=0x0b;

    TCNT1L=0xdb;

    PORTA=~PORTA;

}


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章