📄 adc.c
字号:
//ICC-AVR application builder : 2005-3-1 22:02:29
// Target : M8
// Crystal: 8.0000Mhz
#include <iom8v.h>
#include <macros.h>
#include <74164.h>
unsigned char display[4]; // 显示缓冲区
unsigned char dis; // 当前显示
unsigned int adc; // 保存AD转换的值
unsigned char time; // AD转换的时间间隔
//TIMER0 initialisation - prescale:256
// WGM: Normal
// desired value: 5mSec
// actual value: 4.992mSec (0.2%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x64; //set count
TCCR0 = 0x04; //start timer
}
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
TCNT0 = 0x64; //reload counter value
// ad
if(++time == 40){
time = 0;
ADCSR = 0xC6; // 开始转换
while(!(ADCSR & 0x10)); // 等待转换完成
adc = ADCL;
adc |= (int)(ADCH << 8); // 注意顺序
ADCSR = 0x10; // 停止
display[0] = adc%10;
adc = adc / 10;
display[1] = adc%10;
adc = adc / 10;
display[2] = adc%10;
adc = adc / 10;
display[3] = adc%10;
}
// end ad
// display
switch(dis){
case 0: write164(display[dis] | 0x70); break;
case 1: write164(display[dis] | 0xB0); break;
case 2: write164(display[dis] | 0xD0); break;
case 3: write164(display[dis] | 0xE0); break;
}
if(++dis > 3) dis = 0;
//end display
}
//ADC initialisation
// Conversion time: 13uS
void adc_init(void)
{
ADCSR = 0x00; //disable adc
ADMUX = 0x00; //select adc input 0
ACSR = 0x80;
ADCSR = 0x83;
}
//call this routine to initialise all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
DDRB = 0x01; // 初始化操作74LS164的管脚
DDRD = 0xC0; // 初始化操作74LS164的管脚
DDRC = 0x00;
timer0_init();
adc_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x01; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialised
}
//
void main(void)
{
init_devices();
//insert your functional code here...
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -