unsigned char a; unsigned char p; unsigned char m; unsigned char n; void port_init(void) {PORTA = 0x00; DDRA = 0x00; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; DDRC = 0x00; PORTD = 0x00; DDRD = 0x70;
创作时间:贰零贰壹年柒月贰叁拾日
创作时间:贰零贰壹年柒月贰叁拾日
PORTE = 0x00; DDRE = 0x04; }
//TIMER0 initialize - prescale: // WGM: Normal // desired value: 40Hz // actual value: Out of range void timer0_init(void) {
TCCR0 = 0x00; //stop timer
TCNT0 = 0xfa /*INVALID SETTING*/; //set count value TCCR0 = 0x03; //start timer }
#pragma interrupt_handler timer0_ovf_isr:8 void timer0_ovf_isr(void) {
TCNT0 = 0xfa /*INVALID SETTING*/; //reload counter value if(m==a) {PORTD=0x70; TCCR1B=0x03; TCCR0=0x00; n=1;}
创作时间:贰零贰壹年柒月贰叁拾日
创作时间:贰零贰壹年柒月贰叁拾日
else{m++;} }
//TIMER1 initialize - prescale: // WGM: 0) Normal, TOP=0xFFFF // desired value: 40Hz
// actual value: 40.013Hz (0.0%) void timer1_init(void) {
TCCR1B = 0x00; //stop TCNT1H = 0xff; //setup TCNT1L = 0xfa; OCR1AH = 0x06; OCR1AL = 0x1A; OCR1BH = 0x06; OCR1BL = 0x1A; TCCR1A = 0x00; TCCR1B = 0x00; }
#pragma interrupt_handler timer1_ovf_isr:7 void timer1_ovf_isr(void) {
TCNT1H = 0xff; //reload counter high value
创作时间:贰零贰壹年柒月贰叁拾日
创作时间:贰零贰壹年柒月贰叁拾日
TCNT1L = 0xfa; //reload counter low value if(n==250-a) {PORTD=0x20; TCCR0=0x03; TCCR1B=0x00; m=1;
if(p==0){if(a==125){p=1;} else{a++;}}
else{{if(a==1){p=0;} else{a--;}}}} else{n++;} }
//call this routine to initialize all peripherals void init_devices(void) {
//stop errant interrupts until set up CLI(); //disable all interrupts port_init(); timer0_init(); timer1_init(); MCUCR = 0x00; EMCUCR = 0x00;
创作时间:贰零贰壹年柒月贰叁拾日
创作时间:贰零贰壹年柒月贰叁拾日
GICR = 0x00; TIMSK = 0x82;
SEI(); //re-enable interrupts
//all peripherals are now initialized }
void main(void) {a=0; p=0; m=1; n=1;
init_devices(); while(1) {PORTE=0x04;} }
创作时间:贰零贰壹年柒月贰叁拾日 创作时间:贰零贰壹年柒月贰叁拾日