۲۱-آبان-۱۳۹۷, ۲۰:۱۴:۴۷
صفحهها: 1 2
۲۲-آبان-۱۳۹۷, ۱۸:۴۶:۳۰
(۲۱-آبان-۱۳۹۷, ۲۰:۱۴:۴۷)hadikh73 نوشته است: [ -> ]سلام
من قبلا با کدویزارد واچ داگ رو فعال کرده بودم و مشکلی نداشتم
شما دقیقا چه مشکلی دارید و ازکجا مطمئن هستیدکه کار نمیکنه؟
سلام
در یک برنامه نسبتا بزرگتر نیاز به فعال سازی واچ داگ دارم .چون با کدویژن کار می کنم می خواستم با آن واچ داگ رو فعال کنم .اما هر گار می کنم فعال نمیشه با ویزارد و حتی فیوز بیت فعال نشد در همه موارد از نرم افزار پروگرام میکروی ، خزاما استفاده می کنم .الان آن قسمت که مربوط به واچ داگ است می گذارم .
#include <mega8.h>
#include <stdlib.h>
#include <delay.h>
#include <stdio.h>
#define led1 PORTB.3 // 1 ON
#define led2 PORTB.2 // 1 ON
#define led3 PORTB.1 // 1 ON
unsigned int msec,mc;
unsigned int sec1;
unsigned int min1;
void time()
{
sec1++;
if(sec1 > 59)
{
mc++;
min1++;
sec1=0;
}
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xC2;
msec++;
if(msec>999)
{
msec=0;
time();
}
}
void wdt_reset() //-------------WDT REset
{
#asm("wdr")
}
void wdt_off() //--------------WDT Off
{
#asm("wdr")
WDTCR|=(1<<WDCE) | (1<<WDE);
WDTCR=0x07;
}
void wdt_on() //---------------WDT ON
{
WDTCR =0x0f;
}
void flasher(int x,int y,int led_t)
{
int g;
for(g=0;g<x;g++)
{
switch(led_t)
{
case 1:
led1 = 1;
break;
case 2:
led2 = 1;
break;
case 3:
led3 = 1;
break;
}
delay_ms(y);
switch(led_t)
{
case 1:
led1 = 0;
break;
case 2:
led2 = 0;
break;
case 3:
led3 = 0;
break;
}
delay_ms(y);
}
}
void main(void)
{
// Declare your local variables here
PORTB=0x00;
DDRB=0x0E;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x03;
TCNT0=0xC2;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x01;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
#pragma optsize-
WDTCR=0x1F;
WDTCR=0x0F;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Global enable interrupts
#asm("sei")
flasher(2,100,1);
flasher(2,100,2);
flasher(2,100,3);
while (1)
{
wdt_on();
msec=0;
while(mc < 3000)
{
flasher(2,100,1);
delay_ms(200);
}
delay_ms(1000);
wdt_off();
}
}
۲۲-آبان-۱۳۹۷, ۱۸:۴۷:۴۴
این برنامه با ویزارد واچ داگ رو فعال می کنه .اشکال اینه که واچ داگ اصلن کار نمی کنه یعنی ری ست میکرو رو فعال نمی کنه.
۲۲-آبان-۱۳۹۷, ۱۸:۵۰:۱۳
اینم همان برنامه با روش فعال سازی نرم افزاری
#include <mega8.h>
#include <stdlib.h>
#include <delay.h>
#include <stdio.h>
#define led1 PORTB.3 // 1 ON
#define led2 PORTB.2 // 1 ON
#define led3 PORTB.1 // 1 ON
unsigned int msec,mc;
unsigned int sec1;
unsigned int min1;
void time()
{
sec1++;
if(sec1 > 59)
{
min1++;
sec1=0;
}
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xC2;
msec++;
mc++;
if(msec>999)
{
msec=0;
time();
}
}
void wdt_on(void)
{
WDTCR = 0x1f;
WDTCR =0x0f;
}
void wdt_off(void)
{
#asm ("wdr")
WDTCR = 0x1f;
WDTCR = 0x00;
}
void flasher(int x,int y,int led_t)
{
int g;
for(g=0;g<x;g++)
{
switch(led_t)
{
case 1:
led1 = 1;
break;
case 2:
led2 = 1;
break;
case 3:
led3 = 1;
break;
}
delay_ms(y);
switch(led_t)
{
case 1:
led1 = 0;
break;
case 2:
led2 = 0;
break;
case 3:
led3 = 0;
break;
}
delay_ms(y);
}
}
void main(void)
{
// Declare your local variables here
PORTB=0x00;
DDRB=0x0E;
TCCR0=0x03;
TCNT0=0xC2;
TIMSK=0x01;
//SREG |= 0b10000000;
#asm("sei")
#asm("wdr")
flasher(2,100,1);
flasher(2,100,2);
flasher(2,100,3);
while (1)
{
#asm("wdr")
wdt_on();
mc=0;
while(mc <3000)
{
flasher(2,100,1);
}
// WDTCR=0x1F;
// WDTCR=0x00;
delay_ms(2000);
}
}
۲۳-آبان-۱۳۹۷, ۲۰:۲۵:۱۳
سلام همان برنامه با Bascom که بخوبی کار میکنه :
$regfile = "m8def.dat"
$crystal = 4000000
'Config Watchdog = 2048
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Led1 Alias Portb.1
Led2 Alias Portb.2
Led3 Alias Portb.3
Enable Interrupts
Dim B As Byte
Led1 = 1
Waitus 1
Led1 = 0
Waitus 1
Led2 = 1
Waitus 1
Led2 = 0
Waitus 1
Led3 = 1
Waitus 1
Led3 = 0
Waitus 1
Set Led1
Set Led2
Set Led3
Waitus 1
Reset Led1
Reset Led2
Reset Led3
Waitus 1
'Config Watchdog = 2048
Wdtcr = &H1F
Wdtcr = &H07
Do
Wdtcr = &H0F
For B = 0 To 1
Led1 = 1
Waitus 1
Led1 = 0
Waitus 1
Next B
Wdtcr = &H1F
Wdtcr = &H07
Loop
$crystal = 4000000
'Config Watchdog = 2048
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Led1 Alias Portb.1
Led2 Alias Portb.2
Led3 Alias Portb.3
Enable Interrupts
Dim B As Byte
Led1 = 1
Waitus 1
Led1 = 0
Waitus 1
Led2 = 1
Waitus 1
Led2 = 0
Waitus 1
Led3 = 1
Waitus 1
Led3 = 0
Waitus 1
Set Led1
Set Led2
Set Led3
Waitus 1
Reset Led1
Reset Led2
Reset Led3
Waitus 1
'Config Watchdog = 2048
Wdtcr = &H1F
Wdtcr = &H07
Do
Wdtcr = &H0F
For B = 0 To 1
Led1 = 1
Waitus 1
Led1 = 0
Waitus 1
Next B
Wdtcr = &H1F
Wdtcr = &H07
Loop
۲۴-آبان-۱۳۹۷, ۱۳:۰۰:۰۱
سلام به همه
تصور میکنم علتشو پیدا کردم .همین برنامه c رو در MikroC_pro For avr نوشتم کار کرد گمان میکنم چون میکرو ویژن کرک شده هست دستورات مربوط به واچ داگ رو کمپایل نمی کنه!
تصور میکنم علتشو پیدا کردم .همین برنامه c رو در MikroC_pro For avr نوشتم کار کرد گمان میکنم چون میکرو ویژن کرک شده هست دستورات مربوط به واچ داگ رو کمپایل نمی کنه!

صفحهها: 1 2