commit avent dodo

This commit is contained in:
adri
2018-06-10 03:43:12 +02:00
parent d4d4c3a6a3
commit d0e6eb4795
29 changed files with 5081 additions and 74 deletions

View File

@@ -0,0 +1,113 @@
;------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------
.equ OW_PORT = PORTD
.equ OW_PIN = PIND
.equ OW_DDR = DDRD
.equ OW_DQ = PD6
.def OWCount = r17
;------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------
.cseg
;------------------------------------------------------------------------------
; Output : T - presence bit
;------------------------------------------------------------------------------
OWReset:
cbi OW_PORT,OW_DQ
sbi OW_DDR,OW_DQ
ldi XH, HIGH(DVUS(470))
ldi XL, LOW(DVUS(470))
rcall Wait4xCycles
cbi OW_DDR,OW_DQ
ldi XH, HIGH(DVUS(70))
ldi XL, LOW(DVUS(70))
rcall Wait4xCycles
set
sbis OW_PIN,OW_DQ
clt
ldi XH, HIGH(DVUS(240))
ldi XL, LOW(DVUS(240))
rcall Wait4xCycles
ret
;------------------------------------------------------------------------------
; Input : C - bit to write
;------------------------------------------------------------------------------
OWWriteBit:
brcc OWWriteZero
ldi XH, HIGH(DVUS(1))
ldi XL, LOW(DVUS(1))
rjmp OWWriteOne
OWWriteZero:
ldi XH, HIGH(DVUS(120))
ldi XL, LOW(DVUS(120))
OWWriteOne:
sbi OW_DDR, OW_DQ
rcall Wait4xCycles
cbi OW_DDR, OW_DQ
ldi XH, HIGH(DVUS(60))
ldi XL, LOW(DVUS(60))
rcall Wait4xCycles
ret
;------------------------------------------------------------------------------
; Input : r16 - byte to write
;------------------------------------------------------------------------------
OWWriteByte:
push OWCount
ldi OWCount,0
OWWriteLoop:
ror r16
rcall OWWriteBit
inc OWCount
cpi OWCount,8
brne OWWriteLoop
pop OWCount
ret
;------------------------------------------------------------------------------
; Output : C - bit from slave
;------------------------------------------------------------------------------
OWReadBit:
ldi XH, HIGH(DVUS(1))
ldi XL, LOW(DVUS(1))
sbi OW_DDR, OW_DQ
rcall Wait4xCycles
cbi OW_DDR, OW_DQ
ldi XH, HIGH(DVUS(5))
ldi XL, LOW(DVUS(5))
rcall Wait4xCycles
clt
sbic OW_PIN,OW_DQ
set
ldi XH, HIGH(DVUS(50))
ldi XL, LOW(DVUS(50))
rcall Wait4xCycles
sec
brts OWReadBitEnd
clc
OWReadBitEnd:
ret
;------------------------------------------------------------------------------
; Output : r16 - byte from slave
;------------------------------------------------------------------------------
OWReadByte:
push OWCount
ldi OWCount,0
OWReadLoop:
rcall OWReadBit
ror r16
inc OWCount
cpi OWCount,8
brne OWReadLoop
pop OWCount
ret
;------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------

View File

@@ -0,0 +1,2 @@
@ECHO OFF
"C:\Program Files (x86)\Atmel\AVR Tools\AvrAssembler2\avrasm2.exe" -S "F:\WORK\uK\AVR\Projects\ibutton-number-read\labels.tmp" -fI -W+ie -o "F:\WORK\uK\AVR\Projects\ibutton-number-read\ibutton-number-read.hex" -d "F:\WORK\uK\AVR\Projects\ibutton-number-read\ibutton-number-read.obj" -e "F:\WORK\uK\AVR\Projects\ibutton-number-read\ibutton-number-read.eep" -m "F:\WORK\uK\AVR\Projects\ibutton-number-read\ibutton-number-read.map" "F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm"

View File

@@ -0,0 +1,67 @@
;------------------------------------------------------------------------------
; CRC8 computing functions
; based on Application Note 27 from Dallas Semiconductor
; http://avr-mcu.dxp.pl
; e-mail: radek@dxp.pl
; (c) Radoslaw Kwiecien
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
; Data segment
;------------------------------------------------------------------------------
.dseg
_crc : .byte 1
;------------------------------------------------------------------------------
; Code segment
;------------------------------------------------------------------------------
.cseg
;------------------------------------------------------------------------------
; Update crc value
;------------------------------------------------------------------------------
CRC8Update:
push r16
push r17
push r18
push r16
ldi r17, 8
CRC8L:
lds r18, _crc
eor r16, r18
ror r16
lds r16, _crc
brcc CRC8zero
ldi r18, 0x18
eor r16, r18
CRC8zero:
ror r16
sts _crc, r16
pop r16
lsr r16
push r16
dec r17
brne CRC8L
pop r16
pop r18
pop r17
pop r16
ret
;------------------------------------------------------------------------------
; Clear crc value
;------------------------------------------------------------------------------
CRC8Init:
push r16
ldi r16,0
sts _crc, r16
pop r16
ret
;------------------------------------------------------------------------------
; Copy crc value to r16
;------------------------------------------------------------------------------
GetCRC8:
lds r16, _crc
ret
;------------------------------------------------------------------------------
; End of crc8.asm file
;------------------------------------------------------------------------------

View File

@@ -0,0 +1,29 @@
.cseg
;***** Subroutine Register Variables
.def drem8u =r15 ;remainder
.def dres8u =r16 ;result
.def dd8u =r16 ;dividend
.def dv8u =r17 ;divisor
.def dcnt8u =r18 ;loop counter
;***** Code
div8u:
sub drem8u,drem8u ; clear remainder and carry
ldi dcnt8u,9 ; init loop counter
d8u_1:
rol dd8u ; shift left dividend
dec dcnt8u ; decrement counter
brne d8u_2 ; if done
ret ; return
d8u_2:
rol drem8u ; shift dividend into remainder
sub drem8u,dv8u ; remainder = remainder - divisor
brcc d8u_3 ; if result negative
add drem8u,dv8u ; restore remainder
clc ; clear carry to be shifted into result
rjmp d8u_1 ; else
d8u_3:
sec ; set carry to be shifted into result
rjmp d8u_1

View File

@@ -0,0 +1,216 @@
;------------------------------------------------------------------------------
; HD44780 LCD Assembly driver
; http://avr-mcu.dxp.pl
; e-mail : radek@dxp.pl
; (c) Radoslaw Kwiecien
;------------------------------------------------------------------------------
.include "tn2313def.inc"
.include "hd44780.inc"
.equ LCD_PORT = PORTB
.equ LCD_DDR = DDRB
.equ LCD_PIN = PINB
.equ LCD_D4 = 0
.equ LCD_D5 = 1
.equ LCD_D6 = 2
.equ LCD_D7 = 3
.equ LCD_RS = 4
.equ LCD_EN = 6
;------------------------------------------------------------------------------
; Data segment
;------------------------------------------------------------------------------
.dseg
;------------------------------------------------------------------------------
; Code segment
;------------------------------------------------------------------------------
.cseg
#include "div8u.asm"
;------------------------------------------------------------------------------
; Write half byte to LCD
;------------------------------------------------------------------------------
LCD_WriteNibble:
sbi LCD_PORT, LCD_EN
sbrs r16, 0
cbi LCD_PORT, LCD_D4
sbrc r16, 0
sbi LCD_PORT, LCD_D4
sbrs r16, 1
cbi LCD_PORT, LCD_D5
sbrc r16, 1
sbi LCD_PORT, LCD_D5
sbrs r16, 2
cbi LCD_PORT, LCD_D6
sbrc r16, 2
sbi LCD_PORT, LCD_D6
sbrs r16, 3
cbi LCD_PORT, LCD_D7
sbrc r16, 3
sbi LCD_PORT, LCD_D7
cbi LCD_PORT, LCD_EN
ret
;------------------------------------------------------------------------------
; Write data byte to LCD
;------------------------------------------------------------------------------
LCD_WriteData:
sbi LCD_PORT, LCD_RS
push r16
swap r16
rcall LCD_WriteNibble
pop r16
rcall LCD_WriteNibble
clr XH
ldi XL,250
rcall Wait4xCycles
ret
;------------------------------------------------------------------------------
; Write command byte to LCD
;------------------------------------------------------------------------------
LCD_WriteCommand:
cbi LCD_PORT, LCD_RS
push r16
swap r16
rcall LCD_WriteNibble
pop r16
rcall LCD_WriteNibble
ldi r16,2
rcall WaitMiliseconds
ret
;------------------------------------------------------------------------------
; Write string (from program memory)
;------------------------------------------------------------------------------
LCD_WriteString:
lpm r16, Z+
cpi r16, 0
breq exit
rcall LCD_WriteData
rjmp LCD_WriteString
exit:
ret
;------------------------------------------------------------------------------
; Display one digit in HEX code
;------------------------------------------------------------------------------
LCD_WriteHexDigit:
cpi r16,10
brlo Num
ldi r17,'7'
add r16,r17
rcall LCD_WriteData
ret
Num:
ldi r17,'0'
add r16,r17
rcall LCD_WriteData
ret
;------------------------------------------------------------------------------
; Display 8-byte hex value of r16
;------------------------------------------------------------------------------
LCD_WriteHex8:
push r17
push r16
swap r16
andi r16,0x0F
rcall LCD_WriteHexDigit
pop r16
andi r16,0x0F
rcall LCD_WriteHexDigit
pop r17
ret
;------------------------------------------------------------------------------
; Display decimal value of r16
;------------------------------------------------------------------------------
LCD_WriteDecimal:
clr r14
LCD_WriteDecimalLoop:
ldi r17,10
rcall div8u
inc r14
push r15
cpi r16,0
brne LCD_WriteDecimalLoop
LCD_WriteDecimalLoop2:
ldi r17,'0'
pop r16
add r16,r17
rcall LCD_WriteData
dec r14
brne LCD_WriteDecimalLoop2
ret
;------------------------------------------------------------------------------
; Set address in Display Data RAM
;------------------------------------------------------------------------------
LCD_SetAddressDD:
ori r16, HD44780_DDRAM_SET
rcall LCD_WriteCommand
ret
;------------------------------------------------------------------------------
; Set address in Character Generator RAM
;------------------------------------------------------------------------------
LCD_SetAddressCG:
ori r16, HD44780_CGRAM_SET
rcall LCD_WriteCommand
ret
;------------------------------------------------------------------------------
; Initialization of LCD
;------------------------------------------------------------------------------
LCD_Init:
sbi LCD_DDR, LCD_D4
sbi LCD_DDR, LCD_D5
sbi LCD_DDR, LCD_D6
sbi LCD_DDR, LCD_D7
sbi LCD_DDR, LCD_RS
sbi LCD_DDR, LCD_EN
cbi LCD_PORT, LCD_RS
cbi LCD_PORT, LCD_EN
ldi r16, 100
rcall WaitMiliseconds
ldi r17, 3
InitLoop:
ldi r16, 0x03
rcall LCD_WriteNibble
ldi r16, 5
rcall WaitMiliseconds
dec r17
brne InitLoop
ldi r16, 0x02
rcall LCD_WriteNibble
ldi r16, 1
rcall WaitMiliseconds
ldi r16, HD44780_FUNCTION_SET | HD44780_FONT5x7 | HD44780_TWO_LINE | HD44780_4_BIT
rcall LCD_WriteCommand
ldi r16, HD44780_DISPLAY_ONOFF | HD44780_DISPLAY_OFF
rcall LCD_WriteCommand
ldi r16, HD44780_CLEAR
rcall LCD_WriteCommand
ldi r16, HD44780_ENTRY_MODE |HD44780_EM_SHIFT_CURSOR | HD44780_EM_INCREMENT
rcall LCD_WriteCommand
ldi r16, HD44780_DISPLAY_ONOFF | HD44780_DISPLAY_ON | HD44780_CURSOR_OFF | HD44780_CURSOR_NOBLINK
rcall LCD_WriteCommand
ret
;------------------------------------------------------------------------------
; End of file
;------------------------------------------------------------------------------

View File

@@ -0,0 +1,38 @@
#define HD44780_CLEAR 0x01
#define HD44780_HOME 0x02
#define HD44780_ENTRY_MODE 0x04
#define HD44780_EM_SHIFT_CURSOR 0
#define HD44780_EM_SHIFT_DISPLAY 1
#define HD44780_EM_DECREMENT 0
#define HD44780_EM_INCREMENT 2
#define HD44780_DISPLAY_ONOFF 0x08
#define HD44780_DISPLAY_OFF 0
#define HD44780_DISPLAY_ON 4
#define HD44780_CURSOR_OFF 0
#define HD44780_CURSOR_ON 2
#define HD44780_CURSOR_NOBLINK 0
#define HD44780_CURSOR_BLINK 1
#define HD44780_DISPLAY_CURSOR_SHIFT 0x10
#define HD44780_SHIFT_CURSOR 0
#define HD44780_SHIFT_DISPLAY 8
#define HD44780_SHIFT_LEFT 0
#define HD44780_SHIFT_RIGHT 4
#define HD44780_FUNCTION_SET 0x20
#define HD44780_FONT5x7 0
#define HD44780_FONT5x10 4
#define HD44780_ONE_LINE 0
#define HD44780_TWO_LINE 8
#define HD44780_4_BIT 0
#define HD44780_8_BIT 16
#define HD44780_CGRAM_SET 0x40
#define HD44780_DDRAM_SET 0x80
#define HD44780_LINE0 0x00
#define HD44780_LINE1 0x40

View File

@@ -0,0 +1 @@
<AVRStudio><MANAGEMENT><ProjectName>ibutton-number-read</ProjectName><Created>04-Dec-2011 17:57:47</Created><LastEdit>06-Dec-2011 17:56:07</LastEdit><ICON>208</ICON><ProjectType>0</ProjectType><Created>04-Dec-2011 17:57:47</Created><Version>4</Version><Build>4, 15, 0, 623</Build><ProjectTypeName>Atmel AVR Assembler</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>ibutton-number-read.obj</ObjectFile><EntryFile>F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm</EntryFile><SaveFolder>F:\WORK\uK\AVR\Projects\ibutton-number-read\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATtiny2313.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AvrAssembler><Folder>F:\WORK\uK\AVR\Projects\ibutton-number-read\</Folder><RelPath>main.asm</RelPath><EntryFile>F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm</EntryFile><IncludePath>C:\Program Files (x86)\Atmel\AVR Tools\AvrAssembler\Appnotes</IncludePath><V2IncludePath></V2IncludePath><V2Parameters></V2Parameters><FileType>I</FileType><ObjectName>ibutton-number-read</ObjectName><Wrap>0</Wrap><ErrorAsWarning>0</ErrorAsWarning><MapFile>1</MapFile><ListFile>0</ListFile><Version1>0</Version1><PreCompile></PreCompile><PostCompile></PostCompile><SourceFiles>,</SourceFiles></AvrAssembler><ProjectIncludeDirs><Dirs><Dir>C:\Program Files (x86)\Atmel\AVR Tools\AvrAssembler2\Appnotes</Dir></Dirs></ProjectIncludeDirs><ProjectFiles><Files><Name>\main.asm</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.asm</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>hd44780.inc</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>crc8.asm</FileName><Status>1</Status></File00002></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>

View File

@@ -0,0 +1 @@
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATTINY2313"/><Files><File00000 Name="F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm" Position="-31738 -31948 -30432 -31215" LineCol="144 20" State="Maximized"/><File00001 Name="F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.inc" Position="-31646 -31837 -30568 -31351" LineCol="37 8" State="Maximized"/><File00002 Name="F:\WORK\uK\AVR\Projects\ibutton-number-read\crc8.asm" Position="-31580 -31771 -30502 -31285" LineCol="39 9" State="Maximized"/></Files></AVRWorkspace>

View File

@@ -0,0 +1,43 @@
:020000020000FC
:1000000017C118951895189518951895189518955D
:100010001895189518951895189518951895189578
:10002000189518951895FF1829E0001F2A9509F4CE
:100030000895FF1CF11A18F4F10E8894F6CF089475
:10004000F4CFC69A00FFC09800FDC09A01FFC19886
:1000500001FDC19A02FFC29802FDC29A03FFC39834
:1000600003FDC39AC6980895C49A0F930295E9DFD9
:100070000F91E7DFBB27AAEF58D00895C4980F93DC
:100080000295DFDF0F91DDDF02E052D00895059188
:10009000003011F0E9DFFBCF08950A3020F017E3BC
:1000A000010FE2DF089510E3010FDEDF08951F93D3
:1000B0000F9302950F70F1DF0F910F70EEDF1F911C
:1000C0000895EE241AE0AFDFE394FF920030D1F7F9
:1000D00010E30F91010FC8DFEA94D1F7089500688B
:1000E000CDDF08950064CADF0895B89AB99ABA9A24
:1000F000BB9ABC9ABE9AC498C69804E619D013E07D
:1001000003E09FDF05E014D01A95D1F702E099DFF4
:1001100001E00ED008E2B2DF08E0B0DF01E0AEDFC0
:1001200006E0ACDF0CE0AADF08951197F1F708951F
:100130000F93B3E0A8EEF9DFB3E0A8EEF6DF0A957F
:10014000C1F70F91089596988E9AB3E0ACEAEDDF6F
:100150008E98B0E0ACE8E9DF6894869BE894B1E063
:10016000A0EEE3DF089518F4B0E0A2E002C0B0E032
:10017000A0EF8E9ADADF8E98B0E0A8E7D6DF089578
:100180001F9310E00795EFDF13951830D9F71F91F3
:100190000895B0E0A2E08E9AC8DF8E98B0E0AAE0A1
:1001A000C4DFE89486996894B0E0A4E6BEDF0894C2
:1001B0000EF0889408951F9310E0EBDF07951395D8
:1001C0001830D9F71F9108950F931F932F930F9312
:1001D00018E020916800022707950091680010F44C
:1001E00028E102270795009368000F9106950F9369
:1001F0001A9579F70F912F911F910F9108950F93F1
:1002000000E0009368000F91089500916800089540
:1002100069427574746F6E20526561646572000086
:100220006176722D6D63752E6478702E706C00008F
:100230000FED0DBF5ADF01E052DFE0E1F2E027DF12
:1002400001E44DDFE0E2F2E022DF7DDFF6F303E3DD
:1002500097DFD5DFB0DF0030C1F3B6DFC0E6D0E016
:10026000099317E0A8DFB0DF09931A95D9F7CDDF1E
:10027000003059F700E433DFC0E6D0E018E0099120
:0802800016DF1A95E1F7E1CF4A
:00000001FF

View File

@@ -0,0 +1,522 @@
AVRASM ver. 2.1.30 F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm Tue Dec 06 21:13:19 2011
EQU SIGNATURE_000 0000001e
EQU SIGNATURE_001 00000091
EQU SIGNATURE_002 0000000a
EQU SREG 0000003f
EQU SPL 0000003d
EQU OCR0B 0000003c
EQU GIMSK 0000003b
EQU EIFR 0000003a
EQU TIMSK 00000039
EQU TIFR 00000038
EQU SPMCSR 00000037
EQU OCR0A 00000036
EQU MCUCR 00000035
EQU MCUSR 00000034
EQU TCCR0B 00000033
EQU TCNT0 00000032
EQU OSCCAL 00000031
EQU TCCR0A 00000030
EQU TCCR1A 0000002f
EQU TCCR1B 0000002e
EQU TCNT1L 0000002c
EQU TCNT1H 0000002d
EQU OCR1AL 0000002a
EQU OCR1AH 0000002b
EQU OCR1BL 00000028
EQU OCR1BH 00000029
EQU CLKPR 00000026
EQU ICR1L 00000024
EQU ICR1H 00000025
EQU GTCCR 00000023
EQU TCCR1C 00000022
EQU WDTCR 00000021
EQU PCMSK 00000020
EQU EEAR 0000001e
EQU EEDR 0000001d
EQU EECR 0000001c
EQU PORTA 0000001b
EQU DDRA 0000001a
EQU PINA 00000019
EQU PORTB 00000018
EQU DDRB 00000017
EQU PINB 00000016
EQU GPIOR2 00000015
EQU GPIOR1 00000014
EQU GPIOR0 00000013
EQU PORTD 00000012
EQU DDRD 00000011
EQU PIND 00000010
EQU USIDR 0000000f
EQU USISR 0000000e
EQU USICR 0000000d
EQU UDR 0000000c
EQU UCSRA 0000000b
EQU UCSRB 0000000a
EQU UBRRL 00000009
EQU ACSR 00000008
EQU UCSRC 00000003
EQU UBRRH 00000002
EQU DIDR 00000001
EQU PORTB0 00000000
EQU PB0 00000000
EQU PORTB1 00000001
EQU PB1 00000001
EQU PORTB2 00000002
EQU PB2 00000002
EQU PORTB3 00000003
EQU PB3 00000003
EQU PORTB4 00000004
EQU PB4 00000004
EQU PORTB5 00000005
EQU PB5 00000005
EQU PORTB6 00000006
EQU PB6 00000006
EQU PORTB7 00000007
EQU PB7 00000007
EQU DDB0 00000000
EQU DDB1 00000001
EQU DDB2 00000002
EQU DDB3 00000003
EQU DDB4 00000004
EQU DDB5 00000005
EQU DDB6 00000006
EQU DDB7 00000007
EQU PINB0 00000000
EQU PINB1 00000001
EQU PINB2 00000002
EQU PINB3 00000003
EQU PINB4 00000004
EQU PINB5 00000005
EQU PINB6 00000006
EQU PINB7 00000007
EQU OCIE0A 00000000
EQU TOIE0 00000001
EQU OCIE0B 00000002
EQU OCF0A 00000000
EQU TOV0 00000001
EQU OCF0B 00000002
EQU OCR0_0 00000000
EQU OCR0_1 00000001
EQU OCR0_2 00000002
EQU OCR0_3 00000003
EQU OCR0_4 00000004
EQU OCR0_5 00000005
EQU OCR0_6 00000006
EQU OCR0_7 00000007
EQU WGM00 00000000
EQU WGM01 00000001
EQU COM0B0 00000004
EQU COM0B1 00000005
EQU COM0A0 00000006
EQU COM0A1 00000007
EQU TCNT0_0 00000000
EQU TCNT0_1 00000001
EQU TCNT0_2 00000002
EQU TCNT0_3 00000003
EQU TCNT0_4 00000004
EQU TCNT0_5 00000005
EQU TCNT0_6 00000006
EQU TCNT0_7 00000007
EQU TCCR0 00000033
EQU CS00 00000000
EQU CS01 00000001
EQU CS02 00000002
EQU WGM02 00000003
EQU FOC0B 00000006
EQU FOC0A 00000007
EQU ICIE1 00000003
EQU TICIE 00000003
EQU OCIE1B 00000005
EQU OCIE1A 00000006
EQU TOIE1 00000007
EQU ICF1 00000003
EQU OCF1B 00000005
EQU OCF1A 00000006
EQU TOV1 00000007
EQU WGM10 00000000
EQU PWM10 00000000
EQU WGM11 00000001
EQU PWM11 00000001
EQU COM1B0 00000004
EQU COM1B1 00000005
EQU COM1A0 00000006
EQU COM1A1 00000007
EQU CS10 00000000
EQU CS11 00000001
EQU CS12 00000002
EQU WGM12 00000003
EQU CTC1 00000003
EQU WGM13 00000004
EQU ICES1 00000006
EQU ICNC1 00000007
EQU FOC1B 00000006
EQU FOC1A 00000007
EQU OCR1AH0 00000000
EQU OCR1AH1 00000001
EQU OCR1AH2 00000002
EQU OCR1AH3 00000003
EQU OCR1AH4 00000004
EQU OCR1AH5 00000005
EQU OCR1AH6 00000006
EQU OCR1AH7 00000007
EQU OCR1AL0 00000000
EQU OCR1AL1 00000001
EQU OCR1AL2 00000002
EQU OCR1AL3 00000003
EQU OCR1AL4 00000004
EQU OCR1AL5 00000005
EQU OCR1AL6 00000006
EQU OCR1AL7 00000007
EQU WDTCSR 00000021
EQU WDP0 00000000
EQU WDP1 00000001
EQU WDP2 00000002
EQU WDE 00000003
EQU WDCE 00000004
EQU WDTOE 00000004
EQU WDP3 00000005
EQU WDIE 00000006
EQU WDIF 00000007
EQU PCIE 00000005
EQU INT0 00000006
EQU INT1 00000007
EQU GIFR 0000003a
EQU PCIF 00000005
EQU INTF0 00000006
EQU INTF1 00000007
EQU UDR0 00000000
EQU UDR1 00000001
EQU UDR2 00000002
EQU UDR3 00000003
EQU UDR4 00000004
EQU UDR5 00000005
EQU UDR6 00000006
EQU UDR7 00000007
EQU USR 0000000b
EQU MPCM 00000000
EQU U2X 00000001
EQU UPE 00000002
EQU PE 00000002
EQU DOR 00000003
EQU FE 00000004
EQU UDRE 00000005
EQU TXC 00000006
EQU RXC 00000007
EQU UCR 0000000a
EQU TXB8 00000000
EQU RXB8 00000001
EQU UCSZ2 00000002
EQU CHR9 00000002
EQU TXEN 00000003
EQU RXEN 00000004
EQU UDRIE 00000005
EQU TXCIE 00000006
EQU RXCIE 00000007
EQU UCPOL 00000000
EQU UCSZ0 00000001
EQU UCSZ1 00000002
EQU USBS 00000003
EQU UPM0 00000004
EQU UPM1 00000005
EQU UMSEL 00000006
EQU UBRR 00000009
EQU ACIS0 00000000
EQU ACIS1 00000001
EQU ACIC 00000002
EQU ACIE 00000003
EQU ACI 00000004
EQU ACO 00000005
EQU ACBG 00000006
EQU ACD 00000007
EQU AIN0D 00000000
EQU AIN1D 00000001
EQU PORTD0 00000000
EQU PD0 00000000
EQU PORTD1 00000001
EQU PD1 00000001
EQU PORTD2 00000002
EQU PD2 00000002
EQU PORTD3 00000003
EQU PD3 00000003
EQU PORTD4 00000004
EQU PD4 00000004
EQU PORTD5 00000005
EQU PD5 00000005
EQU PORTD6 00000006
EQU PD6 00000006
EQU DDD0 00000000
EQU DDD1 00000001
EQU DDD2 00000002
EQU DDD3 00000003
EQU DDD4 00000004
EQU DDD5 00000005
EQU DDD6 00000006
EQU PIND0 00000000
EQU PIND1 00000001
EQU PIND2 00000002
EQU PIND3 00000003
EQU PIND4 00000004
EQU PIND5 00000005
EQU PIND6 00000006
EQU EEARL 0000001e
EQU EEAR0 00000000
EQU EEAR1 00000001
EQU EEAR2 00000002
EQU EEAR3 00000003
EQU EEAR4 00000004
EQU EEAR5 00000005
EQU EEAR6 00000006
EQU EEDR0 00000000
EQU EEDR1 00000001
EQU EEDR2 00000002
EQU EEDR3 00000003
EQU EEDR4 00000004
EQU EEDR5 00000005
EQU EEDR6 00000006
EQU EEDR7 00000007
EQU EERE 00000000
EQU EEPE 00000001
EQU EEWE 00000001
EQU EEMPE 00000002
EQU EEMWE 00000002
EQU EERIE 00000003
EQU EEPM0 00000004
EQU EEPM1 00000005
EQU PORTA0 00000000
EQU PA0 00000000
EQU PORTA1 00000001
EQU PA1 00000001
EQU PORTA2 00000002
EQU PA2 00000002
EQU DDA0 00000000
EQU DDA1 00000001
EQU DDA2 00000002
EQU PINA0 00000000
EQU PINA1 00000001
EQU PINA2 00000002
EQU SREG_C 00000000
EQU SREG_Z 00000001
EQU SREG_N 00000002
EQU SREG_V 00000003
EQU SREG_S 00000004
EQU SREG_H 00000005
EQU SREG_T 00000006
EQU SREG_I 00000007
EQU SPMEN 00000000
EQU PGERS 00000001
EQU PGWRT 00000002
EQU RFLB 00000003
EQU CTPB 00000004
EQU ISC00 00000000
EQU ISC01 00000001
EQU ISC10 00000002
EQU ISC11 00000003
EQU SM0 00000004
EQU SM 00000004
EQU SE 00000005
EQU SM1 00000006
EQU PUD 00000007
EQU CLKPS0 00000000
EQU CLKPS1 00000001
EQU CLKPS2 00000002
EQU CLKPS3 00000003
EQU CLKPCE 00000007
EQU PORF 00000000
EQU EXTRF 00000001
EQU BORF 00000002
EQU WDRF 00000003
EQU CAL0 00000000
EQU CAL1 00000001
EQU CAL2 00000002
EQU CAL3 00000003
EQU CAL4 00000004
EQU CAL5 00000005
EQU CAL6 00000006
EQU SFIOR 00000023
EQU PSR10 00000000
EQU PCINT0 00000000
EQU PCINT1 00000001
EQU PCINT2 00000002
EQU PCINT3 00000003
EQU PCINT4 00000004
EQU PCINT5 00000005
EQU PCINT6 00000006
EQU PCINT7 00000007
EQU GPIOR20 00000000
EQU GPIOR21 00000001
EQU GPIOR22 00000002
EQU GPIOR23 00000003
EQU GPIOR24 00000004
EQU GPIOR25 00000005
EQU GPIOR26 00000006
EQU GPIOR27 00000007
EQU GPIOR10 00000000
EQU GPIOR11 00000001
EQU GPIOR12 00000002
EQU GPIOR13 00000003
EQU GPIOR14 00000004
EQU GPIOR15 00000005
EQU GPIOR16 00000006
EQU GPIOR17 00000007
EQU GPIOR00 00000000
EQU GPIOR01 00000001
EQU GPIOR02 00000002
EQU GPIOR03 00000003
EQU GPIOR04 00000004
EQU GPIOR05 00000005
EQU GPIOR06 00000006
EQU GPIOR07 00000007
EQU USIDR0 00000000
EQU USIDR1 00000001
EQU USIDR2 00000002
EQU USIDR3 00000003
EQU USIDR4 00000004
EQU USIDR5 00000005
EQU USIDR6 00000006
EQU USIDR7 00000007
EQU USICNT0 00000000
EQU USICNT1 00000001
EQU USICNT2 00000002
EQU USICNT3 00000003
EQU USIDC 00000004
EQU USIPF 00000005
EQU USIOIF 00000006
EQU USISIF 00000007
EQU USITC 00000000
EQU USICLK 00000001
EQU USICS0 00000002
EQU USICS1 00000003
EQU USIWM0 00000004
EQU USIWM1 00000005
EQU USIOIE 00000006
EQU USISIE 00000007
EQU LB1 00000000
EQU LB2 00000001
EQU CKSEL0 00000000
EQU CKSEL1 00000001
EQU CKSEL2 00000002
EQU CKSEL3 00000003
EQU SUT0 00000004
EQU SUT1 00000005
EQU CKOUT 00000006
EQU CKDIV8 00000007
EQU BODLEVEL0 00000000
EQU BODLEVEL1 00000001
EQU BODLEVEL2 00000002
EQU EESAVE 00000003
EQU WDTON 00000004
EQU SPIEN 00000005
EQU DWEN 00000006
EQU RSTDISBL 00000007
EQU SELFPRGEN 00000000
DEF XH r27
DEF XL r26
DEF YH r29
DEF YL r28
DEF ZH r31
DEF ZL r30
EQU FLASHEND 000003ff
EQU IOEND 0000003f
EQU SRAM_START 00000060
EQU SRAM_SIZE 00000080
EQU RAMEND 000000df
EQU XRAMEND 00000000
EQU E2END 0000007f
EQU EEPROMEND 0000007f
EQU EEADRBITS 00000007
EQU NRWW_START_ADDR 00000000
EQU NRWW_STOP_ADDR 000003ff
EQU RWW_START_ADDR 00000000
EQU RWW_STOP_ADDR 00000000
EQU PAGESIZE 00000010
EQU INT0addr 00000001
EQU INT1addr 00000002
EQU ICP1addr 00000003
EQU OC1Aaddr 00000004
EQU OC1addr 00000004
EQU OVF1addr 00000005
EQU OVF0addr 00000006
EQU URXCaddr 00000007
EQU URXC0addr 00000007
EQU UDREaddr 00000008
EQU UDRE0addr 00000008
EQU UTXCaddr 00000009
EQU UTXC0addr 00000009
EQU ACIaddr 0000000a
EQU PCIaddr 0000000b
EQU OC1Baddr 0000000c
EQU OC0Aaddr 0000000d
EQU OC0Baddr 0000000e
EQU USI_STARTaddr 0000000f
EQU USI_OVFaddr 00000010
EQU ERDYaddr 00000011
EQU WDTaddr 00000012
EQU INT_VECTORS_SIZE 00000013
DSEG SerialNumber 00000060
CSEG ProgramEntryPoint 00000118
EQU LCD_PORT 00000018
EQU LCD_DDR 00000017
EQU LCD_PIN 00000016
EQU LCD_D4 00000000
EQU LCD_D5 00000001
EQU LCD_D6 00000002
EQU LCD_D7 00000003
EQU LCD_RS 00000004
EQU LCD_EN 00000006
DEF drem8u r15
DEF dres8u r16
DEF dd8u r16
DEF dv8u r17
DEF dcnt8u r18
CSEG div8u 00000013
CSEG d8u_1 00000015
CSEG d8u_2 00000019
CSEG d8u_3 0000001f
CSEG LCD_WriteNibble 00000021
CSEG LCD_WriteData 00000034
CSEG Wait4xCycles 00000095
CSEG LCD_WriteCommand 0000003e
CSEG WaitMiliseconds 00000098
CSEG LCD_WriteString 00000047
CSEG exit 0000004c
CSEG LCD_WriteHexDigit 0000004d
CSEG Num 00000053
CSEG LCD_WriteHex8 00000057
CSEG LCD_WriteDecimal 00000061
CSEG LCD_WriteDecimalLoop 00000062
CSEG LCD_WriteDecimalLoop2 00000068
CSEG LCD_SetAddressDD 0000006f
CSEG LCD_SetAddressCG 00000072
CSEG LCD_Init 00000075
CSEG InitLoop 00000080
CSEG WaitMsLoop 00000099
EQU OW_PORT 00000012
EQU OW_PIN 00000010
EQU OW_DDR 00000011
EQU OW_DQ 00000006
DEF OWCount r17
CSEG OWReset 000000a3
CSEG OWWriteBit 000000b3
CSEG OWWriteZero 000000b7
CSEG OWWriteOne 000000b9
CSEG OWWriteByte 000000c0
CSEG OWWriteLoop 000000c2
CSEG OWReadBit 000000c9
CSEG OWReadBitEnd 000000da
CSEG OWReadByte 000000db
CSEG OWReadLoop 000000dd
DSEG _crc 00000068
CSEG CRC8Update 000000e4
CSEG CRC8L 000000e9
CSEG CRC8zero 000000f2
CSEG CRC8Init 000000ff
CSEG GetCRC8 00000105
CSEG Text1 00000108
CSEG Text2 00000110
CSEG MainLoop 00000125
CSEG StoreLoop 00000132
CSEG LoadLoop 0000013f

Binary file not shown.

View File

@@ -0,0 +1,75 @@
<ASSEMBLER_INFO>
<VERSION>2.1.30</VERSION>
<DEVICE>ATtiny2313</DEVICE>
<WORKING_DIR>F:\WORK\uK\AVR\Projects\ibutton-number-read</WORKING_DIR>
<INCLUDE_PATH>
<DIR>C:\Program Files (x86)\Atmel\AVR Tools\AvrAssembler2\Appnotes</DIR>
</INCLUDE_PATH>
<SOURCE_FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm</SOURCE_FILE>
<INCLUDED_FILES>
<FILE>C:\Program Files (x86)\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn2313def.inc</FILE>
<FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\vectors.asm</FILE>
<FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE>
<FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.inc</FILE>
<FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\div8u.asm</FILE>
<FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\wait.asm</FILE>
<FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\1-wire.asm</FILE>
<FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\crc8.asm</FILE>
</INCLUDED_FILES>
<OBJECT_FILES>
<FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\ibutton-number-read.obj</FILE>
</OBJECT_FILES>
<HEX_FILES>
<FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\ibutton-number-read.hex</FILE>
</HEX_FILES>
<OUTPUT_FILES>
<FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\ibutton-number-read.map</FILE>
</OUTPUT_FILES>
<LABELS>
<SerialNumber><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm</FILE><LINE>17</LINE></SerialNumber>
<ProgramEntryPoint><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm</FILE><LINE>42</LINE></ProgramEntryPoint>
<div8u><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\div8u.asm</FILE><LINE>12</LINE></div8u>
<d8u_1><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\div8u.asm</FILE><LINE>15</LINE></d8u_1>
<d8u_2><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\div8u.asm</FILE><LINE>20</LINE></d8u_2>
<d8u_3><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\div8u.asm</FILE><LINE>27</LINE></d8u_3>
<LCD_WriteNibble><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>34</LINE></LCD_WriteNibble>
<LCD_WriteData><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>62</LINE></LCD_WriteData>
<Wait4xCycles><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\wait.asm</FILE><LINE>24</LINE></Wait4xCycles>
<LCD_WriteCommand><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>77</LINE></LCD_WriteCommand>
<WaitMiliseconds><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\wait.asm</FILE><LINE>32</LINE></WaitMiliseconds>
<LCD_WriteString><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>90</LINE></LCD_WriteString>
<exit><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>96</LINE></exit>
<LCD_WriteHexDigit><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>101</LINE></LCD_WriteHexDigit>
<Num><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>108</LINE></Num>
<LCD_WriteHex8><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>116</LINE></LCD_WriteHex8>
<LCD_WriteDecimal><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>131</LINE></LCD_WriteDecimal>
<LCD_WriteDecimalLoop><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>133</LINE></LCD_WriteDecimalLoop>
<LCD_WriteDecimalLoop2><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>141</LINE></LCD_WriteDecimalLoop2>
<LCD_SetAddressDD><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>152</LINE></LCD_SetAddressDD>
<LCD_SetAddressCG><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>159</LINE></LCD_SetAddressCG>
<LCD_Init><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>166</LINE></LCD_Init>
<InitLoop><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\hd44780.asm</FILE><LINE>182</LINE></InitLoop>
<WaitMsLoop><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\wait.asm</FILE><LINE>34</LINE></WaitMsLoop>
<OWReset><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\1-wire.asm</FILE><LINE>17</LINE></OWReset>
<OWWriteBit><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\1-wire.asm</FILE><LINE>43</LINE></OWWriteBit>
<OWWriteZero><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\1-wire.asm</FILE><LINE>48</LINE></OWWriteZero>
<OWWriteOne><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\1-wire.asm</FILE><LINE>51</LINE></OWWriteOne>
<OWWriteByte><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\1-wire.asm</FILE><LINE>63</LINE></OWWriteByte>
<OWWriteLoop><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\1-wire.asm</FILE><LINE>66</LINE></OWWriteLoop>
<OWReadBit><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\1-wire.asm</FILE><LINE>77</LINE></OWReadBit>
<OWReadBitEnd><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\1-wire.asm</FILE><LINE>95</LINE></OWReadBitEnd>
<OWReadByte><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\1-wire.asm</FILE><LINE>100</LINE></OWReadByte>
<OWReadLoop><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\1-wire.asm</FILE><LINE>103</LINE></OWReadLoop>
<_crc><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\crc8.asm</FILE><LINE>13</LINE></_crc>
<CRC8Update><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\crc8.asm</FILE><LINE>21</LINE></CRC8Update>
<CRC8L><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\crc8.asm</FILE><LINE>28</LINE></CRC8L>
<CRC8zero><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\crc8.asm</FILE><LINE>37</LINE></CRC8zero>
<CRC8Init><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\crc8.asm</FILE><LINE>53</LINE></CRC8Init>
<GetCRC8><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\crc8.asm</FILE><LINE>62</LINE></GetCRC8>
<Text1><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm</FILE><LINE>34</LINE></Text1>
<Text2><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm</FILE><LINE>36</LINE></Text2>
<MainLoop><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm</FILE><LINE>63</LINE></MainLoop>
<StoreLoop><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm</FILE><LINE>84</LINE></StoreLoop>
<LoadLoop><FILE>F:\WORK\uK\AVR\Projects\ibutton-number-read\main.asm</FILE><LINE>101</LINE></LoadLoop>
</LABELS>
</ASSEMBLER_INFO>

View File

@@ -0,0 +1,107 @@
;------------------------------------------------------------------------------
; iButton serial number reader
; http://avr-mcu.dxp.pl
; e-mail: radek(at)dxp.pl
; (c) Radoslaw Kwiecien
;------------------------------------------------------------------------------
.include "tn2313def.inc"
;------------------------------------------------------------------------------
; Defines
;------------------------------------------------------------------------------
#define F_CPU 8000000
;------------------------------------------------------------------------------
; Data segment, variable definitions
;------------------------------------------------------------------------------
.dseg
SerialNumber: .byte 8
;------------------------------------------------------------------------------
; Code segment
;------------------------------------------------------------------------------
.cseg
;------------------------------------------------------------------------------
; Include required files
;------------------------------------------------------------------------------
#include "vectors.asm"
#include "hd44780.asm"
#include "wait.asm"
#include "1-wire.asm"
#include "crc8.asm"
;------------------------------------------------------------------------------
; Constants definition
;------------------------------------------------------------------------------
Text1 :
.db "iButton Reader",0,0
Text2 :
.db "avr-mcu.dxp.pl",0,0
;------------------------------------------------------------------------------
; Program entry point
;------------------------------------------------------------------------------
ProgramEntryPoint:
ldi r16, LOW(RAMEND) ; Initialize stack pointer
out SPL, r16 ;
rcall LCD_Init ; Initialize LCD
ldi r16, (HD44780_LINE0 + 1) ;
rcall LCD_SetAddressDD ; Set Display Data address to (0,1)
ldi ZL, LOW(Text1 << 1) ; Load string address to Z
ldi ZH, HIGH(Text1<< 1) ;
rcall LCD_WriteString ; Display string
ldi r16, (HD44780_LINE1 + 1) ;
rcall LCD_SetAddressDD ; Set Display Data address to (1,1)
ldi ZL, LOW(Text2 << 1) ;
ldi ZH, HIGH(Text2<< 1) ; Load string address to Z
rcall LCD_WriteString ; Display string
MainLoop:
rcall OWReset ; One wire reset
brts MainLoop ; If device not present go to MainLoop
ldi r16, 0x33 ; Write ReadRom command
rcall OWWriteByte ;
rcall CRC8Init ; Initialize CRC8 value
rcall OWReadByte ; Read first byte (Family ID)
cpi r16,0 ; If first byte equal to zero, go to MainLoop
breq MainLoop ; (short circuit on one wire bus)
rcall CRC8Update ; Update the CRC
ldi YL, LOW(SerialNumber) ;
ldi YH, HIGH(SerialNumber) ; Load to Y address of SerialNumber table
st Y+, r16 ; Store first byte to table, and increment pointer
ldi r17, 7 ; 7 bytes remaining
StoreLoop:
rcall OWReadByte ; read next byte
rcall CRC8Update ; update the CRC
st Y+, r16 ; store next byte to table, and increment pointer
dec r17 ; decrement loop counter
brne StoreLoop ; if greater than zero, jump to StoreLoop
rcall GetCRC8 ; Read computet CRC8
cpi r16,0 ; copmare with zero
brne MainLoop ; if not equal, jump to MainLoop (bad CRC)
; else
ldi r16, (HD44780_LINE1 + 0) ;
rcall LCD_SetAddressDD ; Set DisplayData address to (0,1)
ldi YL, LOW(SerialNumber) ;
ldi YH, HIGH(SerialNumber) ; Load to Y address of SerialNumber table
ldi r17,8 ; 8 digits to display
LoadLoop:
ld r16, Y+ ; load to r16 byte from table
rcall LCD_WriteHex8 ; display it on LCD in HEX
dec r17 ; decrement loop conouter
brne LoadLoop ; if not zero, jump to LoadLoop
rjmp MainLoop ; jump to MainLoop
;------------------------------------------------------------------------------
; End of file
;------------------------------------------------------------------------------

View File

@@ -0,0 +1,39 @@
.cseg
.org 0 ; Reset
rjmp ProgramEntryPoint
.org INT0addr ; External Interrupt Request 0
reti
.org INT1addr ; External Interrupt Request 1
reti
.org ICP1addr ; Timer/Counter1 Capture Event
reti
.org OC1Aaddr ; Timer/Counter1 Compare Match A
reti
.org OVF1addr ; Timer/Counter1 Overflow
reti
.org OVF0addr ; Timer/Counter0 Overflow
reti
.org URXCaddr ; USART, Rx Complete
reti
.org UDREaddr ; USART Data Register Empty
reti
.org UTXCaddr ; USART, Tx Complete
reti
.org ACIaddr ; Analog Comparator
reti
.org PCIaddr ;
reti
.org OC1Baddr ;
reti
.org OC0Aaddr ;
reti
.org OC0Baddr ;
reti
.org USI_STARTaddr ; USI Start Condition
reti
.org USI_OVFaddr ; USI Overflow
reti
.org ERDYaddr ;
reti
.org WDTaddr ; Watchdog Timer Overflow
reti

View File

@@ -0,0 +1,47 @@
;------------------------------------------------------------------------------
; Busy-wait loops utilities module
; For F_CPU >= 4MHz
; http://avr-mcu.dxp.pl
; e-mail : radek@dxp.pl
; (c) Radoslaw Kwiecien
;------------------------------------------------------------------------------
#ifndef F_CPU
#error "F_CPU must be defined!"
#endif
#if F_CPU < 4000000
#warning "F_CPU too low, possible wrong delay"
#endif
#define CYCLES_PER_US (F_CPU/1000000)
#define C4PUS (CYCLES_PER_US/4)
#define DVUS(x) (C4PUS*x)
;------------------------------------------------------------------------------
; Input : XH:XL - number of CPU cycles to wait (divided by four)
;------------------------------------------------------------------------------
Wait4xCycles:
sbiw XH:XL, 1 ; x-- (2 cycles)
brne Wait4xCycles ; jump if not zero (2 cycles)
ret
;------------------------------------------------------------------------------
; Input : r16 - number of miliseconds to wait
;------------------------------------------------------------------------------
WaitMiliseconds:
push r16
WaitMsLoop:
ldi XH,HIGH(DVUS(500))
ldi XL,LOW(DVUS(500))
rcall Wait4xCycles
ldi XH,HIGH(DVUS(500))
ldi XL,LOW(DVUS(500))
rcall Wait4xCycles
dec r16
brne WaitMsLoop
pop r16
ret
;------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------