diff --git a/1-wire.asm b/1-wire.asm index 577392d..31a67e9 100644 --- a/1-wire.asm +++ b/1-wire.asm @@ -137,20 +137,16 @@ MainReadTemp: ldi YH,HIGH(TempWord) rcall OWReset ; One wire reset brts MainReadTemp ; If device not present go to MainLoop - rcall OWReset ; One wire reset - brts MainReadTemp ; If device not present go to MainLoop - rcall OWReset ; One wire reset - brts MainReadTemp ; If device not present go to MainLoop ldi r16,SkipRom ; Write Skip Rom one wire in "single-drop" rcall OWWriteByte ; ldi r16, RScratch ; Write ConvertCommand rcall OWWriteByte ; rcall OWReadByte st Y+, r16 ; Store TEMPERATURE LSB(50h) byte to table, and increment pointer - mov r21, r16 + ;rcall LCD_WriteHex8 rcall OWReadByte st Y+, r16 ; Store TEMPERATURE MSB(05h) byte to table, and increment pointer - mov r22, r16 + ;rcall LCD_WriteHex8 ret TempRequest: @@ -169,27 +165,25 @@ ConvertTempForLCD: ;r18 contiendra la partie décimal et xl la partie entiere push r16 push r17 ldi YL,LOW(TempWord) - ldi YH,HIGH(TempWord) + ldi YH,HIGH(TempWord) ld XL, Y+ ld XH, Y+ lsr XL lsr XL ;Sup des deux bit inutilisé - ldi r16, 0x03 - mov r18, XL - AND r18, r16 + mov r16, XL + ldi r18, 0x03 ;Masque des 3 bit de fraction + AND r18, XL ;3bit fraction ldi r16, 25 mul r18, r16 movw r18, r0 lsr XL lsr XL ;Sup des deux bit de fraction - ldi r16, 15 + ldi r16, 0b00001111 and XH,r16 - ROR XH - ROR XH - ROR XH - ROR XH - ROR XH ; xh>>4+1(+1 pour le carry) + SWAP XH or XL,XH + ;mov r16, R18 + ;rcall LCD_WriteHex8 pop r17 pop r16 diff --git a/Debug/ASM18b20AvecLCD.hex b/Debug/ASM18b20AvecLCD.hex index eccdb11..cacbce8 100644 --- a/Debug/ASM18b20AvecLCD.hex +++ b/Debug/ASM18b20AvecLCD.hex @@ -1,5 +1,5 @@ :020000020000FC -:0200000070C1CD +:0200000068C1D5 :0200040018954D :02000800189549 :02000C00189545 @@ -50,30 +50,24 @@ :1001D400A4E0209AC8DF2098B0E0A4E1C4DFE8944A :1001E40018996894B0E0A8ECBEDF08940EF08894E7 :1001F40008951F9310E0EBDF079513951830D9F796 -:100204001F910895C8E0D1E0BCDFE6F3BADFD6F36E -:10021400B8DFC6F30CECD2DF0EEBD0DFEADF0993D4 -:10022400502FE7DF0993602F0895ABDF5EF30CECEA -:10023400C5DF04E4C3DF0CEB99DF18950F931F931C -:10024400C8E0D1E0A991B991A695A69503E02A2F1B -:10025400202309E1209F9001A695A6950FE0B023E5 -:10026400B795B795B795B795B795AB2B1F910F91E8 -:1002740008950F931F932F930F9318E0209110016B -:10028400022707950091100110F428E10227079531 -:10029400009310010F9106950F931A9579F70F911A -:1002A4002F911F910F9108950F9300E00093100177 -:1002B4000F91089500911001089569427574746F47 -:1002C4006E2052656164657200006176722D6D6303 -:1002D400752E6478702E706C00002E0000000FEFF5 -:1002E4000DBF21DF01E019DFEEEBF2E0EEDE01E409 -:1002F40014DF47DFF6F30CEC61DF0EE45FDF002769 -:100304005DDF5CDF0FE35ADF01E407DF3ADFE6F38A -:100314008CDF78DF93DF0C94A4016BDF0030A1F352 -:10032400A8DFC0E0D1E0099317E063DFA2DF0993FF -:100334001A95D9F7BFDF003039F700E4EEDEC0E0EC -:10034400D1E012E00F930A2F0F9330EF032320D054 -:100354000695069506950695BEDE0F9119D02FE0F9 -:100364000223B9DE022F0F9330EF032311D0069539 -:10037400069506950695AFDE0F910AD02FE002236D -:10038400AADE0000000000000C948601D9F6BCCF60 -:1003940055270A5010F0505FFCCF065F050F0895F3 +:100204001F910895C8E0D1E0BCDFE6F30CECD6DF23 +:100214000EEBD4DFEEDF0993ECDF09930895B1DF31 +:100224008EF30CECCBDF04E4C9DF0CEB9FDF1895F5 +:100234000F931F93C8E0D1E0A991B991A695A69513 +:100244000A2F23E02A2309E1209F9001A695A69571 +:100254000FE0B023B295AB2B1F910F9108950F932C +:100264001F932F930F9318E02091100102270795F5 +:100274000091100110F428E1022707950093100162 +:100284000F9106950F931A9579F70F912F911F915E +:100294000F9108950F9300E0009310010F910895BA +:1002A40000911001089574656D7020726561646534 +:1002B40072207E302E32350000006176722D6D631F +:1002C400752E6478702E706C00002E0000000FEF05 +:1002D4000DBF29DF01E021DFEAEAF2E0F6DE01E406 +:1002E4001CDF4FDFF6F30CEC69DF0EE467DF002759 +:1002F40065DF64DF0FE362DF01E40FDF42DFE6F373 +:100304008EDF80DF95DF0000000000000F930A2FCE +:1003140008D0EBDE022F05D0E8DE0C947E01B1F7A5 +:10032400EBCF5F9355270A5010F0505FFCCF065F68 +:06033400050F5F91089522 :00000001FF diff --git a/Debug/ASM18b20AvecLCD.lss b/Debug/ASM18b20AvecLCD.lss index c0a927d..8382490 100644 --- a/Debug/ASM18b20AvecLCD.lss +++ b/Debug/ASM18b20AvecLCD.lss @@ -1,5 +1,5 @@ -AVRASM ver. 2.2.7 C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm Sun Jun 10 03:42:22 2018 +AVRASM ver. 2.2.7 C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm Sun Jun 10 10:18:03 2018 [builtin](2): Including file 'C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.150\avrasm\inc\m328pdef.inc' C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm(34): Including file 'C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\vectors.asm' @@ -1039,7 +1039,7 @@ C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM #include "vectors.asm" .org 0 ; Reset -000000 c170 rjmp ProgramEntryPoint +000000 c168 rjmp ProgramEntryPoint .org INT0addr 000002 9518 reti .org INT1addr @@ -1598,63 +1598,57 @@ C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM 000105 e0d1 ldi YH,HIGH(TempWord) 000106 dfbc rcall OWReset ; One wire reset 000107 f3e6 brts MainReadTemp ; If device not present go to MainLoop -000108 dfba rcall OWReset ; One wire reset -000109 f3d6 brts MainReadTemp ; If device not present go to MainLoop -00010a dfb8 rcall OWReset ; One wire reset -00010b f3c6 brts MainReadTemp ; If device not present go to MainLoop -00010c ec0c ldi r16,SkipRom ; Write Skip Rom one wire in "single-drop" -00010d dfd2 rcall OWWriteByte ; -00010e eb0e ldi r16, RScratch ; Write ConvertCommand -00010f dfd0 rcall OWWriteByte ; -000110 dfea rcall OWReadByte -000111 9309 st Y+, r16 ; Store TEMPERATURE LSB(50h) byte to table, and increment pointer -000112 2f50 mov r21, r16 -000113 dfe7 rcall OWReadByte -000114 9309 st Y+, r16 ; Store TEMPERATURE MSB(05h) byte to table, and increment pointer -000115 2f60 mov r22, r16 -000116 9508 ret +000108 ec0c ldi r16,SkipRom ; Write Skip Rom one wire in "single-drop" +000109 dfd6 rcall OWWriteByte ; +00010a eb0e ldi r16, RScratch ; Write ConvertCommand +00010b dfd4 rcall OWWriteByte ; +00010c dfee rcall OWReadByte +00010d 9309 st Y+, r16 ; Store TEMPERATURE LSB(50h) byte to table, and increment pointer + ;rcall LCD_WriteHex8 +00010e dfec rcall OWReadByte +00010f 9309 st Y+, r16 ; Store TEMPERATURE MSB(05h) byte to table, and increment pointer + ;rcall LCD_WriteHex8 +000110 9508 ret TempRequest: -000117 dfab rcall OWReset ; One wire reset -000118 f35e brts MainReadTemp ; If device not present go to MainLoop +000111 dfb1 rcall OWReset ; One wire reset +000112 f38e brts MainReadTemp ; If device not present go to MainLoop -000119 ec0c ldi r16,SkipRom ; Write Skip Rom one wire in "single-drop" -00011a dfc5 rcall OWWriteByte ; -00011b e404 ldi r16, ConvertTemp ; Write ConvertCommand -00011c dfc3 rcall OWWriteByte ; -00011d eb0c ldi r16, 188 -00011e df99 rcall WaitMiliseconds -00011f 9518 reti +000113 ec0c ldi r16,SkipRom ; Write Skip Rom one wire in "single-drop" +000114 dfcb rcall OWWriteByte ; +000115 e404 ldi r16, ConvertTemp ; Write ConvertCommand +000116 dfc9 rcall OWWriteByte ; +000117 eb0c ldi r16, 188 +000118 df9f rcall WaitMiliseconds +000119 9518 reti ConvertTempForLCD: ;r18 contiendra la partie décimal et xl la partie entiere -000120 930f push r16 -000121 931f push r17 -000122 e0c8 ldi YL,LOW(TempWord) -000123 e0d1 ldi YH,HIGH(TempWord) -000124 91a9 ld XL, Y+ -000125 91b9 ld XH, Y+ -000126 95a6 lsr XL -000127 95a6 lsr XL ;Sup des deux bit inutilisé -000128 e003 ldi r16, 0x03 -000129 2f2a mov r18, XL -00012a 2320 AND r18, r16 -00012b e109 ldi r16, 25 -00012c 9f20 mul r18, r16 -00012d 0190 movw r18, r0 -00012e 95a6 lsr XL -00012f 95a6 lsr XL ;Sup des deux bit de fraction -000130 e00f ldi r16, 15 -000131 23b0 and XH,r16 -000132 95b7 ROR XH -000133 95b7 ROR XH -000134 95b7 ROR XH -000135 95b7 ROR XH -000136 95b7 ROR XH ; xh>>4+1(+1 pour le carry) -000137 2bab or XL,XH +00011a 930f push r16 +00011b 931f push r17 +00011c e0c8 ldi YL,LOW(TempWord) +00011d e0d1 ldi YH,HIGH(TempWord) +00011e 91a9 ld XL, Y+ +00011f 91b9 ld XH, Y+ +000120 95a6 lsr XL +000121 95a6 lsr XL ;Sup des deux bit inutilisé +000122 2f0a mov r16, XL +000123 e023 ldi r18, 0x03 ;Masque des 3 bit de fraction +000124 232a AND r18, XL ;3bit fraction +000125 e109 ldi r16, 25 +000126 9f20 mul r18, r16 +000127 0190 movw r18, r0 +000128 95a6 lsr XL +000129 95a6 lsr XL ;Sup des deux bit de fraction +00012a e00f ldi r16, 0b00001111 +00012b 23b0 and XH,r16 +00012c 95b2 SWAP XH +00012d 2bab or XL,XH + ;mov r16, R18 + ;rcall LCD_WriteHex8 -000138 911f pop r17 -000139 910f pop r16 -00013a 9508 ret +00012e 911f pop r17 +00012f 910f pop r16 +000130 9508 ret #include "crc8.asm" ; CRC8 computing functions @@ -1677,49 +1671,49 @@ C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM ; Update crc value ;------------------------------------------------------------------------------ CRC8Update: -00013b 930f push r16 -00013c 931f push r17 -00013d 932f push r18 -00013e 930f push r16 +000131 930f push r16 +000132 931f push r17 +000133 932f push r18 +000134 930f push r16 -00013f e018 ldi r17, 8 +000135 e018 ldi r17, 8 CRC8L: -000140 9120 0110 lds r18, _crc -000142 2702 eor r16, r18 -000143 9507 ror r16 -000144 9100 0110 lds r16, _crc -000146 f410 brcc CRC8zero -000147 e128 ldi r18, 0x18 -000148 2702 eor r16, r18 +000136 9120 0110 lds r18, _crc +000138 2702 eor r16, r18 +000139 9507 ror r16 +00013a 9100 0110 lds r16, _crc +00013c f410 brcc CRC8zero +00013d e128 ldi r18, 0x18 +00013e 2702 eor r16, r18 CRC8zero: -000149 9507 ror r16 -00014a 9300 0110 sts _crc, r16 -00014c 910f pop r16 -00014d 9506 lsr r16 -00014e 930f push r16 -00014f 951a dec r17 -000150 f779 brne CRC8L -000151 910f pop r16 -000152 912f pop r18 -000153 911f pop r17 -000154 910f pop r16 -000155 9508 ret +00013f 9507 ror r16 +000140 9300 0110 sts _crc, r16 +000142 910f pop r16 +000143 9506 lsr r16 +000144 930f push r16 +000145 951a dec r17 +000146 f779 brne CRC8L +000147 910f pop r16 +000148 912f pop r18 +000149 911f pop r17 +00014a 910f pop r16 +00014b 9508 ret ;------------------------------------------------------------------------------ ; Clear crc value ;------------------------------------------------------------------------------ CRC8Init: -000156 930f push r16 -000157 e000 ldi r16,0 -000158 9300 0110 sts _crc, r16 -00015a 910f pop r16 -00015b 9508 ret +00014c 930f push r16 +00014d e000 ldi r16,0 +00014e 9300 0110 sts _crc, r16 +000150 910f pop r16 +000151 9508 ret ;------------------------------------------------------------------------------ ; Copy crc value to r16 ;------------------------------------------------------------------------------ GetCRC8: -00015c 9100 0110 lds r16, _crc -00015e 9508 ret +000152 9100 0110 lds r16, _crc +000154 9508 ret ;------------------------------------------------------------------------------ ; End of crc8.asm file ;------------------------------------------------------------------------------ @@ -1727,151 +1721,90 @@ C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM ; Constants definition ;------------------------------------------------------------------------------ Text1 : -00015f 4269 -000160 7475 -000161 6f74 -000162 206e -000163 6552 -000164 6461 -000165 7265 -000166 0000 .db "iButton Reader",0,0 +000155 6574 +000156 706d +000157 7220 +000158 6165 +000159 6564 +00015a 2072 +00015b 307e +00015c 322e +00015d 0035 +C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm(43): warning: .cseg .db misalignment - padding zero byte +00015e 0000 .db "temp reader ~0.25",0,0 Text2 : -000167 7661 -000168 2d72 -000169 636d -00016a 2e75 -00016b 7864 -00016c 2e70 -00016d 6c70 -00016e 0000 .db "avr-mcu.dxp.pl",0,0 +00015f 7661 +000160 2d72 +000161 636d +000162 2e75 +000163 7864 +000164 2e70 +000165 6c70 +000166 0000 .db "avr-mcu.dxp.pl",0,0 Tp : -00016f 002e +000167 002e C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm(47): warning: .cseg .db misalignment - padding zero byte -000170 0000 .db ".",0,0 +000168 0000 .db ".",0,0 ;------------------------------------------------------------------------------ ; Program entry point ;------------------------------------------------------------------------------ ProgramEntryPoint: -000171 ef0f ldi r16, LOW(RAMEND) ; Initialize stack pointer -000172 bf0d out SPL, r16 ; +000169 ef0f ldi r16, LOW(RAMEND) ; Initialize stack pointer +00016a bf0d out SPL, r16 ; -000173 df21 rcall LCD_Init ; Initialize LCD +00016b df29 rcall LCD_Init ; Initialize LCD -000174 e001 ldi r16, (HD44780_LINE0 + 1) ; -000175 df19 rcall LCD_SetAddressDD ; Set Display Data address to (0,1) +00016c e001 ldi r16, (HD44780_LINE0 + 1) ; +00016d df21 rcall LCD_SetAddressDD ; Set Display Data address to (0,1) -000176 ebee ldi ZL, LOW(Text1 << 1) ; Load string address to Z -000177 e0f2 ldi ZH, HIGH(Text1<< 1) ; -000178 deee rcall LCD_WriteString ; Display string +00016e eaea ldi ZL, LOW(Text1 << 1) ; Load string address to Z +00016f e0f2 ldi ZH, HIGH(Text1<< 1) ; +000170 def6 rcall LCD_WriteString ; Display string -000179 e401 ldi r16, (HD44780_LINE1 + 1) ; -00017a df14 rcall LCD_SetAddressDD ; Set Display Data address to (1,1); +000171 e401 ldi r16, (HD44780_LINE1 + 1) ; +000172 df1c 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 ConfigResolTo10Bits: -00017b df47 rcall OWReset -00017c f3f6 brts ConfigResolTo10Bits -00017d ec0c ldi r16, SkipRom ; Write Skip Rom one wire in "single-drop" -00017e df61 rcall OWWriteByte -00017f e40e ldi r16, WScratch -000180 df5f rcall OWWriteByte -000181 2700 clr r16 -000182 df5d rcall OWWriteByte ;th,tl -000183 df5c rcall OWWriteByte ;th,tl -000184 e30f ldi r16, 63 -000185 df5a rcall OWWriteByte ;resol +000173 df4f rcall OWReset +000174 f3f6 brts ConfigResolTo10Bits +000175 ec0c ldi r16, SkipRom ; Write Skip Rom one wire in "single-drop" +000176 df69 rcall OWWriteByte +000177 e40e ldi r16, WScratch +000178 df67 rcall OWWriteByte +000179 2700 clr r16 +00017a df65 rcall OWWriteByte ;th,tl +00017b df64 rcall OWWriteByte ;th,tl +00017c e30f ldi r16, 63 +00017d df62 rcall OWWriteByte ;resol MainLoop: -000186 e401 ldi r16, (HD44780_LINE1 + 1) ; -000187 df07 rcall LCD_SetAddressDD ; Set Display Data address to (1,1); -000188 df3a rcall OWReset ; One wire reset -000189 f3e6 brts MainLoop ; If device not present go to MainLoop +00017e e401 ldi r16, (HD44780_LINE1 + 1) ; +00017f df0f rcall LCD_SetAddressDD ; Set Display Data address to (1,1); +000180 df42 rcall OWReset ; One wire reset +000181 f3e6 brts MainLoop ; If device not present go to MainLoop -00018a df8c rcall TempRequest -00018b df78 rcall MainReadTemp -00018c df93 rcall ConvertTempForLCD +000182 df8e rcall TempRequest +000183 df80 rcall MainReadTemp +000184 df95 rcall ConvertTempForLCD +000185 0000 nop +000186 0000 nop +000187 0000 nop + ;jmp PC-1;LoadLoop + - ;rcall CRC8Init ; Initialize CRC8 value -00018d 940c 01a4 jmp LoadLoop -00018f df6b rcall OWReadByte ; Read first byte (Family ID) -000190 3000 cpi r16,0 ; If first byte equal to zero, go to MainLoop -000191 f3a1 breq MainLoop ; (short circuit on one wire bus) - -000192 dfa8 rcall CRC8Update ; Update the CRC - -000193 e0c0 ldi YL, LOW(SerialNumber) ; -000194 e0d1 ldi YH, HIGH(SerialNumber) ; Load to Y address of SerialNumber table - -000195 9309 st Y+, r16 ; Store first byte to table, and increment pointer - -000196 e017 ldi r17, 7 ; 7 bytes remaining - StoreLoop: -000197 df63 rcall OWReadByte ; read next byte -000198 dfa2 rcall CRC8Update ; update the CRC -000199 9309 st Y+, r16 ; store next byte to table, and increment pointer -00019a 951a dec r17 ; decrement loop counter -00019b f7d9 brne StoreLoop ; if greater than zero, jump to StoreLoop - -00019c dfbf rcall GetCRC8 ; Read computet CRC8 -00019d 3000 cpi r16,0 ; copmare with zero -00019e f739 brne MainLoop ; if not equal, jump to MainLoop (bad CRC) - ; else -00019f e400 ldi r16, (HD44780_LINE1 + 0) ; -0001a0 deee rcall LCD_SetAddressDD ; Set DisplayData address to (0,1) - -0001a1 e0c0 ldi YL, LOW(SerialNumber) ; -0001a2 e0d1 ldi YH, HIGH(SerialNumber) ; Load to Y address of SerialNumber table -0001a3 e012 ldi r17,2 ; 8 digits to display LoadLoop: -0001a4 930f push r16 -0001a5 2f0a mov r16, XL ; load to r16 byte from table - -0001a6 930f push r16 -0001a7 ef30 ldi r19,0xF0 -0001a8 2303 and r16,r19 -0001a9 d020 rcall bin2bcd8 -0001aa 9506 lsr r16 -0001ab 9506 lsr r16 -0001ac 9506 lsr r16 -0001ad 9506 lsr r16 -0001ae debe rcall LCD_WriteHexDigit ; display it on LCD in HEX -0001af 910f pop r16 -0001b0 d019 rcall bin2bcd8 -0001b1 e02f ldi r18,0x0F -0001b2 2302 and r16,r18 -0001b3 deb9 rcall LCD_WriteHexDigit ; display it on LCD in HEX - - - - - - -0001b4 2f02 mov r16, r18 ; load to r16 byte from table - -0001b5 930f push r16 -0001b6 ef30 ldi r19,0xF0 -0001b7 2303 and r16,r19 -0001b8 d011 rcall bin2bcd8 -0001b9 9506 lsr r16 -0001ba 9506 lsr r16 -0001bb 9506 lsr r16 -0001bc 9506 lsr r16 -0001bd deaf rcall LCD_WriteHexDigit ; display it on LCD in HEX -0001be 910f pop r16 -0001bf d00a rcall bin2bcd8 -0001c0 e02f ldi r18,0x0F -0001c1 2302 and r16,r18 -0001c2 deaa rcall LCD_WriteHexDigit ; display it on LCD in HEX -0001c3 0000 nop -0001c4 0000 nop -0001c5 0000 nop -0001c6 940c 0186 jmp MainLoop -0001c8 f6d9 brne LoadLoop ; if not zero, jump to LoadLoop -0001c9 cfbc rjmp MainLoop ; jump to MainLoop +000188 930f push r16 +000189 2f0a mov r16, XL ; chargement partie entière +00018a d008 rcall bin2bcd8 +00018b deeb rcall LCD_WriteHex8 ; display it on LCD in HEX +00018c 2f02 mov r16, r18 ; load DEC +00018d d005 rcall bin2bcd8 +00018e dee8 rcall LCD_WriteHex8 ; display it on LCD in HEX +00018f 940c 017e jmp MainLoop +000191 f7b1 brne LoadLoop ; if not zero, jump to LoadLoop +000192 cfeb rjmp MainLoop ; jump to MainLoop ;------------------------------------------------------------------------------ ; End of file ;------------------------------------------------------------------------------ @@ -1889,15 +1822,17 @@ C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM ;.def tBCD = r21 ;add this to main asm file ; bin2bcd8: -0001ca 2755 clr r21 ;clear temp reg +000193 935f push r21 +000194 2755 clr r21 ;clear temp reg bBCD8_1: -0001cb 500a subi r16,10 ;input = input - 10 -0001cc f010 brcs bBCD8_2 ;abort if carry set -0001cd 5f50 subi r21,-$10 ;tBCD = tBCD + 10 -0001ce cffc rjmp bBCD8_1 ;loop again +000195 500a subi r16,10 ;input = input - 10 +000196 f010 brcs bBCD8_2 ;abort if carry set +000197 5f50 subi r21,-$10 ;tBCD = tBCD + 10 +000198 cffc rjmp bBCD8_1 ;loop again bBCD8_2: -0001cf 5f06 subi r16,-10 ;compensate extra subtraction -0001d0 0f05 add r16,r21 +000199 5f06 subi r16,-10 ;compensate extra subtraction +00019a 0f05 add r16,r21 +00019b 915f pop r21 RESOURCE USE INFORMATION @@ -1915,40 +1850,40 @@ counted separately from r26..r31 here. .dseg memory usage only counts static data declared with .byte "ATmega328P" register use summary: -x : 0 y : 6 z : 1 r0 : 1 r1 : 0 r2 : 0 r3 : 0 r4 : 0 +x : 0 y : 4 z : 1 r0 : 1 r1 : 0 r2 : 0 r3 : 0 r4 : 0 r5 : 0 r6 : 0 r7 : 0 r8 : 0 r9 : 0 r10: 0 r11: 0 r12: 0 -r13: 0 r14: 3 r15: 6 r16: 117 r17: 32 r18: 17 r19: 4 r20: 0 -r21: 4 r22: 1 r23: 0 r24: 0 r25: 0 r26: 21 r27: 21 r28: 4 -r29: 4 r30: 1 r31: 1 -Registers used: 17 out of 35 (48.6%) +r13: 0 r14: 3 r15: 6 r16: 93 r17: 29 r18: 13 r19: 0 r20: 0 +r21: 5 r22: 0 r23: 0 r24: 0 r25: 0 r26: 22 r27: 17 r28: 2 +r29: 2 r30: 1 r31: 1 +Registers used: 15 out of 35 (42.9%) "ATmega328P" instruction use summary: -.lds : 0 .sts : 0 adc : 0 add : 5 adiw : 0 and : 6 +.lds : 0 .sts : 0 adc : 0 add : 5 adiw : 0 and : 2 andi : 2 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0 -brcc : 3 brcs : 1 break : 0 breq : 2 brge : 0 brhc : 0 +brcc : 3 brcs : 1 break : 0 breq : 1 brge : 0 brhc : 0 brhs : 0 brid : 0 brie : 0 brlo : 1 brlt : 0 brmi : 0 -brne : 12 brpl : 0 brsh : 0 brtc : 0 brts : 7 brvc : 0 +brne : 10 brpl : 0 brsh : 0 brtc : 0 brts : 5 brvc : 0 brvs : 0 bset : 0 bst : 0 call : 0 cbi : 12 cbr : 0 clc : 2 clh : 0 cli : 0 cln : 0 clr : 4 cls : 0 clt : 2 clv : 0 clz : 0 com : 0 cp : 0 cpc : 0 -cpi : 7 cpse : 0 dec : 6 eor : 2 fmul : 0 fmuls : 0 -fmulsu: 0 icall : 0 ijmp : 0 in : 0 inc : 3 jmp : 2 -ld : 2 ldd : 0 ldi : 77 lds : 3 lpm : 1 lsl : 0 -lsr : 13 mov : 5 movw : 1 mul : 1 muls : 0 mulsu : 0 -neg : 0 nop : 3 or : 1 ori : 2 out : 1 pop : 18 -push : 19 rcall : 77 ret : 25 reti : 26 rjmp : 7 rol : 2 -ror : 9 sbc : 0 sbci : 0 sbi : 15 sbic : 1 sbis : 1 +cpi : 5 cpse : 0 dec : 5 eor : 2 fmul : 0 fmuls : 0 +fmulsu: 0 icall : 0 ijmp : 0 in : 0 inc : 3 jmp : 1 +ld : 2 ldd : 0 ldi : 66 lds : 3 lpm : 1 lsl : 0 +lsr : 5 mov : 3 movw : 1 mul : 1 muls : 0 mulsu : 0 +neg : 0 nop : 3 or : 1 ori : 2 out : 1 pop : 17 +push : 18 rcall : 65 ret : 25 reti : 26 rjmp : 7 rol : 2 +ror : 4 sbc : 0 sbci : 0 sbi : 15 sbic : 1 sbis : 1 sbiw : 1 sbr : 0 sbrc : 4 sbrs : 4 sec : 2 seh : 0 sei : 0 sen : 0 ser : 0 ses : 0 set : 2 sev : 0 -sez : 0 sleep : 0 spm : 0 st : 4 std : 0 sts : 2 -sub : 2 subi : 3 swap : 3 tst : 0 wdr : 0 +sez : 0 sleep : 0 spm : 0 st : 2 std : 0 sts : 2 +sub : 2 subi : 3 swap : 4 tst : 0 wdr : 0 Instructions used: 51 out of 113 (45.1%) "ATmega328P" memory use summary [bytes]: Segment Begin End Code Data Used Size Use% --------------------------------------------------------------- -[.cseg] 0x000000 0x0003a4 846 36 882 32768 2.7% +[.cseg] 0x000000 0x00033a 736 40 776 32768 2.4% [.dseg] 0x000100 0x000111 0 17 17 2048 0.8% [.eseg] 0x000000 0x000000 0 0 0 1024 0.0% -Assembly complete, 0 errors, 3 warnings +Assembly complete, 0 errors, 4 warnings diff --git a/Debug/ASM18b20AvecLCD.map b/Debug/ASM18b20AvecLCD.map index 2c53c09..3653cea 100644 --- a/Debug/ASM18b20AvecLCD.map +++ b/Debug/ASM18b20AvecLCD.map @@ -1,5 +1,5 @@ -AVRASM ver. 2.2.7 C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm Sun Jun 10 03:42:22 2018 +AVRASM ver. 2.2.7 C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm Sun Jun 10 10:18:03 2018 EQU SIGNATURE_000 0000001e @@ -696,7 +696,7 @@ EQU TWIaddr 00000030 EQU SPMRaddr 00000032 EQU INT_VECTORS_SIZE 00000034 DSEG SerialNumber 00000100 -CSEG ProgramEntryPoint 00000171 +CSEG ProgramEntryPoint 00000169 EQU LCD_PORT 0000000b EQU LCD_DDR 0000000a EQU LCD_PIN 00000009 @@ -752,21 +752,20 @@ CSEG OWReadBitEnd 000000fa CSEG OWReadByte 000000fb CSEG OWReadLoop 000000fd CSEG MainReadTemp 00000104 -CSEG TempRequest 00000117 -CSEG ConvertTempForLCD 00000120 +CSEG TempRequest 00000111 +CSEG ConvertTempForLCD 0000011a DSEG _crc 00000110 -CSEG CRC8Update 0000013b -CSEG CRC8L 00000140 -CSEG CRC8zero 00000149 -CSEG CRC8Init 00000156 -CSEG GetCRC8 0000015c -CSEG Text1 0000015f -CSEG Text2 00000167 -CSEG Tp 0000016f -CSEG ConfigResolTo10Bits 0000017b -CSEG MainLoop 00000186 -CSEG LoadLoop 000001a4 -CSEG StoreLoop 00000197 -CSEG bin2bcd8 000001ca -CSEG bBCD8_1 000001cb -CSEG bBCD8_2 000001cf +CSEG CRC8Update 00000131 +CSEG CRC8L 00000136 +CSEG CRC8zero 0000013f +CSEG CRC8Init 0000014c +CSEG GetCRC8 00000152 +CSEG Text1 00000155 +CSEG Text2 0000015f +CSEG Tp 00000167 +CSEG ConfigResolTo10Bits 00000173 +CSEG MainLoop 0000017e +CSEG LoadLoop 00000188 +CSEG bin2bcd8 00000193 +CSEG bBCD8_1 00000195 +CSEG bBCD8_2 00000199 diff --git a/Debug/ASM18b20AvecLCD.obj b/Debug/ASM18b20AvecLCD.obj index e882f0a..0ef7344 100644 Binary files a/Debug/ASM18b20AvecLCD.obj and b/Debug/ASM18b20AvecLCD.obj differ diff --git a/Debug/ASM18b20AvecLCD.tmp b/Debug/ASM18b20AvecLCD.tmp index 8a860bc..fb9035a 100644 --- a/Debug/ASM18b20AvecLCD.tmp +++ b/Debug/ASM18b20AvecLCD.tmp @@ -67,8 +67,8 @@ C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\1-wire.asm120 C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\1-wire.asm123 C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\1-wire.asm134 - C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\1-wire.asm156 - C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\1-wire.asm168 + C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\1-wire.asm152 + C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\1-wire.asm164 <_crc>C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\crc8.asm13 C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\crc8.asm21 C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\crc8.asm28 @@ -78,12 +78,11 @@ C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm42 C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm44 C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm46 - C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm70 - C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm85 - C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm126 - C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm109 - C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm188 - C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm190 - C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm195 + C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm67 + C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm82 + C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm97 + C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm124 + C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm127 + C:\Users\adrie\Nextcloud\iset\2IS\2IS\ASM JR\ASM18b20AvecLCD\ASM18b20AvecLCD\ASM18b20AvecLCD\main.asm132 diff --git a/main.asm b/main.asm index 2d91214..86020e0 100644 --- a/main.asm +++ b/main.asm @@ -40,7 +40,7 @@ SerialNumber: .byte 8 ; Constants definition ;------------------------------------------------------------------------------ Text1 : - .db "iButton Reader",0,0 + .db "temp reader ~0.25",0,0 Text2 : .db "avr-mcu.dxp.pl",0,0 Tp : @@ -64,9 +64,6 @@ ProgramEntryPoint: 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 ConfigResolTo10Bits: rcall OWReset brts ConfigResolTo10Bits @@ -83,7 +80,7 @@ ConfigResolTo10Bits: MainLoop: -ldi r16, (HD44780_LINE1 + 1) ; + ldi r16, (HD44780_LINE1 + 1) ; rcall LCD_SetAddressDD ; Set Display Data address to (1,1); rcall OWReset ; One wire reset brts MainLoop ; If device not present go to MainLoop @@ -91,81 +88,20 @@ ldi r16, (HD44780_LINE1 + 1) ; rcall TempRequest rcall MainReadTemp rcall ConvertTempForLCD + nop + nop + nop + ;jmp PC-1;LoadLoop + - ;rcall CRC8Init ; Initialize CRC8 value - jmp LoadLoop - 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,2 ; 8 digits to display LoadLoop: push r16 - mov r16, XL ; load to r16 byte from table - - push r16 - ldi r19,0xF0 - and r16,r19 - rcall bin2bcd8 - lsr r16 - lsr r16 - lsr r16 - lsr r16 - rcall LCD_WriteHexDigit ; display it on LCD in HEX - pop r16 + mov r16, XL ; chargement partie entière rcall bin2bcd8 - ldi r18,0x0F - and r16,r18 - rcall LCD_WriteHexDigit ; display it on LCD in HEX - - - - - - - mov r16, r18 ; load to r16 byte from table - - push r16 - ldi r19,0xF0 - and r16,r19 + rcall LCD_WriteHex8 ; display it on LCD in HEX + mov r16, r18 ; load DEC rcall bin2bcd8 - lsr r16 - lsr r16 - lsr r16 - lsr r16 - rcall LCD_WriteHexDigit ; display it on LCD in HEX - pop r16 - rcall bin2bcd8 - ldi r18,0x0F - and r16,r18 - rcall LCD_WriteHexDigit ; display it on LCD in HEX - nop - nop - nop + rcall LCD_WriteHex8 ; display it on LCD in HEX jmp MainLoop brne LoadLoop ; if not zero, jump to LoadLoop rjmp MainLoop ; jump to MainLoop @@ -186,6 +122,7 @@ LoadLoop: ;.def tBCD = r21 ;add this to main asm file ; bin2bcd8: + push r21 clr r21 ;clear temp reg bBCD8_1: subi r16,10 ;input = input - 10 @@ -194,5 +131,6 @@ bBCD8_1: rjmp bBCD8_1 ;loop again bBCD8_2: subi r16,-10 ;compensate extra subtraction - add r16,r21 + add r16,r21 + pop r21 ret \ No newline at end of file