电路板已经焊接好了.
就利用现在放假的时间开始调试了.因为我是第一次使用ATMEGA64这片单片机,还有我又是第一次采用JTAG仿真,和下载程序.(是阿莫电子买的COM口AVR JTAG仿真器,谢谢阿莫了)
因为之前还未用过单片机,和仿真器.所以我调试步骤如下,
1)我先写一个简单的程序测试我的仿真器是怎样使用的,单片机的熔丝位需要点样设置,于是写了一个蜂鸣器响三下的小程序如下:
#include<iom64v.h>
#include<macros.h>
#define sbipd7 asm("SBI 0x12,7")
#define cbipd7 asm("CBI 0x12,7")
#define uchar unsigned char
#define uint unsigned int
/*    微秒级延时程序     */
void delay_us(int time)
  {    
     do 
   {time--;}
     while (time>1);
  }  
/*         毫秒级延时程序   */ 
void delay_ms(unsigned int time)
  {
   while(time!=0)
      {  
     delay_us(1000);
     time--;
    }
  }

void beep(void)
{
 sbipd7;
 delay_ms(300);
 cbipd7;
}
void port_init(void)
{
 PORTB = 0x08;
 DDRB  = 0xff;
 PORTC = 0x00; //m103 output only
 DDRC  = 0xfe;
 PORTD = 0x00;
 DDRD  = 0xff;
 PORTA=0X00;
 DDRA=0XFF;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 XDIV  = 0x00; //xtal divider
 XMCRA = 0x00; //external memory
 port_init();
 MCUCR = 0x00;
 EICRA = 0x00; //extended ext ints
 EICRB = 0x00; //extended ext ints
 EIMSK = 0x00;
 TIMSK = 0x00; //timer interrupt sources
 ETIMSK = 0x00; //extended timer interrupt sources
 //SEI(); //re-enable interrupts
 //all peripherals are now initialized
}
 
void main(void)
{
 init_devices();
 beep();
 delay_ms(300);
 beep();
 delay_ms(300);
 beep();
 while(1);
}
我连接上JTAG接口后,给板子通电,先通入AC6V电源,我用万用表看VCC的电压,4V,然后慢慢调高输入电压到9伏,过程序必须看着,VCC 的电压变化,当超过5伏时一定要检查板的线路.检查7805是否正常.
通电后打开AVRSTUDIO4.11
 选择,电波拉皮.COF文件,再选择,JTAG ICE ---ATMEGA64 点FINISH就会自动进入仿真界面,
AVRSTUDIO 带有STK500,ISP下载功能.先点STOP DEBUGING 再点TOOLS--PROGRAM AVR--CONNECT.. 选JTAG ICE ,PORT 为ATUO 再点CONNECT..连接.就会出现ISP的下载框.就可以设置下载文件,EEP下载文件,FUSE,加密位,电压值,内部RC校正字和自动烧录,设置好后点自动烧录的STAR就可以烧录文件了.
AVR JTAG仿真器没什么大问题,就是程序调试出现了子程序不能返回,我使用软件仿真是可以的,但用JTAG仿真或下载都不行,搞了好久,又怀疑是JTAG仿真器的问题,又怀疑是硬件的问题,后来才发现是设置FUSE 的问题.
设置FUSE时 一定要把去除M103兼容模式,选择普通模式,不然在调试会出现子程序无法返回.我也调试了好久才发现这个问题.我是选择外部晶振16MHZ.
设好了FUSE 后就JTAG仿真 或者下载都正常了..............调试液晶电波拉皮_电波
 
调试液晶电波拉皮_电波