arkadaşlar bu program ultrasonik sensör için kendi robotunu kendin yap kitabından fakat seri port yerine 2*16 lık lcd ye göndemem için kodu yazabilirmisiniz?
include 16f628_4i
include jlib
include jmath
include h_rs232
-- Ultrasonic mesafe algılayıcısı JAL programı
disable_a_d_functions
var volatile byte TMR1L at 0x0E
var volatile byte TMR1H at 0x0F
var volatile byte T1CON at 0x10
var volatile bit PIR1_TMR1IF at PIR1 : 0
var volatile bit T1CON_TMR1ON at T1CON : 0
var volatile bit tx1 is pin_a1
var volatile bit tx1_dir is pin_a1_direction
var volatile bit tx2 is pin_a2
var volatile bit tx2_dir is pin_a2_direction
var volatile bit led is pin_b0
var volatile bit led_dir is pin_b0_direction
var volatile bit echo is pin_b7
var volatile bit echo_dir is pin_b7_direction
var byte r1, r0
led = low
led_dir = output
tx1 = low
tx1_dir = output
tx2 = low
tx2_dir = output
echo_dir = input
t1con = 0b00_00_0000
procedure burst is
var byte x = 4
assembler
local t1
t1:
movlw 0x02
movwf port_a
nop nop nop nop nop nop
nop nop nop nop nop
movlw 0x04
movwf port_a
nop nop nop
nop nop nop nop
decfsz x,f
goto t1
bcf tx1
bcf tx2
end assembler
end procedure
function usr_oku ( byte out cm1, byte out cm0 )return bit is
var byte x1, x0
burst
TMR1L = 0 TMR1H = 0
PIR1_TMR1IF = false
T1CON_TMR1ON = on
while (echo == low) & (PIR1_TMR1IF == false) loop end loop
x0 = TMR1L
x1 = TMR1H
T1CON_TMR1ON = off
divide_16b ( x1, x0, 0, 58,cm1, cm0 )
if PIR1_TMR1IF then cm1 = 0xff cm0 = 0xff end if
return ! PIR1_TMR1IF
end function
serial_setup ( 192 )
forever loop
if usr_oku ( r1, r0 ) then
if r1 == 0 then
if r0 <= 255 then h_asynch = r0 end if
if r0 < 154 then led = high end if
end if
end if
delay_100ms
led = low
end loop
Söz konusu kitabın yazarı yazdığı programlara yorum da eklese güzel olurmuş... Belki de programdan önce gerekli açıklamayı yapmıştır tabi onu bilemem. Bir ihtimal de JAL bilmediğim için anlamamış olabilirim :lol: .
if r0 <= 255 then h_asynch = r0 end if
Gönderme işi bu satırda oluyor gibi. JAL'da LCD'ye yazmak için hazır fonksiyonlar var mı? Eğer varsa bu satırdaki h_asynch (ki sanırım bu h_rs232 içinde tanımlanmış bir ifade) yerine LCD için bir ifade yazarsan, ve tabi program başında da gerekli tanımlamaları yaparsan istediğin olur bence.
serial_setup ( 192 )
Bu 19200 boud rate mi acaba? Eğer seri bağlantının özellikleri bilinirse bu programla oynamadan dışardan başka bir PIC bağlayıp gelen seri veriyi LCD'ye aktaracak şekilde kullanabilirsin. Pek mantıklı bir çözüm değil ama istediğin dili kullanabilmene olanak sağlar. Mesela JAL bilmeyen biri olarak bu uygulamayı yapsaydım bir 16F628A alır ve bu şekilde programlardım (veya komple baştan yazardım programı :)).
Seri olarak gönderilen ultrasonik bilgisini seri o larak alıp 16f877 ye bağlanan bir LCD ekranda gösteren kodlar:
include 16f877_4
include jlib
include hd447804
include h_rs232
var byte veri
serial_setup ( 192 )
hd44780_clear
hd44780 ="S" hd44780 ="o" hd44780 ="n" hd44780 ="a" hd44780 ="r"
delay_1s hd44780_clear
forever loop
hd44780_line1
if h_asynch_poll (veri) then
print_decimal_3 ( hd44780, veri,"0")
else
hd44780 = "-" hd44780 = "-" hd44780 = "-"
end if
hd44780 = " " hd44780 = "c" hd44780 = "m"
delay_200ms
end loop
yani iki pic kullanmam gerekiyor doğru mu?
ikinci picin bağlantıları nasıl olacak anlamadım?portlar tanımlanmamış
Normalde tek pic de kullanabilirsin. mesela sadece 16f877 ile de yapabilirsin. Buradaki seri iletişim kütüphanesi donanımsal seri iletişimi kullanıyor. 16f877 Pic' inin datasheet ine bakarsanız Donnaımsal seri iletişim bacakları TX ve RX yani 25 ve 26. cı bacaklar. "include" denen kütüphane dosylaraının içlerine bakarak bulabilirsin.
ayrıca gönderdiğiniz kodla
böyle bir sonuç çıkıyor proteusta
yoksa simüle edilemez mi bu?yanlış mı yapıyorum
bozuk karakterlerin nedeni ne olabilir?
bide print_decimal_3 ( hd44780, veri,"0")
ne yapar?
teşekkürler
(http://img376.imageshack.us/img376/8776/11249441al8.th.jpg) (http://img376.imageshack.us/my.php?image=11249441al8.jpg)