📄 int0.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 + -