Hi,
woher hast du die DS1631_Generic.bas? Wie auf Seite 66 steht, liegt diese im Basic++-Unterverzeichnis "lib" und sieht dann so aus:
Code:
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'III BASIC++ DEMO ZUM BASIC-COMPUTER UNIT M 1.2/2.0 IIIII
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'--------------------------------------------------------------------
' Beispiel zum BASIC-COMPUTER mit dem Programmer/Application-Board
'--------------------------------------------------------------------
' LIBRARY: COMMON DS1631 CONTROL ROUTINES
'
'---------------------------------------------------------------------
'DS1631RESET(ADDR as byte) RESET
'DS1631CONVERT(ADDR as byte) START CONVERSION
'DS1631GET_STATUS(ADDR as byte) READ STATUS REGISTER,RETURN BYTE
'DS1631SET_STATUS(ADDR as byte,DATA as byte) WRITE STATUS REGISTER
'DS1631GET_TEMP(ADDR as byte) RETURN WORD WITH TEMP
'-------------------------------------------------------------------
'--------------------------
'--- DS1631 COMMANDS ------
'--------------------------
const CONVERT=51h
const STOP_CONVERT=22h
const READ_TEMP=AAh
const CONF=ACh
const RESET=54h
'-----------------------------------------------------
'------------------ DS1631 RESET ------------------
'-----------------------------------------------------
FUNCTION DS1631RESET(ADDR as byte)
IIC.INIT
IIC.START
IIC.SEND ADDR
IIC.SEND RESET
IIC.STOP
IIC.OFF
END FUNCTION
'-----------------------------------------------------
'------------------ DS1631 CONVERT ----------------
'-----------------------------------------------------
FUNCTION DS1631CONVERT(ADDR as byte)
IIC.INIT
IIC.START
IIC.SEND ADDR
IIC.SEND CONVERT
IIC.STOP
IIC.OFF
END FUNCTION
'-----------------------------------------------------
'----------------- GET DS1631 STATUS -----------------
'-----------------------------------------------------
FUNCTION DS1631GET_STATUS(ADDR as byte)
define DATA as byte
IIC.INIT
IIC.START
IIC.SEND ADDR
IIC.SEND CONF
IIC.STOP
IIC.START
IIC.SEND (ADDR+1)
IIC.GET DATA
IIC.STOP
IIC.OFF
RETURN DATA
END FUNCTION
'-------------------------------------------------------
'----------------- SET DS1631 STATUS -----------------
'-------------------------------------------------------
FUNCTION DS1631SET_STATUS(ADDR as byte,DATA as byte)
IIC.INIT
IIC.START
IIC.SEND ADDR
IIC.SEND CONF
IIC.SEND DATA
IIC.STOP
END FUNCTION
'-------------------------------------------------------
'----------------- WAIT DS1631 READY -----------------
'-------------------------------------------------------
FUNCTION DS1631WAIT_READY(ADDR as byte)
#WT
if (DS1631GET_STATUS(ADDR)) and 80h = 0 then goto WT
END FUNCTION
'-----------------------------------------------------
'----------------- GET DS1631 TEMP -----------------
'-----------------------------------------------------
FUNCTION DS1631GET_TEMP(ADDR as byte)
define TEMP as word
define DATA as byte
IIC.INIT
IIC.START
IIC.SEND ADDR
IIC.SEND READ_TEMP
IIC.STOP
IIC.START
IIC.SEND (ADDR+1)
IIC.GET DATA
TEMP=DATA*256
IIC.GET DATA
TEMP=TEMP+DATA
IIC.STOP
IIC.OFF
RETURN TEMP
END FUNCTION
Desweiteren schreibt man "sein" Programm in der "Hauptdatei" und bindet nur die benötigten Treiber (hier für den DS1631) ein.
Dadurch, dass du eine andere Generic.bas verwendest, in der die Variablen doppelt deklariert werden, bekommst du die ersten Fehlermeldungen.
Die restlichen FM erhälst du, weil die im Hauptprog aufgerufenen Funktionen (z.B. DS1631Reset(ADR)) nicht in der importierten Datei enthalten sind.
Weitere Vorgehensweise:
1. Verwende die richtige DS1631_Generic.bas
2. Verwende das Original-Hauptprogramm von Seite 66
3 Bringe dies durch Upload in die C-Control zum Laufen
4. Ändere/Erweitere nach belieben das Hauptprgramm um weitere Funktionen (z.B. 10s Temp anzeigen, 10s Uhrzeit anzeigen)
5. Wenn du dich damit ein wenig vertraut gemacht hast, schreibe das eigentliche Programm...
Lesezeichen