سلام خدمت اساتید
دوستان من خیلی قبلا واسه میکروهای ای وی ار برنامه نوشتم هیچ مشکلی نبوده ولی الان یه میکرو هست تمتمام کدها درسته توی شبیه ساز هم درست کار میکنه (طبق کدها) ایرادی هم نمیگیره همه چی درسته ولی روی برد تو مرحله اول یه جورایی گیر میکنه یعنی در ابتدا قراره 3 ثانیه یه ال ای دی چشمک بزنه و بعد روشن ثابت کدها درسته تو شبیه ساز هم درسته ولی وقت تست میکنم عملی تو مرحله اول میمونه یعنی تا ابد هم وایسی همنجوری چشمک میزنه . از واچ داگ استفاده کردم / غیر فعالش کردم / کل پروژه رو به غیر از کد اجرای اولیه ولی بازم مشکل همونه !!!
دو روزه دیگه دارم دیوونه میشم جون من کمک کنین خیلی غیر منطقیه درست هم پروگرام میشه فیوزبیتا هم درسته
این کد :
یه دزدگیر کوچولوئه از یه پین دستور فعال شدن الارم میگیره یه خروجی واسه ال ای دی داره و دو تا دکمه یکی برا ریست یکی هم واسه روشن شدن با تاخیر 3 دقیقه ای . از dalay هم استفاده نکردم .
دوستان من خیلی قبلا واسه میکروهای ای وی ار برنامه نوشتم هیچ مشکلی نبوده ولی الان یه میکرو هست تمتمام کدها درسته توی شبیه ساز هم درست کار میکنه (طبق کدها) ایرادی هم نمیگیره همه چی درسته ولی روی برد تو مرحله اول یه جورایی گیر میکنه یعنی در ابتدا قراره 3 ثانیه یه ال ای دی چشمک بزنه و بعد روشن ثابت کدها درسته تو شبیه ساز هم درسته ولی وقت تست میکنم عملی تو مرحله اول میمونه یعنی تا ابد هم وایسی همنجوری چشمک میزنه . از واچ داگ استفاده کردم / غیر فعالش کردم / کل پروژه رو به غیر از کد اجرای اولیه ولی بازم مشکل همونه !!!
دو روزه دیگه دارم دیوونه میشم جون من کمک کنین خیلی غیر منطقیه درست هم پروگرام میشه فیوزبیتا هم درسته

این کد :
یه دزدگیر کوچولوئه از یه پین دستور فعال شدن الارم میگیره یه خروجی واسه ال ای دی داره و دو تا دکمه یکی برا ریست یکی هم واسه روشن شدن با تاخیر 3 دقیقه ای . از dalay هم استفاده نکردم .
#include <tiny13a.h>
// Varibles
unsigned long int TimerCounter,AfterSecound;
bit FirstRun=0;
bit StateNormal=0;
bit StateAlarm=0;
bit ActiveAfterSecound=0,ASActive=0;
void StartIntilazing();
void NormalStateActive();
//void AfterSecoundActive();
void AlarmStateActive();
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x38;
// Place your code here
//Per 20 Count Time = 1 Secound
TimerCounter++;
AfterSecound++;
if(AfterSecound > 9999999){
AfterSecound=0;
}
if(TimerCounter > 9999999){
TimerCounter=0;
}
}
void main(void){
// Intilasing
StartIntilazing();
//End
while (1)
{
//Go Start
if(PINB.1 == 1){
ActiveAfterSecound=1;
TimerCounter=0;
AfterSecound=0;
StateNormal=0;
StateAlarm=0;
}
//Normal State
if(StateNormal){
NormalStateActive();
}
if(ActiveAfterSecound){
// AfterSecoundActive();
}
//Alarm State
if(StateAlarm){
AlarmStateActive();
}
//Reset Watchdog
#asm("wdr")
}
}
void NormalStateActive(){
//If First Run
if(TimerCounter > 60 && FirstRun==0){
FirstRun=1;
}else if(FirstRun==0){
if(AfterSecound >= 5){
AfterSecound=0;
if(PINB.3==1){
PORTB.3=0;
}else{
PORTB.3=1;
}
}
}else{
//LED On
PORTB.3=1;
if(PINB.4 == 1){
PORTB.3=0;
StateAlarm=1;
TimerCounter=0;
AfterSecound=0;
StateNormal=0;
}
}
}
void AfterSecoundActive(){
//Intilaze
if(ASActive==0){
ASActive=1;
TimerCounter=0;
AfterSecound=0;
}
//Start
if(TimerCounter >= 2400){
//End
StateNormal=1;
ActiveAfterSecound=0;
ASActive=0;
}else{
StateNormal=0;
StateAlarm=0;
ActiveAfterSecound=1;
ASActive=1;
}
//LED On/Off
if(AfterSecound >= 10){
AfterSecound=0;
if(PINB.3==1){
PORTB.3=0;
}else{
PORTB.3=1;
}
}
}
void AlarmStateActive(){
//Play Alarm Signall
if(TimerCounter >= 8){
TimerCounter=0;
if(PINB.2==1){
PORTB.2=0;
PORTB.3=1;
}else{
PORTB.2=1;
PORTB.3=0;
}
}
//End Alarm State
if(AfterSecound >= 3000){
StateAlarm=0;
StateNormal=1;
}
}
void StartIntilazing(){
StateNormal=1;
// Input/Output Ports initialization
// Port B initialization
// Function: Bit5=In Bit4=In Bit3=In Bit2=Out Bit1=Out Bit0=In
DDRB=(0<<DDB5) | (0<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (0<<DDB0);
// State: Bit5=T Bit4=T Bit3=T Bit2=0 Bit1=0 Bit0=T
PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 75.000 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
// Timer Period: 2 ms
TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0x6A;
OCR0A=0x00;
OCR0B=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0);
// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/2k
// Watchdog timeout action: Reset
#pragma optsize-
WDTCR=(0<<WDTIF) | (0<<WDTIE) | (0<<WDP3) | (1<<WDCE) | (1<<WDE) | (0<<WDP2) | (0<<WDP1) | (0<<WDP0);
WDTCR=(0<<WDTIF) | (0<<WDTIE) | (0<<WDP3) | (0<<WDCE) | (1<<WDE) | (0<<WDP2) | (0<<WDP1) | (0<<WDP0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Global enable interrupts
#asm("sei")
}
دیدگاه