调试液晶电波拉皮
电路板已经焊接好了.
就利用现在放假的时间开始调试了.因为我是第一次使用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仿真 或者下载都正常了..............
![]() 本文出自 51CTO.COM技术博客 |



easylwl
博客统计信息
热门文章
最新评论
友情链接