Advertisement  

Saturday, 20 July 2019
     
 
Main Menu
Home Home
Shop Shop
News News
BASCOM-AVR BASCOM-AVR
BASCOM-8051 BASCOM-8051
Products Products
Application Notes Application Notes
Publications Publications
Links Links
Support Center Support Center
Downloads Downloads
Forum Forum
Resellers Resellers
Contact Us Contact Us
Updates Updates
MCS Wiki MCS Wiki
Online Help
BASCOM-AVR Help BASCOM-AVR Help
BASCOM-8051 Help BASCOM-8051 Help
Contents in Cart
Show Cart
Your Cart is currently empty.
Search the Shop

Products Search

User Login
Username

Password

If you have problem after log in with disappeared login data, please press F5 in your browser

RSS News
 
     
 

 
   
     
 
AN #23 - Reading and writing the Dallas DS1991 secure I-button Print
Reading and writing the Dallas DS1991 secure I-button

This application note is written by Evert K. Dekker

Download .PDF file for DS1991
Download source code in .BAS file

'Demonstration of reading and writing the Dallas DS1991
'secure I-button. Using the 1-wire statements.
'--------------------------------------------------------------
'
' You must use Bascom-8051 1.09 or higher !!
'
'
' pull-up of 4K7 required to VCC from P3.2
' DS1991 serial button connected to P3.2
'--------------------------------------------------------------
' E.K.Dekker 1999 Lampje@Xs4all.nl
'--------------------------------------------------------------
Config 1wire = P3.2 'use this pin
Dim Ar(16) As Byte , I As Byte , Temp As Byte
Dim Text As String * 16 , Temp2 As String * 1

Main
:
'Reading first the ROM-number
 1wreset 
'reset the device
 1wwrite
&H33 'read ROM command
 Ar
(1) = 1wread(8) 'read 8 bytes
 
Print "ROM number : ";
 
For I = 1 To 8
 Printhex Ar
(i); 'print ROM-number
Next
Wait 1 'wait a moment

'Writing scratchpad
 
'It is possible to write 64 bytes of data to the scratchpad. In this example
 
'i only used 16 bytes.You can write/read the other bytes if you change the
 
'array or start address.
 Text
= "Scratchpad data."
Ar
(1) = &H96 'Write scratch command
Ar
(2) = &HC0 'Start address + C0H
Ar
(3) = &HFF - Ar(2) 'Complement of Ar(2)
 1wreset 
'reset the device
 1wwrite
&HCC 'Skip read ROM command
 1wwrite Ar
(1) , 3 'Write command to DS1991
 
Gosub Fill_write_array 'Fill array with "Text"
 1wwrite Ar
(1) , 16 'Write 16 bytes to DS1991
Wait 1 'wait a moment

'Reading scratchpad back
Ar
(1) = &H69 'Read scratch command
Ar
(2) = &HC0 'Start adress + COH
Ar
(3) = &HFF - Ar(2) 'Complement of Ar(2)
 1wreset 
'reset the device
 1wwrite
&HCC 'Skip read ROM command
 1wwrite Ar
(1) , 3 'Write command to DS1991
 Ar
(1) = 1wread(16) 'Read 16 bytes from DS1991
 
Print "Scratch pad : "; '
 
For I = 1 To 16 'Prints the contents of the
 Temp
= Ar(i) ' scratchpad
 
Print Chr(temp); '
 
Next I '
Wait 1 'wait a moment

'Writing subkeyid and password
 
'Writing new subkeyid and password will destroy all data in subkey.
 
'The DS1991 has 3 Subkeys, 1=00H , 2=40H , 3=80H
 
'The variable "text" must be exactly 16 bytes, the first 8 for Subkey-id and the
 
'last 8 for password. Every subkey has it's own password.
Text
= "Subkyid1PASSWORD" 'New subkey-id and password
Ar
(1) = &H5A 'Change password command
Ar
(2) = &H00 'Subkey-id to change
Ar
(3) = &HFF - Ar(2) 'Complement of Ar(2)
 1wreset 
'reset the device
 1wwrite
&HCC 'Skip read ROM command
 1wwrite Ar
(1) , 3 'Write command to DS1991
 Ar
(1) = 1wread(8) 'Read old-id
 1wwrite Ar
(1) , 8 'Write old-id back to DS1991
 
Gosub Fill_write_array 'Fill array with "Text"
 1wwrite Ar
(1) , 16 'Write New-id and password
Wait 1 'wait a moment

'Writing subkey
 
'It is possible to write 64 bytes of data to the subkey. In this example
 
'i only used 16 bytes.You can write/read the other bytes if you change the
 
'array or start address.
Text
= "Hello world!!!!!" 'New subkey
 Ar
(1) = &H99 'Writing subkey command
 Ar
(2) = &H10 'Subkey(00H) + Start address (10H)
 Ar
(3) = &HFF - Ar(2) 'Complement of Ar(2)
 1wreset 
'reset the device
 1wwrite
&HCC 'Skip read ROM command
 1wwrite Ar
(1) , 3 'Write subkey write command

 Text
= "Subkyid1" 'Must be the same as the first 8
 
Gosub Fill_write_array ' bytes of "writing subkeyid & passw."
 1wwrite Ar
(1) , 8  'Write Subkeyid for conformation

 Text
= "PASSWORD" 'Must be the same as the last 8
 
Gosub Fill_write_array ' bytes of "writing subkeyid & passw."
 1wwrite Ar
(1) , 8 'Write password to DS1991

 Text
= "Hello world !!!!" 'New subkey data
 
Gosub Fill_write_array
 1wwrite Ar
(1) , 16  'Write 16 bytes to DS1991
Wait 1

'Reading subkey
Ar
(1) = &H66 'Read secured subkey command
Ar
(2) = &H10 'Subkey(00H) + Start adress (10H)
Ar
(3) = &HFF - Ar(2) 'Complement of Ar(2)
 1wreset 
'reset the device
 1wwrite
&HCC 'Skip read ROM command
 1wwrite Ar
(1) , 3  'Write subkey read command
 Ar
(1) = 1wread(8) 'DS1991 respons with the Subkey-id
 Text
= "PASSWORD" 'Must be the same as the last 8
 
Gosub Fill_write_array ' bytes of "writing subkeyid & passw."
 1wwrite Ar
(1) , 8 'Write password to DS1991
 Ar
(1) = 1wread(16) 'Reads 16 bytes from DS1991
 
Print "Sub key : "; '
 
For I = 1 To 16 '
 Temp
= Ar(i) 'Prints the contents of the
 
Print Chr(temp); ' subkey.
 
Next I '
Wait 1 'wait a moment

Goto Main  'And do it again

Fill_write_array
:
For I = 1 To 16
Temp2
= Mid(text , I , 1)
Ar
(i) = Asc(temp2)
Next I
Return