各位大哥,小弟刚学单片机遇到一个问题,希望大家不吝赐教,先行谢过了。
单片机用的是ATMEGA8L,编译用的是ICCAVR,可是一编译就显示出错
F:AVRICCAVRiccinimakew -f test1.mak
iccavr -c -IF:AVRICCAVRiccinclude -e -l -g -Wa-W F:AVRICCAVR新建文件夹 est1.c
iccavr -o test1 -LF:AVRICCAVRicclib -g -Wl-W -bfunc_lit:0.0x2000 -dram_end:0x25f -bdata:0x60.0x25f -dhwstk_size:16 -fihx_coff -S2 @test1.lk
!E F:AVRICCAVRicclibcrtAVR.o(41): Code address 0 already contains a value
!E F:AVRICCAVRicclibcrtAVR.o(41): Code address 0x1 already contains a value
F:AVRICCAVRiccinimakew.exe: Error code 1
Done: there are error(s). Exit code: 1
其中出错位置在
!E F:AVRICCAVRicclibcrtAVR.o(41): Code address 0 already contains a value
!E F:AVRICCAVRicclibcrtAVR.o(41): Code address 0x1 already contains a value
这里,它说LIB 里面的这个文件CRTAVR里面的第41行的问题,到底是什么意思呢,我应该怎么改我的程序呢,谢谢!
程序如下:
//Target:atmega8
//Crystal:8Mhz
#include <iom8v.h>
#include <macros.h>
/*——————————————————————————————————————————————*/
/*函数名:I/O 口初始化*/
void init_IO(void)
{DDRB=0X08; //PB3输出PWM控制电机转速
DDRD=0XFF;
DDRC=0X30; //PD0-PD3作为输出控制功率管,PC4,PC5作为输入
}
/*——————————————————————————————————————————————*/
/*函数名: 初始化ADC转换*/
void init_adc(void)
{
ADCSRA=(1<<ADEN)|0X82; //使能ADC,用时钟4分频
}
/*——————————————————————————————————————————————*/
/*函数名:初始化定时器T2
功能说明:把T2作为PWM输出,控制电动机下侧功率管的开关,从而控制电动机速度
*/
void time2_init (void)
{
TCCR2=(0<<WGM21)|(1<<WGM20)|(1<<COM21)|(1<<COM20)|(0<<CS22)|(0<<CS21)|(1<<CS20);
//相位修正模式,1分频
}
/*——————————————————————————————————————————————*/
/*函数名:读取ADC单端通道
返回参数:转换结果ADC
*/
unsigned int read_adc() /*用查询方式读取ADC单端通道*/
{
ADMUX=(0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0); //选择外部AVCC做参考电压,左对齐,第0个通道
ADCSRA|=(1<<ADSC); //启动AD转换
while ((ADCSRA&(1<<ADIF))==0); //检测AD转换结束
ADCSRA|=(1<<ADIF); //写1清除标志位
return ADCH;
}
/*——————————————————————————————————————————————*/
//函数名:控制功率管
void control ( )
{
if ((PINC&=0B00100000)==0B00100000)
{
if ((PINC&=0B00010000)==0B00010000)
PORTD|=0B00001001;
else
PORTD|=0B00000110;
}
}
//——————————————————————————————————————————————
void main (void )
{
init_IO();
init_adc();
read_adc();
OCR2=ADCH;
time2_init();
while(1)
{
control();
}
}
此帖出自
小平头技术问答
一周热门 更多>