Symbol not previously defined hatası ?

Başlatan QuantuM, 27 Şubat 2012, 18:41:27

QuantuM

Arkadaşlar merhaba,

Benim 4 tane DS18B20 termometre kullanarak ve ısı değerlerini seri port yardımıyla PC ekranında göstermek istediğim bir program var. Programı yazdım fakat PIC 12F683'de derlediğimde aşağıdaki hataları alıyorum :

Symbol not previously defined (TXIF)
Symbol not previously defined (TXREG)
Symbol not previously defined (SPBRG)
Symbol not previously defined (SPBRG)
Symbol not previously defined (SPBRG)
Symbol not previously defined (TXSTA)
Symbol not previously defined (TXSTA)
Symbol not previously defined (RCSTA)
Symbol not previously defined (RCSTA)
Symbol not previously defined (TRISA)
Symbol not previously defined (TRISA)
Symbol not previously defined (TRISA)

Yazdığım kod ise :
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 27.02.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ __CONFIG _WDT_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _CP_OFF

INCLUDE"P12F683.INC"
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 20h
DEFINE HSER_BAUD 2400
DEFINE HSER_CLROERR 1

PortA=0
TRISA=0

Busy VAR BIT
HAM VAR WORd
HEAT VAR WORD
FLOAT VAR WORD
SIGN_BIT VAR HAM.Bit11
NEG_HEAT CON 1
DEGREE CON 223
SIGN VAR BYTE
TEMP VAR BYTE
COMM_PIN  VAR PORTA.0
COMM_PIN1 VAR PORTA.1
COMM_PIN2 VAR PORTA.2
COMM_PIN3 VAR PORTA.3
CLEAR

START:
GOSUB READSENSOR
GOSUB READSENSOR1
GOSUB READSENSOR2
GOSUB READSENSOR3
GOTO START

READSENSOR:
OWOUT Comm_Pin,1,[$CC,$44]

WAT :
OWIN COMM_PIN,4,[Busy]
IF Busy=0 THEN WAT
OWOUT COMM_PIN,1,[$CC,$BE]
OWIN COMM_PIN,2,[HAM.Lowbyte,ham.highbyte]
GOSUB CALC
RETURN

CALC:
SIGN = "+"
IF SIGN_BIT = NEG_HEAT THEN
SIGN = "-"
TEMP = ($FFFF - HAM + 1)*625
HEAT = DIV32 10
GOTO SUB
ENDIF
TEMP = 625*HAM
HEAT = DIV32 10

SUB:
FLOAT  = (HEAT//1000)/100
HEAT = (HEAT/1000)

HSEROUT[HEAT,10,13]
RETURN

READSENSOR1:
OWOUT Comm_Pin1,1,[$CC,$44]

WAT1 :
OWIN COMM_PIN1,4,[Busy]
IF Busy=0 THEN WAT1
OWOUT COMM_PIN1,1,[$CC,$BE]
OWIN COMM_PIN1,2,[HAM.Lowbyte,ham.highbyte]
GOSUB CALC1
RETURN

CALC1:
SIGN = "+"
IF SIGN_BIT = NEG_HEAT THEN
SIGN = "-"
TEMP = ($FFFF - HAM + 1)*625
HEAT = DIV32 10
GOTO SUB1
ENDIF
TEMP = 625*HAM
HEAT = DIV32 10

SUB1:
FLOAT  = (HEAT//1000)/100
HEAT = (HEAT/1000)

HSEROUT[HEAT,10,13]
RETURN

READSENSOR2:
OWOUT Comm_Pin2,1,[$CC,$44]

WAT2 :
OWIN COMM_PIN2,4,[Busy]
IF Busy=0 THEN WAT2
OWOUT COMM_PIN2,1,[$CC,$BE]
OWIN COMM_PIN2,2,[HAM.Lowbyte,ham.highbyte]
GOSUB CALC2
RETURN

CALC2:
SIGN = "+"
IF SIGN_BIT = NEG_HEAT THEN
SIGN = "-"
TEMP = ($FFFF - HAM + 1)*625
HEAT = DIV32 10
GOTO SUB2
ENDIF
TEMP = 625*HAM
HEAT = DIV32 10

SUB2:
FLOAT  = (HEAT//1000)/100
HEAT = (HEAT/1000)

HSEROUT[HEAT,10,13]
RETURN 

READSENSOR3:
OWOUT Comm_Pin3,1,[$CC,$44]

WAT3 :
OWIN COMM_PIN3,4,[Busy]
IF Busy=0 THEN WAT3
OWOUT COMM_PIN3,1,[$CC,$BE]
OWIN COMM_PIN3,2,[HAM.Lowbyte,ham.highbyte]
GOSUB CALC3
RETURN

CALC3:
SIGN = "+"
IF SIGN_BIT = NEG_HEAT THEN
SIGN = "-"
TEMP = ($FFFF - HAM + 1)*625
HEAT = DIV32 10
GOTO SUB3
ENDIF
TEMP = 625*HAM
HEAT = DIV32 10

SUB3:
FLOAT  = (HEAT//1000)/100
HEAT = (HEAT/1000)

HSEROUT[HEAT,10,13]
RETURN
END

Fakat aynı programı sigorta ayalarını yapıp PIC 18F2520'de derlediğimde sorunsuz bir şekile derliyor, ama ne yazık ki benim bu programı 12F683'de derlemem lazım. Bu konuda acil yardım ederseniz çok sevinirim. Şimdiden teşekkürler. (bu arada MicroCode Studio ve MPASM kullanıyorum.)

aslan_korhan

PIC12F683'de dahili USART olmadığından çalışmaz.
SEROUT komutu ile yazılımsal olarak veri gönder...
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.

QuantuM

Yardımınız için teşekkürler. Programı aşağıdaki şekilde değiştirdim SEROUT komutunu ilk defa kullanıyorum bu yüzden eğer yanlış kullanmışsam uyarırsanız sevinirim.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 27.02.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ __CONFIG _WDT_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _CP_OFF


DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 20h
DEFINE HSER_BAUD 9600
DEFINE HSER_CLROERR 1

PortA=0


Busy VAR BIT
HAM VAR WORd
HEAT VAR WORD
FLOAT VAR WORD
SIGN_BIT VAR HAM.Bit11
NEG_HEAT CON 1
DEGREE CON 223
SIGN VAR BYTE
TEMP VAR BYTE
COMM_PIN  VAR PORTA.0
COMM_PIN1 VAR PORTA.1
COMM_PIN2 VAR PORTA.2
COMM_PIN3 VAR PORTA.3
CLEAR

START:
GOSUB READSENSOR
GOSUB READSENSOR1
GOSUB READSENSOR2
GOSUB READSENSOR3
GOTO START

READSENSOR:
OWOUT Comm_Pin,1,[$CC,$44]

WAT :
OWIN COMM_PIN,4,[Busy]
IF Busy=0 THEN WAT
OWOUT COMM_PIN,1,[$CC,$BE]
OWIN COMM_PIN,2,[HAM.Lowbyte,ham.highbyte]
GOSUB CALC
RETURN

CALC:
SIGN = "+"
IF SIGN_BIT = NEG_HEAT THEN
SIGN = "-"
TEMP = ($FFFF - HAM + 1)*625
HEAT = DIV32 10
GOTO SUB
ENDIF
TEMP = 625*HAM
HEAT = DIV32 10

SUB:
FLOAT  = (HEAT//1000)/100
HEAT = (HEAT/1000)

SEROUT PORTA.0,2,[HEAT]
RETURN

READSENSOR1:
OWOUT Comm_Pin1,1,[$CC,$44]

WAT1 :
OWIN COMM_PIN1,4,[Busy]
IF Busy=0 THEN WAT1
OWOUT COMM_PIN1,1,[$CC,$BE]
OWIN COMM_PIN1,2,[HAM.Lowbyte,ham.highbyte]
GOSUB CALC1
RETURN

CALC1:
SIGN = "+"
IF SIGN_BIT = NEG_HEAT THEN
SIGN = "-"
TEMP = ($FFFF - HAM + 1)*625
HEAT = DIV32 10
GOTO SUB1
ENDIF
TEMP = 625*HAM
HEAT = DIV32 10

SUB1:
FLOAT  = (HEAT//1000)/100
HEAT = (HEAT/1000)

SEROUT PORTA.1,2,[hEAT]
RETURN

READSENSOR2:
OWOUT Comm_Pin2,1,[$CC,$44]

WAT2 :
OWIN COMM_PIN2,4,[Busy]
IF Busy=0 THEN WAT2
OWOUT COMM_PIN2,1,[$CC,$BE]
OWIN COMM_PIN2,2,[HAM.Lowbyte,ham.highbyte]
GOSUB CALC2
RETURN

CALC2:
SIGN = "+"
IF SIGN_BIT = NEG_HEAT THEN
SIGN = "-"
TEMP = ($FFFF - HAM + 1)*625
HEAT = DIV32 10
GOTO SUB2
ENDIF
TEMP = 625*HAM
HEAT = DIV32 10

SUB2:
FLOAT  = (HEAT//1000)/100
HEAT = (HEAT/1000)

SEROUT PORTA.2,2,[HEAT]
RETURN 

READSENSOR3:
OWOUT Comm_Pin3,1,[$CC,$44]

WAT3 :
OWIN COMM_PIN3,4,[Busy]
IF Busy=0 THEN WAT3
OWOUT COMM_PIN3,1,[$CC,$BE]
OWIN COMM_PIN3,2,[HAM.Lowbyte,ham.highbyte]
GOSUB CALC3
RETURN

CALC3:
SIGN = "+"
IF SIGN_BIT = NEG_HEAT THEN
SIGN = "-"
TEMP = ($FFFF - HAM + 1)*625
HEAT = DIV32 10
GOTO SUB3
ENDIF
TEMP = 625*HAM
HEAT = DIV32 10

SUB3:
FLOAT  = (HEAT//1000)/100
HEAT = (HEAT/1000)

SEROUT PORTA.3,2,[HEAT]
RETURN
END

Mesajınızda pic12F683'de USART olmadığını söylemişsiniz, peki Proteus'da simülasyonu yaparken virtual terminali hangi pinlere bağlamam gerekiyor ? Toplamda 6 pin mevcut, 4'üne DS18B20 bağlı geriye kalan ikisine de bağladığımda terminali sonuç alamıyorum. (GP3 ve GP5 pinleri)

aslan_korhan

"DEFINE HSER" kısımlarını kaldır.
Ayrıca programın başına Kristal frekansını belirle.

SEROUT PORTA.0 , 16468 , [HEAT]

16468 haberleşme hızı gibi parametreleri belirler.
İstediğin değerler için Programın Help kısmına bak.

Devreyi Proteus'ta kur ve dene bence ilk önce.
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.