電路板已經焊接好了.
就利用現在放假的時間開始調試了.因爲我是第一次使用ATMEGA64這片單片機,還有我又是第一次採用JTAG仿真,和下載程序.(是阿莫電子買的COM口AVR JTAG仿真器,謝謝阿莫了)
因爲之前還未用過單片機,和仿真器.所以我調試步驟如下,
1)我先寫一個簡單的程序測試我的仿真器是怎樣使用的,單片機的熔絲位需要點樣設置,於是寫了一個蜂鳴器響三下的小程序如下:
#include<iom64v.h>
#include<macros.h>
#define sbipd7 asm("SBI 0x12,7")
#define cbipd7 asm("CBI 0x12,7")
#include<macros.h>
#define sbipd7 asm("SBI 0x12,7")
#define cbipd7 asm("CBI 0x12,7")
#define uchar unsigned char
#define uint unsigned int
#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 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;
}
{
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();
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);
}
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仿真 或者下載都正常了..............