Datasheet

' Wait for something to come around
While USI_Data_ready <> 1
Wend
If COMMAND = CMD_STATUS Then
' Respond to CMD_STATUS
While USI_DATA_READY <> 1
Wend
USIDR = RESPONSE_STATUS
Reset USI_DATA_READY
ElseIf COMMAND = CMD_SECURITY Then
' Respond to CMD_SECURITY
For I = 0 To 2
' First respond with three dummy bytes as per AT45DB011D specification
While USI_DATA_READY <> 1
Wend
USIDR = &H00
Reset USI_DATA_READY
Next I
For I = 0 To 127
' Then respond with 128-byte security register data
While USI_DATA_READY <> 1
Wend
USIDR = Response(I)
Reset USI_DATA_READY
Next I
End If
' Done communicating, set Hi-Z state on PB1 (MISO) port
Config PortB.1 = Input
Loop
End
' The interrupt routine
USI_OVERFLOW_INT:
Set USI_DATA_READY
COMMAND = USIDR
USISR = &B01_000000
Return
Function Calculate(ByteNo As Byte) As Byte
' Not too elegant --- BASCOM-AVR only accepts one operation per assignment
Local Index As Byte
Index = ByteNo + 64 ' 64-127 for device ID
Index = Response(Index) + ByteNo ' Index in DAVIS_DATA matrix
Index = Index MOD 256 ' Avoid index out of range
Response(ByteNo) = LookUp(Index, DAVIS_DATA)
End Function
' Lookup table as described by WXForum.net user "watson"
DAVIS_DATA:
$DATA
Data &H00, &H04, &H08, &H0C, &H10, &H14, &H18, &H1C, &H21, &H25, &H29, &H2D, &H31, &H35, &H39, &H3D
Data &H46, &H42, &H4E, &H4A, &H56, &H52, &H5E, &H5A, &H67, &H63, &H6F, &H6B, &H77, &H73, &H7F, &H7B
Data &H8C, &H88, &H84, &H80, &H9C, &H98, &H94, &H90, &HAD, &HA9, &HA5, &HA1, &HBD, &HB9, &HB5, &HB1
Data &HCA, &HCE, &HC2, &HC6, &HDA, &HDE, &HD2, &HD6, &HEB, &HEF, &HE3, &HE7, &HFB, &HFF, &HF3, &HF7
Data &H18, &H1C, &H10, &H14, &H08, &H0C, &H00, &H04, &H39, &H3D, &H31, &H35, &H29, &H2D, &H21, &H25
Data &H5E, &H5A, &H56, &H52, &H4E, &H4A, &H46, &H42, &H7F, &H7B, &H77, &H73, &H6F, &H6B, &H67, &H63
Data &H94, &H90, &H9C, &H98, &H84, &H80, &H8C, &H88, &HB5, &HB1, &HBD, &HB9, &HA5, &HA1, &HAD, &HA9
Data &HD2, &HD6, &HDA, &HDE, &HC2, &HC6, &HCA, &HCE, &HF3, &HF7, &HFB, &HFF, &HE3, &HE7, &HEB, &HEF
Data &H31, &H35, &H39, &H3D, &H21, &H25, &H29, &H2D, &H10, &H14, &H18, &H1C, &H00, &H04, &H08, &H0C
Data &H77, &H73, &H7F, &H7B, &H67, &H63, &H6F, &H6B, &H56, &H52, &H5E, &H5A, &H46, &H42, &H4E, &H4A
Data &HBD, &HB9, &HB5, &HB1, &HAD, &HA9, &HA5, &HA1, &H9C, &H98, &H94, &H90, &H8C, &H88, &H84, &H80
Data &HFB, &HFF, &HF3, &HF7, &HEB, &HEF, &HE3, &HE7, &HDA, &HDE, &HD2, &HD6, &HCA, &HCE, &HC2, &HC6
Data &H29, &H2D, &H21, &H25, &H39, &H3D, &H31, &H35, &H08, &H0C, &H00, &H04, &H18, &H1C, &H10, &H14
Data &H6F, &H6B, &H67, &H63, &H7F, &H7B, &H77, &H73, &H4E, &H4A, &H46, &H42, &H5E, &H5A, &H56, &H52
Data &HA5, &HA1, &HAD, &HA9, &HB5, &HB1, &HBD, &HB9, &H84, &H80, &H8C, &H88, &H94, &H90, &H9C, &H98
Data &HE3, &HE7, &HEB, &HEF, &HF3, &HF7, &HFB, &HFF, &HC2, &HC6, &HCA, &HCE, &HD2, &HD6, &HDA, &HDE
Listing 2: Code listing continued from previous page.
http://meteo.annoyingdesigns.com 22