附上我写的测试代码,本来是两个LED不停的闪烁的,但实际是LED闪过之后就灭了
#include <avr/io.h>
#include "perdefine.h"
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/wdt.h>
//#include <avr/signal.h>
#define LED1 PB3
#define LED2 PC0
#define LEDPollOn() PORTC&=(~(1<<LED2))
#define LEDPollOff() PORTC|=(1<<LED2)
#define LEDDataOn() PORTB&=(~(1<<LED1))
#define LEDDataOff() PORTB|=(1<<LED1)
#define POLL_TIME_INTERVAL 200 //Poll interval time
#define WDTEnable() WDTCSR|=(1<<WDE)
#define WDTClear() wdt_reset()
void LedInit(void)
{
uchar i;
DDRB|=(1<<PB3); //1 output
DDRC|=(1<<PC0);
for(i=0;i<2;i++)
{
LEDPollOff();
LEDDataOff();
delayms(200);
LEDPollOn();
LEDDataOn();
delayms(200);
}
LEDPollOff();
LEDDataOff();
delayms(200);
}
void WDTInit(void)
{
WDTClear();
CCP=0xD8; //Write correct signature to CCP
WDTCSR=0x00;
WDTCSR|=(1<<WDP1)|(1<<WDE);
//WDP3:0=0000,16ms 0001 32ms 0010 64ms
// =0011,125ms 0100 250ms 0101 500ms
// =0110,1.0s 0111 2.0s 1000 4.0S
}
int main(void)
{
uchar data[10],rec_buf[36];
uchar i;
uchar num,cmd;
uchar index_rx_rd=0x00;
LedInit();
//DDRC|=(1<<PC1); //text code
//WDTInit();
//sei();
//wdt_enable(0x02); //WDP3:0=0010 64ms
WDTInit();
while (1)
{
WDTClear();
LEDDataOn();
delayms(500);
LEDDataOff();
delayms(500);
}
}
|