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

📄 int0.c

📁 简单的ATmega16中断编程
💻 C
字号:
#include <iom16v.h>
#include <macros.h>

#define uchar unsigned char
#define uint unsigned int
#define F_cpu 3686400

uchar IntCnt;//全局变量	

void USART_Init(long int baud)
{
 uint temp;
 temp=F_cpu/baud/16-1;
 UBRRH=(uchar)(temp>>8); //写波特率寄存器
 UBRRL=(uchar)temp;//uchar为8位,它会截取16位temp数据中的低8位
 
 UCSRB=(1<<RXEN)|(1<<TXEN); //接收发送使能
 UCSRC=(1<<URSEL)|(0<<USBS)|(1<<UCSZ0)|(1<<UCSZ1);  //异步,1个停止位,8个数据位
}
void USART_Transmit(char data)
{
 while(!(UCSRA&(1<<UDRE)));  //等待数据发送完
 UDR=data;
}

#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
 IntCnt++;
 USART_Transmit((IntCnt%10)+'0');
}

void main(void) 
{
 char i;
 /*DDRA=0x0f;
 PORTA=0xf0;//这种定义无法实现中断*/
 DDRB=0xf0;
 PORTB=0x0f;//往相应管脚写1,
 //测试该管脚时都为高电平,不管其方向寄存器定义为输出还是输入,
 DDRD=0x00;//中断输入管脚要定义为输入
 PORTD=0x00;
 USART_Init(9600); //波特率9600 初始化串口
 
 CLI(); 
 GICR=0x40;//开中断0
 MCUCR=0x02;//中断0,下降沿触发 
 GIFR=0xC0;
 IntCnt=0;	
 SEI();
 while(1)
 {
 //USART_Transmit((IntCnt%10)+'0');
 /*DDRA=0xf0;
 PORTA=0x0f;
 asm("nop");//iccavr 里要双引号,而winavr里则单引号
 i=PINA;
  //PORTA=Table[IntCnt%10]; 
 USART_Transmit(i);*/
 }
 }

⌨️ 快捷键说明

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