سلام، با سپاس فراوان از آقای رضا آقازاده و راهنمایی های بسیار مفید ایشان مشکلم برطرف شد،
نکته کلیدی چک کردن دیتا ارسالی بود که متوجه شدم کاملا" خطا دار است چون مشکل نه از کدهای ارسالیم بود و نه از روش ارسال- اشتباه از من بود که در برنامه نویسی MicroCode Studio دستور ارسال String را با یک دستور دیگه به اشتباه جایگزین کرده بودم.
به هر حال جواب درست را گرفتم...
باز هم از راهنمایی های دوست عزیزمان آقای رضا آقازاده قدر دانی میکنم.
کد نهایی برنامه هم این شد:
کد:
' Strobe : PORTD.1
o_char var byte
i var byte
TRISB = 0
TRISD = 0
top:
PORTB = $ff
PORTD = $ff
o_char="N"
gosub out_char
gosub ret
for i=0 to 16
LOOKUP i,["A99,15,0,1,1,1,N,"],o_char
gosub out_char
next i
o_char=34
gosub out_char
for i=0 to 14
LOOKUP i,["==is is font ++"],o_char
gosub out_char
next i
o_char=34
gosub out_char
gosub ret
o_char="P"
gosub out_char
o_char="1"
gosub out_char
gosub ret
pause 2000
goto top
ret: ' print a return and line feed
o_char=13
gosub out_char
o_char=10
gosub out_char
return
out_char: ' print charcter in o_char
PORTD=$3 'strobe high
PORTB = o_char
pauseus 10
PORTD=$01
pauseus 10
PORTD=$03
return
البته بنظر میاد این کد هم مورد داشته باشه. مثلا پایه های BUSY و PE رو چک نمیکنین. ضمنا جذای از اینها بهتره پایه ACK رو روی یک وقفه بذارین و با استفاده از یک بافر داخلی اطلاعات رو برای ارسال بافر کنین که اینطوری وقت میکرو برای کارهای دیگه حروم نمیشه.
برای اطلاعات بیشتر میتونین کتاب آقای مزیدی جلد دوم (سخت افزار) قسمت مربوط به پرینتر ها رو ببینین.
یا یک سری به سایت beyondlogic بزنین.
موفق باشین.
در مورد فیدبک ACK حتما" این کار انجام میشه، این برنامه فقط برای خروجی گرفتن و تست هست.
و همچنین Busy, PE, Fault هم حتما" در برنامه فینال مورد استفاده قرار خواهند گرفت وگرنه ضعفی برای دستگاه بشمار می آید.
پینهای Init, Auto line feed, Select printer هم در این نوع پرینتر وجود ندارد.
با تشکر فراوان
دیدگاه