我用简易的JTAG仿真器,焊接7.3728M的晶振,但是为什么程序在仿真的时候为什么没有ACK响应。希望高手们指点指点。另外还有就是JTAG仿真时,单片机的内部时钟和晶振的频率有什么关系。 程序如下: #include <avr/io.h> #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <avr/eeprom.h> #include <avr/sleep.h> #include <avr/wdt.h> #include <setjmp.h> #include <avr/interrupt.h>
#define nop asm ("nop");
void delay ( void ) { unsigned int i; for ( i=0x0000; i<60000; i++ ) asm ("nop"); }
/* TWI初始化程序 */ void TWI_INIT( void ) { TWCR= 0X00; //disable twi TWBR= 0x20; //set bit rate TWSR= 0x00; //set prescale TWCR= 0x04; //enable twi nop; }
/* TWI开始信号 */ void TWI_START ( void ) { TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); while ( !( TWCR & ( 1<<TWINT ) ) ) nop; }
/* 发送 */ void TWI_SAL_W ( unsigned char address1,unsigned char address2 ,unsigned char write_data) { TWDR = address1; TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT))) nop; nop; TWDR = address2; TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT))); nop;
TWDR = 0x00; TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT))); nop; }
void TWI_STOP ( void ) { TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
}
int main ( void ) { unsigned char i; /* 等待外围器件可靠复位 */ delay(); delay(); DDRB=0xFF; PORTB=0xFF;
TWI_INIT( );
for ( i=0x00; i<0x1; i++ ) { TWI_START ( ); TWI_SAL_W (0xa2,i,i); TWI_STOP ( ); delay(); }
nop;
for ( ; ; );
return 0; }
|