pic16f628 HELP!

S

scgoo

Guest
hi, im benytter PIC16f628 for design mitt.programmet vil motta signal i form av tegn som vist i koden nedenfor.PC og PIC vil kommunisere via serieport (RS232).

men når jeg sender en "A" til PIC, det gjorde ikke gå til "TurnLeft" subroutine, men går det til "forvirre".det samme skjer når jeg sender "B", "C", D, E til PIC.det vil gå til "forvirre".men når jeg sender en karakter "W", vil det ta det som "D" og gå til den triste, og sende "Y" det vil ta det som "C", og sende "u" det vil ta det som "E ".

Derfor vil dette skje?
Jeg er forvirrende ...
noen forslag?Pekeren?
takk!'''''''''''' initialisering'''''''''''
suksess = 0: i = 0: bell_on = 0

init:
INTCON =% 11000000
PIE1.5 = 1
PÅ Interrupt GoTo handler
viktigste:
hvis suksess = 1 og deretter
bell_on = 1
bekrefter = 0
i = 200
while (i! = 0)
i = i - 1
pause 5
Wend

if (store = "A") så
gosub TurnLeft
bekrefter = 1
endif

if (store = "B" og bekrefter <> 0) then
gosub TurnRight
bekrefter = 1
endif

if (store = "C" og bekrefter <> 1) then
gosub Happy
bekrefter = 1
endif

if (store = "D" og bekrefter <> 1) then
gosub Sad
bekrefter = 1
Endif

if (store = "E" og bekrefter <> 1) then
gosub Angry
bekrefter = 1
endif

if (bekrefte <> 1) then
gosub forvirre
Endif

bekrefter = 0
suksess = 0
bell_on = 0

endif

goto main

Happy:
LED = 1
PORTA =% 00000111
PAUSE 500
LED = 0
PAUSE 500
return

Trist:
PORTA =% 00000010
LED = 1
PAUSE 500
LED = 0
PAUSE 500
return

Angry:
PORTA =% 00000011
LED = 1
PAUSE 500
LED = 0
PAUSE 500
returnForvirre:
PORTA =% 00000100
LED = 1
PAUSE 500
LED = 0
PAUSE 500
returnTurnLeft:
PORTA =% 00000101
LED = 1
PAUSE 500
LED = 0
PAUSE 500
returnTurnRight:
PORTA =% 00000110
LED = 1
PAUSE 500
LED = 0
PAUSE 500
return''''''''''''''' avbryte'''''''''''
deaktivere

handler:
hserin 10, feil, [store]
suksess = 1FEIL:
CV
aktivere

 
Hei scgoo!

Du har ikke lagt inn hele koden.Sjekk den serielle porten initialization registrerer i bilde og sette aktuelle overføringshastighet på PC også.

Giri

 
Salam Scgoo,

Jeg ville ikke prøve koden men det jeg husker er at IF - THEN statement er ikke skrevet slik: "if (store =" B "og bekrefter <> 0) then"

Du bør skrive det slik: "Hvis (store =" B ") AND (bekrefte <> 0) Then"

Endelig Mitt råd er å prøve å bruke C-språk det ville gjøre det mye lettere for u

Håper det hjelper

Hilsen,

 
takk for turen svar.!

define OSC 20
define HSER_BAUD 9600
DEFINE HSER_CLOERR 1
define HSER_RCSTA 90H
DEFINE HSER_TXSTA 20h

Jeg bruker 9600 overføringshastighet.samme for meg maskinvareenhet

og jeg har endret til

if (store = "B") og (bekrefte <> 1) then
gosub TurnRight
bekrefter = 1
endif

det også cant arbeid.

 
Hei Scgoo,

Jeg er ikke sikker på hva kompilatoren du bruker, men to ting kommer til tankene her.

Quote:

if (store = "A") så
 
Salam Scgoo,

Først u være nødt til å justere din PC terminal til samme alternativene u brukes til koden din (det samme som hva u brukes i definerer - parity, feil, baudrate).

Alle Pins u gjort innspill i koden din må trekkes høyt eller lavt tenkte motstand.

Ikke bruk "==" for betingelser er PICBasic, rettferdig bruk "=".

Endelig har jeg ikke ser noe galt i koden din, er det svært enkelt og rett fram så jeg vil gjerne spørre u om maskinvaren grensesnittet mellom PIC og PC hva slags RS232 transievers har u brukt?

Venter på svar

Hilsen

 

Welcome to EDABoard.com

Sponsor

Back
Top