logo资料库

ATmega128定时器使用大全.doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
#include #include #include"delay.h" #include"usart.h" unsigned char Count1 = 0; unsigned char Count2 = 0; unsigned char count = 0; void port_init(void) { PORTA = 0x00; DDRA = 0xFF; PORTB = 0x00; DDRB = 0xFF; PORTC = 0x00; //m103 output only DDRC = 0xFF; PORTD = 0x00; DDRD = 0x00; PORTE = 0x00; DDRE = 0xFF; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x00; } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts XDIV = 0x00; //xtal divider XMCRA = 0x00; //external memory port_init(); //uart0_init(); MCUCR = 0x00; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints EIMSK = 0x00; TIMSK = 0x00; //timer interrupt sources ETIMSK = 0x00; //extended timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } // void PWM10(void)
{ } /*在 10 位相位修正 PWM 模式下,产生 PWM 波*/ //TCCR1A = 0X83; TCCR1A = (1<
} void InPut_Init(void) { DDRD &= ~(1<<4); PORTD |= (1<<4); SREG = 0X80; TCNT1 = 0; TCCR1B = (1<>8); TCNT1L = (unsigned char)k; //对 16 位的寄存器读值 unsigned int Read_r16Register(void) { unsigned int k; k = TCNT1L; k += (unsigned int)(TCNT1H<<8); return k; } } //CTC 模式,外部计数 void CTC_Init_T1(void) { DDRD &= ~(1<<6); PORTD |= (1<<6); TCCR1A = 0X00; TCCR1B = (1<
OCR2 = 0XFF; } void T3_Over_init(void) { //TCNT3H=(65536-50000)/256;//50ms 溢出中断 //TCNT3L=(65536-50000)%256; TCNT3H = 0X1E; TCNT3L = 0XFF;//0XEA; //TCNT3L=0;//X8C; TCCR3B=0X04;//(1<
{ } //uart0_init(); //PORTA = PORTA^0X01; // DelayMs(5); } //外部中断函数 0 #pragma interrupt_handler INT0_Interrupt:02 void INT0_Interrupt(void) { Count1++; PORTA = PORTA^0X01; } #pragma interrupt_handler INT1_Interrupt:03 void INT1_Interrupt(void) { Count2++; PORTA = PORTA^0X01; } } //T0 溢出中断函数#pragma #pragma interrupt_handler T0_Over_Interrupt:17 void T0_Over_Interrupt(void) { TCNT0 = 0x0F; count++; if(count==60) { count = 0; PORTA = PORTA^0X01; } // USART0_Transmit(TCNT1H); // USART0_Transmit(TCNT1L); // TCNT1H = 0; // TCNT1L = 0; //T3 溢出中断函数 #pragma interrupt_handler T3_Over_Interrupt:30 void T3_Over_Interrupt(void) { TCNT3H = 0X1E; TCNT3L = 0XFF; //DelayMs(30); USART0_Transmit(Count1); USART0_Transmit(Count2); Count1 = 0; Count2 = 0; //TCNT1H = 0; //TCNT1L = 0;
//USART0_Transmit(TCNT2); //TCNT2 = 0; //PORTA = PORTA^0X01; } //CTC #pragma interrupt_handler T1:13 void T1(void) { USART0_Transmit(TCNT1L); PORTA = 0X0F; //PORTA^0X01; } //捕捉中断,向量编号 12 #pragma interrupt_handler input1:12 void input1(void) { //ICNT1H = // count = TCNT1; // USART0_Transmit(TCNT1H); //count++; USART0_Transmit(ICR1H); USART0_Transmit(ICR1L); Delay_1us(100); /*if(count == 200) { //TCNT1 = 0; PORTA = 0X0F; } if(count == 400) { count = 0; // TCNT1 = 0; PORTA = 0X00; }*/ }
分享到:
收藏