ATMEGA 128單片機定時器應用大全_第1頁
ATMEGA 128單片機定時器應用大全_第2頁
ATMEGA 128單片機定時器應用大全_第3頁
ATMEGA 128單片機定時器應用大全_第4頁
ATMEGA 128單片機定時器應用大全_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、#include <iom128v.h>#include <macros.h>#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; P

2、ORTD = 0x00; DDRD = 0x00; PORTE = 0x00; DDRE = 0xFF; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x00;/call this routine to initialize all peripheralsvoid init_devices(void) /stop errant interrupts until set up CLI(); /disable all interrupts XDIV = 0x00; /xtal divider XMCRA = 0x00; /external mem

3、ory 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) /*在

4、10位相位修正PWM模式下,產(chǎn)生PWM波*/ /TCCR1A = 0X83;TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<COM1C1)|(1<<WGM11)|(1<<WGM10);TCCR1B = (1<<CS10);/|(1<<WGM13)|(1<<WGM12);/沒有預分頻OCR1AH = 0X0F;OCR1AL = 0X01;OCR1BH = 0X1F;OCR1BL = 0X01; OCR1CH = 0X2A;OCR1CL = 0X01;void PWM20MS_

5、Servo(void) /舵機常用 /top值為ICRn時產(chǎn)生PWM TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<COM1C1)|(1<<WGM11);TCCR1B = (1<<CS11)|(1<<WGM13);/8分頻,相位修正ICR1 = 18432;/周期為20MS/ICR1H = 0X48;/周期為20MS/ICR1L = 0X00;OCR1A = 360;/OCR1AL = 0XCC;/OCR1B = 2300;/OCR1BL = 0XFC; OCR1CH = 0X1A;OCR1CL

6、 = 0X01;void PWM_T1_0XFF(void) /兩路PWM波 TCCR1A =(1<<COM1A1)|(1<<COM1B1)|(1<<COM1C1)|(1<<WGM10);TCCR1B = (1<<CS11);/|(1<<WGM13);/8分頻,相位修正OCR1A = 200;OCR1B = 22; OCR1C = 100;void PWM_T3_0XFF(void) /兩路PWM波 TCCR3A =(1<<COM3A1)|(1<<COM3B1)|(1<<COM3C1)|

7、(1<<WGM30);TCCR3B = (1<<CS31);/|(1<<WGM13);/8分頻,相位修正OCR3A = 200;OCR3B = 22; OCR3C = 100;void InPut_Init(void) DDRD &= (1<<4); PORTD |= (1<<4); SREG = 0X80; TCNT1 = 0; TCCR1B = (1<<ICNC1)|(1<<CS11);/(1<<ICES1)|下降沿觸發(fā)/ICES1輸入捕捉觸發(fā)沿選擇位,CS11 8分頻 TIMSK =

8、(1<<TICIE1);/對16位的存放器寫值void Write_r16Register(unsigned int k) TCNT1H = (unsigned char)(k>>8); TCNT1L = (unsigned char)k;/對16位的存放器讀值unsigned int Read_r16Register(void) unsigned int k; k = TCNT1L; k += (unsigned int)(TCNT1H<<8); return k;/CTC模式,外部計數(shù)void CTC_Init_T1(void) DDRD &=

9、(1<<6); PORTD |= (1<<6); TCCR1A = 0X00; TCCR1B = (1<<WGM12)|(1<<CS12)|(1<<CS11);/|(1<<CS10);/下降沿驅(qū)動|(1<<CS10); TCNT1H = 0; TCNT1L = 0; OCR1AH = 0XFF; OCR1AL = 0XFF; /0X0005; / TIMSK = (1<<OCIE1A); /SREG = 0X80;/CTC模式,T2,外部計數(shù)void CTC_Init_T2(void) DDRD &

10、amp;= (1<<7); PORTD |= (1<<7); TCCR2 = (1 << WGM21)|(1 << CS22)|(1 << CS21); TCNT2 = 0X00; 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<<CS32)

11、|(1<<CS30);/0x02;/8分頻,8MHz晶振,1us cs101 1024分頻 ETIMSK = (1<<TOIE3); SREG=0x80; /定時器0,溢出中斷,初始化void T0_Over_Init(void) TCNT0 = 0x0F; TCCR0 = 0X07; TIMSK = (1 << TOIE0); SREG=0x80;/使用外部中斷,下降沿觸發(fā),中斷0,1void External_Interrupt_Init(void) DDRD &= (1<<0); PORTD |= (1<<0);DDRD

12、 &= (1<<1); PORTD |= (1<<1); EICRA = (1<<ISC11)|(1<<ISC01); EIMSK = (1<<INT1)|(1<<INT0); SREG=0x80;/計算電機編碼器的值,通過定時器0,讀取T1做時鐘,TCNT1的值void main(void) init_devices(); /External_Interrupt_Init(); T0_Over_Init(); /T3_Over_init(); /CTC_Init_T1(); /CTC_Init_T2(); PWM

13、_T1_0XFF(); PWM_T3_0XFF(); /uart0_init(); while(1) /uart0_init(); /PORTA = PORTA0X01; / DelayMs(5); /外部中斷函數(shù)0#pragma interrupt_handler INT0_Interrupt:02void INT0_Interrupt(void) Count1+; PORTA = PORTA0X01;#pragma interrupt_handler INT1_Interrupt:03void INT1_Interrupt(void) Count2+; PORTA = PORTA0X01;

14、/T0溢出中斷函數(shù)#pragma #pragma interrupt_handler T0_Over_Interrupt:17void T0_Over_Interrupt(void) TCNT0 = 0x0F; count+; if(count=60) count = 0; PORTA = PORTA0X01; / USART0_Transmit(TCNT1H); / USART0_Transmit(TCNT1L); / TCNT1H = 0; / TCNT1L = 0;/T3溢出中斷函數(shù)#pragma interrupt_handler T3_Over_Interrupt:30void T3

15、_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 = PORTA0X01; /CTC#pragma interrupt_handler T1:13void T1(void) USART0_Transmit(TCNT1L); PORTA = 0X0F; /PORTA0X01;/捕捉中斷,向量編號12#pragma interrupt_handler input1:12void

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論