ايران ويج

نسخه‌ی کامل: مشکل برنامه خیلی ساده AVR
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
[attachment=6533][attachment=6533]سلام خدمت دوستان
این یه برنامه خیلی ساده اس که دو هفته منو علاف کرده خواهشن دوستان کمک کنید و مشکل این برنامه رو بگید:

پنج تا سیگنال ورودی داریم به اسمهای :
Ud: در اول کار میاد یعنی حدود یک ثانیه یک میشه بعد صفر
FLA: یا fault lamp وقتی دستگاه ارور میده این سیگنال فعال میشه
PLA: یا pass lamp حالت عادی بدون اشکال این سیگنال فعال میشه
FS: یا fault sensor سنسوری که بعد از ارور دستگاه باید فعال بشه
PS: یا pass sensor سنسوری که بعد از حالت بدون اشکال باید فعال بشه
یکی هم سیگنال خروجی PB.0 تحریک بوق

0-اول برنامه
1-بعد از اینکه UD از حالت یک به صفر تغیر حالت داد برنامه شروع میشه
2-تست میکنه ببینه FLA یک میشه یا PLA
3-اگر PLA یک باشه منتظر میشه که کدوم یک از سنسورهای FS یا PS فعای میشن
31-اگر PS فعال شد میره به اول برنامه
32-اگر FS فعال شد بوق رو فعال میکنه تا PS فعال بشه بعد بوق رو قطع میکنه و میره اول برنامه
4-اگر FLA یک باشه 20میلی ثانیه بوق رو فعال میکنه
41-سپس منتظر میشه که کدو یک از سنسورهای FS یا PS فعال میشن
42-اگر FS فعال شد میره به اول برنامه
43-اگر PS فعال شد بوق رو فعال میکنه تا FS فعال بشه بعد بوق رو قطع میکنه و
میره اول برنامه

اینم از برنامه:

$regfile = "m8def.dat"
$crystal = 8000000

Config Portc = Input
Config Portb = Output 'horn trigger

Dim Ud As Byte 'ud = up/down
Dim Pla As Byte 'pla = pass lamp
Dim Fla As Byte 'fla = fault lamp
Dim Ps As Byte 'ps = pass sensor
Dim Fs As Byte 'fs = fault sensor


Startline:

Do
Ud = Pinc.5
Loop Until Ud = 0

Do
Ud = Pinc.5
Loop Until Ud = 1

Waitms 100
Pla = Pinc.3
Fla = Pinc.4
If Fla = 1 Then Goto Flastart
If Pla = 1 Then Goto Plastart

Plastart:
Do
Fs = Pinc.1
Ps = Pinc.2
If Fs = 1 Then Goto Errorlinep
If Ps = 1 Then Goto Startline
Loop



Flastart:
Portb.1 = 1
Waitms 20
Portb.1 = 0
Do
Ps = Pinc.2
Fs = Pinc.1
If Ps = 1 Then Goto Errorlinef
If Fs = 1 Then Goto Startline
Loop



Errorlinep:
Portb.1 = 1
Do
Ps = Pinc.2
Loop Until Ps = 0
Portb.1 = 0
Goto Startline



Errorlinef:
Portb.1 = 1
Do
Fs = Pinc.1
Loop Until Fs = 0
Portb.1 = 0
Goto Startline

End

برنامه به این سادگی دو هفته منو سر کار گذاشته






سلام دوست من
$crystal = 8000000

Config Portc = Input
Config Portb = Output 'horn trigger
up alias pinc.5
pla alias pinc.4
fla alias pinc.3
ps alias pinc.2
fs alias pinc.1
busser alias portb.1
Startline:
do
if up=1 then gosub flapla
waitms 10
loop

flapla:
bitwait up,reset
do
If Fla = 1 Then Gosub Flastart
waitms 10
If Pla = 1 Then Gosub Plastart
waitms 10
if up=1 then exit do
waitms 10
loop
return

Plastart:
Do
If Fs = 1 Then Gosub Errorlinep
waitms 10
If Ps = 1 Then Gosub Startline
waitms 10
if up=1 then exit do
waitms 10
Loop
return

Flastart:
set busser
waitms 200
reset busser
Do
If Ps = 1 Then Gosub Errorlinef
waitms 10
If Fs = 1 Then Gosub Startline
waitms 10
if up=1 then exit do
waitms 10
Loop
return


Errorlinep:
set busser
bitwait ps,reset
reset busser

Errorlinef:
set busser
bitwait fs,reset
reset busser
Goto Startline

اینو امتحان کن اما قبلش توضیح بده که از برنامت چی میخوای و اون چی کار میکنه اینجوری بهتر میتونم کمکت کنم