// Copyright 2006 Yamane Akira //ICC-AVR application builder : 2005/08 // Target : M48 // Int RC Osc: 8.0000Mhz // ADC Sample Program 1: Single Conversion mode // Programmed by A. Yamane #include #include void port_init(void) { PORTB = 0xFF; DDRB = 0xFF; PORTC = 0x00; DDRC = 0x00; PORTD = 0xFF; DDRD = 0xFF; } //TIMER0 initialize - prescale:1024 // WGM: Normal // desired value: 20mSec // actual value: 19.968mSec (0.2%) void timer0_init(void) { TCCR0B = 0x00; //stop TCNT0 = 0x64; //set count TCCR0A = 0x00; TCCR0B = 0x05; //start timer } #pragma interrupt_handler timer0_ovf_isr:17 void timer0_ovf_isr(void) { TCNT0 = 0x64; //set count ADCSRA = 0xCF; // PORTB=0x01; } //ADC initialize // Conversion time: 208uS void adc_init(void) { ADCSRA = 0x00; //disable adc ADMUX = 0x60; //select adc input 0 ACSR = 0x80; // Analolg Comp Disabled DIDR0 = 0x01; // PIN0 Digital Input Disable ADCSRB = 0x00; // Auto Triger None } #pragma interrupt_handler adc_isr:22 void adc_isr(void) { unsigned char vh,vl; vl=ADCL; //Read 2 low bits first (important) vh=ADCH; //read 8 high bits PORTB = 0x00; PORTD = ~vh; } //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(); adc_init(); MCUCR = 0x00; EICRA = 0x00; //extended ext ints EIMSK = 0x00; TIMSK0 = 0x01; //timer 0 interrupt sources TIMSK1 = 0x00; //timer 1 interrupt sources TIMSK2 = 0x00; //timer 2 interrupt sources PCMSK0 = 0x00; //pin change mask 0 PCMSK1 = 0x00; //pin change mask 1 PCMSK2 = 0x00; //pin change mask 2 PCICR = 0x00; //pin change enable PRR = 0x00; //power controller SEI(); //re-enable interrupts } // void main(void) { init_devices(); PORTD=0xFF; while(1) ; }