|
马老师,在AVR单片机嵌入式系统原理与应用实践中,P318中设定ADCSRA=0XAD;是不能启动AD自动转换的;该为ADCSRA=0XED;可以,但只进行一次,以后再也不进入ADC中断,该变PA7输入电压扔显示上一个值,不会该变,请问是什么原因?(用Stido仿真,其它设定和书中一样)
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.6 Standard
Automatic Program Generator
?Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:office@hpinfotech.com
Project :
Version :
Date : 2008-5-9
Author : F4CG
Company : F4CG
Comments:
Chip type : ATmega16
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
flash unsigned char led_7[10]={0x3F,0x06,0x5B,0X4F,0X66,0x6D,0x7D,0x07,0X7F,0X6F};
flash unsigned char position[6]={0xfe,0xfd,0xfb,0xf7};
unsigned char dis_buff[4]={0,0,0,0};
unsigned char posit;
bit time_2ms_ok;
unsigned int txdata,result;
unsigned char txdata_bl,txdata_bh;
void adc_to_disbuffer(unsigned int adc)
{
unsigned char i,j;
j=adc;
for(i=0;i<=3;i++)
{
dis_buff=adc%10;
j=dis_buff;
adc/=10;
j=adc;
}
}
// Timer 0 output compare interrupt service routine
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
// Place your code here
time_2ms_ok=1;
//ADCSRA|=0XFD;
//putchar(txdata);
//putchar(txdata_bl);
//putchar(txdata_bh);
//putchar(result);
}
// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data,adc_v;
adc_data=ADCW;
txdata_bl=ADCL;
txdata_bh=ADCH;
txdata=ADCW;
adc_v=((long int)adc_data*5000/1024;
result=adc_v;
adc_to_disbuffer(adc_v);
}
void display(void)
{
PORTA|=0X0F;
PORTC=led_7[dis_buff[posit]];
if(posit==1)
PORTC|=0X80;
PORTA&=position[posit];
if(++posit>=4)posit=0;
}
// Declare your global variables here
void main(void)
{
PORTA=0x0f;
DDRA=0x0f;
PORTC=0x00;
DDRC=0xff;
TCCR0=0x0b;
TCNT0=0x00;
OCR0=0xfc;
TIMSK=0x02;
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;
ADMUX=0x47;
SFIOR&=0x1F;
SFIOR|=0x60;
ADCSRA=0xED;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
if(time_2ms_ok)
{
display();
time_2ms_ok=0;
}
};
}
ISIS仿真图:1
ISIS仿真图.bmpourdev_293113.jpg(文件大小:2.93M,只有300K以内的图片才能直接显示) (原文件名:ISIS仿真图.bmp.jpg) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|