/****************************************************************************** * * PrintDateAndTime.Asm - Source for the WS2812 COM1 status examples. * * AVR-AS PrintDateAndTime.Asm -mmcu=atmega328p -o PrintDateAndTime.Elf * If ErrorLevel 1 GoTo :Exit * If NOT Exist PrintDateAndTime.Elf GoTo :Exit * AVR-ObjCopy -j .text -j .data -O ihex PrintDateAndTime.Elf PrintDateAndTime.Hex * If ErrorLevel 1 GoTo :Exit * If NOT Exist PrintDateAndTime.Hex GoTo :Exit * AVR-ObjDump -d PrintDateAndTime.Elf > PrintDateAndTime.Dmp * If ErrorLevel 1 GoTo :Exit * If NOT Exist PrintDateAndTime.Dmp GoTo :Exit * AVR-ReadELF -a PrintDateAndTime.Elf > PrintDateAndTime.RdE * If ErrorLevel 1 GoTo :Exit * If NOT Exist PrintDateAndTime.RdE GoTo :Exit * AVR-ReadELF -s -W PrintDateAndTime.Elf > PrintDateAndTime.Sym * If ErrorLevel 1 GoTo :Exit * If NOT Exist PrintDateAndTime.Sym GoTo :Exit * MakePTRFile /Q PrintDateAndTime.Sym PrintDateAndTime.Ptr * * :Exit * * It should generate this iHex output, which can be "dropped in". * Note that this is only the relevant portion of that iHex file. * * :10100000F1E0E8EDB0E1A5EC8381A80FB11DCD01C1 * :101010000E942C3090E10E944C3085819FE221D0CB * :1010200084811FD084E190E00E943108868190E2A3 * :101030000E94310890E181EC0E944C3082819AE359 * :1010400010D081819EE206D0808190E203D00E9480 * :101050005B300895782F7A3020F480E00E9454307D * :10106000872F0E945430892F0C94533028303B2016 * :101070006E6F74207365742920004D6F6E64617902 * :101080002C2000547565736461792C2000576564C9 * :101090006E65736461792C200054687572736461A5 * :1010A000792C20004672696461792C2000536174A8 * :1010B00075726461792C200053756E6461792C20FF * :0D10C00000617420006C7A838D99A4ADB896 * :00000001FF * ******************************************************************************/ .INCLUDE "CommonDefs.Def" .INCLUDE "BinDefs.Def" .INCLUDE "IOM328P.Def" .INCLUDE "Indices.Def" .INCLUDE "Addresses.Def" .INCLUDE "nRF24L01.Def" .INCLUDE "SystemEEPROM.Def" .INCLUDE "SystemFLASH.Def" .INCLUDE "SystemSRAM.Def" ; If the Assembler (AVR-AS) exits in error and generates this complaint: ; "...61: Error: can't open PrintDateAndTime.Ptr for reading: No such file or directory", ; it can be easily remedied by creating a new PrintDateAndTime.Ptr file by ; typing "Copy Con PrintDateAndTime.Ptr" (Enter), ; then type at least one space at the blank line then a Control-Z (or F6) ; and press Enter. It should say: "1 files(s) copied." The AVR-AS.Exe ; program should then be able to find the file and the SSG MakePTRFile.Exe ; program will then recreate it, using the sequence (or batch file) above. ; .INCLUDE "PrintDateAndTime.Ptr" .IFNDEF ACSZ_At ACSZ_Unknown = 0 ACSZ_Monday = 0 ACSZ_Tuesday = 0 ACSZ_Wednesday = 0 ACSZ_Thursday = 0 ACSZ_Friday = 0 ACSZ_Saturday = 0 ACSZ_Sunday = 0 ACSZ_At = 0 ALookupTable = 0 .ENDIF AddressMSByte1 = ACSZ_Unknown >> 8 AddressMSByte2 = ACSZ_At >> 8 .IF (AddressMSByte1 != AddressMSByte2 ) .ERROR "Some string address MSBytes differ!" .ENDIF ; 11111111112222222222333333333344444444445555555555666666666677777777778 ;2345678901234567890123456789012345678901234567890123456789012345678901234567890 .ORG 0x1000 IndexSecond = 0 IndexMinute = 1 IndexHour = 2 IndexDayOfWeek = 3 IndexDate = 4 IndexMonth = 5 IndexYear = 6 CheckLength: LDI R31, sWallClock >> 8 ; Point 'Z' at the System Clock structure LDI R30, sWallClock & 0xFF ; in SRAM LDI R27, ALookupTable >> 8 ; Point 'X' at the beginning of the 8-BYTE LDI R26, ALookupTable & 0xFF ; string lookup table LDD R24, Z + IndexDayOfWeek ; Get the System RTC maintained weekday ADD R26, R24 ; Index into the lookup table for the day ADC R27, R1 ; of the week MOVW R24, R26 CALL AReadPGM_BYTE LDI R25, ACSZ_Unknown >> 8 CALL APrintFLASHASCIIz LDD R24, Z + IndexMonth LDI R25, '/' RCALL APrintBYTEandCHAR LDD R24, Z + IndexDate RCALL APrintBYTEandCHAR LDI R24, 20 LDI R25, 0 CALL APrintBYTEandCHAR LDD R24, Z + IndexYear LDI R25, ' ' CALL APrintBYTEandCHAR LDI R25, ACSZ_At >> 8 LDI R24, ACSZ_At & 0xFF CALL APrintFLASHASCIIz LDD R24, Z + IndexHour LDI R25, ':' RCALL APrintBYTEandCHAR LDD R24, Z + IndexMinute LDI R25, '.' RCALL APrint2DigitsandCHAR LDD R24, Z + IndexSecond LDI R25, ' ' RCALL APrint2DigitsandCHAR CALL APrintNewLine RET Print2DigitsandCHAR: MOV R23, R24 CPI R23, 10 BRSH APrintBYTEandCHAR LDI R24, 0 CALL APrintBYTE MOV R24, R23 PrintBYTEandCHAR: CALL APrintBYTE MOV R24, R25 NearPrintCHAR: JMP APrintCHAR CSZ_Unknown: .STRING "(0; not set) " CSZ_Monday: .STRING "Monday, " CSZ_Tuesday: .STRING "Tuesday, " CSZ_Wednesday: .STRING "Wednesday, " CSZ_Thursday: .STRING "Thursday, " CSZ_Friday: .STRING "Friday, " CSZ_Saturday: .STRING "Saturday, " CSZ_Sunday: .STRING "Sunday, " CSZ_At: .STRING "at " LookupTable: .BYTE ACSZ_Unknown & 0xFF, ACSZ_Monday & 0xFF, ACSZ_Tuesday & 0xFF .BYTE ACSZ_Wednesday & 0xFF, ACSZ_Thursday & 0xFF, ACSZ_Friday & 0xFF .BYTE ACSZ_Saturday & 0xFF, ACSZ_Sunday & 0xFF