avrstudio5接收中断函数名
avrstudio5接收中断函数名
篇一:
AVR studio 中断、计时器程序 本程序应用了外部中断
1、0,定时器中断0, 初始显示变量uname(100000), 按下中断1显示内容减
1,中断0加1,定时器每隔一秒加1 显示子函数AVR_display; 频率1M A口接数
码管段选 B口接数码管位选 */ #include avr/io.h #include
avr/interrupt.h volatile unsigned long Ex_i; //定时器用的变量 volatile unsigned long uname=100000;//初始显示内容 /*=====0-9=====A-G=====*/ unsigned
char table[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //共阳极数码管的段码0 1 2 3 4 5 6 7 8 9 A B C D E F /*0-7*/ unsigned char num[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //共阳极数码管的wei码0 1 2 3 4 5 6 7 8 void init_avrinter();//外部中断初始化 void init_avrtimer0();//计数器0初始化 void delay(unsigned int x);//延时函数 void AVR_display(unsigned long nnn);//显示函数 int序 { maDDRin(A=0) /xf/主程f; //设置方向寄存器为输
出 DDRB=0xff; DDRD=0xff; PORTD=0xff; init_avrinter(); init_avrtimer0(); while (1) { AVR_display(uname); } } void init_avrinter()//外部中断初始化 { sei();//开总中断MCUCR |= (1 ISC10)|(1 ISC00)|(1 ISC01); //INT1下(shang)降沿触发 INT0上降沿触发 GICR |= (1 INT1)|(1 INT0);//使能INT1 INT0 } void init_avrtimer0()//定时器0初始化 { TCNT0 = 5; TIMSK |= (1 TOIE0);//使能TC0溢出中断 TCCR0 |= (1 CS01);// 8
} SIGNAL(SIG_INTERRUPT0)//外部中断0程序 { uname++; //显示内容加1 } 分频
SIGNAL(SIG_INTERRUPT1)//外部中断1程序 { uname--; //显示内容
减1 } SIGNAL(SIG_OVERFLOW0)//外部中断1程序 { Ex_i ++; TCNT0 = 5; if(Ex_i =500) { Ex_i=0; uname++; } } void delay(unsigned int x)//延时 { unsigned int Dl_i; for(Dl_i=0;Dl_i Dl_i++); } void AVR_display(unsigned long nnn)//显示 9999 9999一下十进制数 { unsigned char n[8],i,j=8; unsigned long nn; nn = nnn; for(i=0;i i++) { n[i] = nn%10; nn /= 10;} for(i=0;i i++) { if(n[7-i])break;j--; } for(i=0;i i++) { PORTA = table[n[i]];PORTB = num[7-i];delay(270);PORTA = 0xff;PORTB = 0xff; } } //板子上数码管 位方向 是高位到低位(7 0);篇二:
ICC AVR 过渡到 AVR STUDIO时要注意的几个问题 ICC AVR 过渡到 AVR STUDIO时要注意的几个问题 列出ICC AVR 过渡到 AVR STUDIO时要注意的几个问题
1.头文件更改 ICCAVR使用的是“#include iom16v.h ” AVR STUDIO更改
为“#include avr/io.h ” 在ICC中使用不同MCU的头文件是不同的,在AVR studio中所有MCU的头文件都用“#include avr/io.h ” 2.AVR studio中延时函数可直接使用“#include util/delay.h ”头文件中的延时函数:
_del voay_id us (double __us); void _delay_ms(double __ms); 两个函数的参数均为double型的,通常使用整数延时即可。
(函数最大延时时间是有限制的,参考“util/delay.h”) 3.中断函数写法不同 在
ICC 中断函数名可以自定义 列出ATmega16的向量表:
#define IT_RESET 1 #define IT_INT02 #define IT_INT13 #define IT_TIMER2_COMP 4 #define IT_TIMER2_OVF5 #define IT_TIMER1_CAPT 6 #define IT_TIMER1_COMPA 7 #define IT_TIMER1_COMPB 8 #define
IT_TIMER1_OVF9#define IT_TIMER0_OVF10 #define IT_SPI_STC11 #define IT_USART_RXC 12 #define IT_USART_UDRE13 #define IT_USART_TXC 14 #define IT_ADC 15 #define IT_EE_RDY 16 #define IT_ANA_COMP 17 #define IT_TWI 18 #define IT_INT219 #define IT_TIMER0_COMP 20 #define
IT_SPM_RDY21 #pragma interrupt_handler user_fuc:Interrupt vector number 如: #pragma interrupt_handler Time2:iv_TIMER2_COMP void Time2() { } AVR studio
include avr/interrupt.h ”头文件且中断函数名不能自定义 如: 中需添加“#
#include avr/interrupt.h ISR(SIG_OVERFLOW0) //定时器/计数器0溢出中断(ICC AVR 过渡到 AVR STUDIO 4.一些库函数的不同 ICC
AVR studionop()asm( nop ) WDR()asm( wdr ) CLI() cli() SEI() sei()篇三:
ATmega128串口通信程序(中断方式) ATmega128串口通信程序(中断方式)2017-06-05 20:08:10| 分类:
| 标签:
|字号大中小 订阅 程序采用IAR系统编译,实现使用串口调试助手收发数据的功
能 #include iom128.h #include inavr.h #include string.h #define INT8U unsigned char #define INT16U unsigned int #define UDRIE05 /* UART Buffer Defines */ #define UART0_RX_BUFFER_SIZE 128 #define UART0_TX_BUFFER_SIZE 128 /* Static Variables */ static unsigned char
UART0_RxBuf[UART0_RX_BUFFER_SIZE]; static volatile unsigned
char UART0_RxHead; static volatile unsigned char UART0_RxTail; static unsigned char UART0_TxBuf[UART0_TX_BUFFER_SIZE]; static volatile unsigned
char UART0_TxHead; static volatile unsigned char UART0_TxTail; static unsigned char UART0_Flag=1; void USART_INIT( void ) { UBRR0H = 0x00; UBRR0L = 0x0B;//9600 at
1.8432M UCSR0A = 0x20; UCSR0B = 0xD8;//开接收结束中断,发送结束中断接收使能,发送使能UCSR0C = 0x06;//异步模式,1位停止位,8位数据位 UDR0 = 0x00;//清空数据寄存器 UART0_RxTail = 0; UART0_RxHead = 0; UART0_TxTail
= 0; UART0_TxHead = 0; __disable_interrupt();//关全局中断 }
void Tran_Byte( INT8U sdata ) { if(UART0_Flag == 0) { UDR0 = sdata;UART0_Flag = 1; } else { UART0_TxBuf[UART0_TxHead] = sdata; UART0_TxHead++; if(UART0_TxHead = UART0_TX_BUFFER_SIZE) UART0_TxHead
= 0; } __enable_interrupt(); } void Send_String( INT8U *string ) { INT8U temp; while
(1) { temp = *string; Tran_Byte(temp); string++; if(*string == 0x00) break; } } INT8U HaveDataRxd( void ) { if(UART0_RxHead != UART0_RxTail) return 1; else return 0; } INT8U GetDataFromRxdBuf( void ) { INT8U temp;
temp = UART0_RxBuf[UART0_RxTail]; UART0_RxTail ++ ; if(
UART0_RxTail = UART0_RX_BUFFER_SIZE ){ UART0_RxTail = 0 ; } return temp; }//清空接收缓冲区。
void UART_ResetRxBuffer( void ) { UART0_RxHead = 0; UART0_RxTail = 0; } int main( void ) { DDRA = 0xFF;PORTA = 0xFF; DDRE = 0xFE; INT8U tab; USART_INIT(); __enable_interrupt();//开全局中断 while
(1) { __delay_cycles(10000); while(!HaveDataRxd()); tab = GetDataFromRxdBuf(); __delay_cycles(10000); Tran_Byte(tab); } } #pragma
vector=USART0_RXC_vect __interrupt void USART0_RX( void ) { INT8U data;
INT8U status; data = UDR0; /* read the received data */ status = UCSR0A; if((status 0x18) == 0x00) { UART0_RxBuf[UART0_RxHead] = data; UART0_RxHead ++; if(UART0_RxHead == UART0_RX_BUFFER_SIZE) UART0_RxHead = 0; } } #pragma vector=USART0_TXC_vect __interrupt void USRAT0_TX( void ) { INT8U temp; /* check if all data is transmitted */ if(UART0_TxHead != UART0_TxTail){ /* calculate buffer index */ temp = UART0_TxBuf[UART0_TxTail]; UDR0
= temp; UART0_TxTail ++; if(UART0_TxTail = UART0_TX_BUFFER_SIZE) UART0_TxTail = 0; } else { UART0_Flag = 0; } }
本文档为【avrstudio5接收中断函数名】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。