Laboration 1 (ver 1) Uppgifter: AVR Studio 4.lnk Bli bekant med utvecklingskortet, och AVR studio. Skriva in program för binärräknare. Simulera detta samt ladda ner det till kortet. Förse ovanstående program med en fördröjningsloop. Simulera och provköra. Skriva ett program som läser in från en port. Det inlästa värdet skall sedan presenteras på lysdioderna på en annan port. Hur skall det inlästa värdet kunna multipliseras med 2, 4 eller 8 på ett enkelt sätt. Skriv ett program för detta. Det finns en handledning till kortet på hemsidan. AVR STK500. Kortet matas med DC 10 15 V. Polariteten är valfri. Kortet kopplas till datorn via en 9 polig kabel. Seriekabeln kopplas till det uttag som sitter mitt på kortets kortsida. ( RS232 CTRL ). Skapa en katalog på D: där Du temporärt sparar Din laboration. Denna katalog skall Du kopiera till Din hemkatalog när laborationen är klar. Det verkar som att man inte kan skriva in källkoden då man arbetar mot en server. Öppna AVR Studio 4 och skapa ett nytt projekt. Location: Välj en katalog på D: Project Name: Valfri text, Inutial File Blir samma som Project Name med tillägget.asm När Du är klar så kommer Du till AVR Studio. Du får tre fönster: Workspace Output och ett fönster där Du skriver in Din kod. Välj den kod som finns för binärräknaren på föreläsning 2. F2-2005 Håll reda på de tre fälten, Label Mnemonic Operand ; semikolon före kommentar. När Du sparat koden är det dags att bygga. I huvudmenyn: Project Build F7 Om koden är korrekt bildas ett antal nya filer. Information finns i fönstret Output Sista meddelandet är : Assembley complete with no errors. Finns fel i assemblerfilen så kommer detta att anges i Fönstret Output En röd prick för varje fel. Dubbelklicka på raden, så visas var felet finns i assemblerkoden. Rätta felen och gör om.
Testa programmet Huvudmenyn: Debug Start Debugging Nytt fönster: Select device and debug platform Välj AVR Simulator, resp ATMega16 I kodfönstet finns nu en gul pil som pekar på första instruktionen. Fönster Output kan Du stänga tills vidare. Step over I Workspace finns nu information om vad som händer då programmet körs. Det som är intressant är Den port som används i programmet. PORTB. Vidare hur statusregistret ändras. SREG hittar Du under CPU. Register R16 används också av programmet. Använd Step over ( F10) för att stega genom programmet. I Workspace finner Du hur processorn arbetar. Huvudmenyn View Här hittar Du ett antal fönster som kan öppnas. Memory och Disassembler. Använd även dessa för att följa hur processorn arbetar.
Ladda ner programmet till utvecklingskortet. Öppna output-fönstret. Detta görs under View Här får Du en del information Huvudmenyn Tools STK500/AVRISP/JTAGICE STK500/AVRISP/JTAGICE Nu får Du detta fönster: Programmet skall laddas ner till Flash-minnet. Vid Input HEX File letar Du reda på Din hex-fil. Knappen med tre punkter till höger är en bläddringsknapp. När Du har rätt fil klickar Du på Program, och hexfilen laddas ner till kortet. Provkör. Tillfoga nu en fördröjningsloop till programmet. Testa Ditt program i Debug. Det tar lite tid att stega genom en räknare från 0 till FF ( 0 till 255 ). För att hitta intressanta värden, markerar Du registerinnehållet, för att sedan ändra detta till ett valfritt värde. Med hjälp av disassembler finner man hur kompilatorn har översatt källkoden till maskinkod. Jämför innehållet i disassembler med innehållet i den hexfil som skapats. Formatet som används är Intels hex format. Det finns också ett annat format för att skriva hex-filer. Motorolas S-record Format. Nedanstående text kan ge en uppfattning hur det hela fungerar.
bytes; Intel s Hex Format A hex file [Int88] consists of a series of lines (records) in a file. Each record is made up of six fields: 1 Mark 1 a simple colon, : 2 Length 2 number of bytes in the data field 3 Offset 4 the address (2 byte) at which data should be programmed 4 Type 2 record type (00, 01, or 02) 5 Data 0-2_ 0 to _ this contains the opcodes 6 Checksum 2 sum of bytes in fields 2-5 plus checksum are zero Note that since this is an ASCII encoding, each byte (in hexadecimal) requires two characters. For example, a byte with value 255 would be written as FF. The format can be used for 8-, 16- and 32-bit microprocessors. It distinguishes between several different record types, not all of which are available for all architectures: Type Description Architecture 00 data record 8-, 16-, 32-bit 01 end of file record 8-, 16-, 32-bit 02 extended segment address record 16-, 32-bit 03 start segment address record 16-, 32-bit 04 extended linear address record 32-bit 05 start linear address record 32-bit Consider the following example (taken from an ATmega16 assembly program): :100000000CC00F9300E000000000000000000A9503 :10001000D1F70F910A95A9F708950FE50DBF04E0F8 :100020000EBF00E005BB0FEF04BB11E015BB00E005 :0E003000E8DFE7DFE6DF8894111FF0F3F7CF7B :00000001FF The first line has data length 0x10 = 16 bytes, programming should start at address 0x0000, and the type of the record is 00 (data). After that follow 16 bytes of data, starting with 0x0C. The ATmega16 has a 16-bit opcode and is a little-endian machine, so the first opcode is 0xC00C (0x0C at byte address 0x0000, 0xC0 at byte address 0x0001), which translates to an rjmp to address 0x0C. In this case the start of the main program. The last byte in the record, 0x03, is the checksum, which you get by summing up the bytes from 0x0C until 0x95 (that makes 0x02FD) and computing the two s complement of the lowest byte (-0xFD = 0x03). The following three records are also data records. The last line is the end-of-file record.
Tips för sista uppgiften. En port är utport om motsvarande DDR- register innehåller ettor. Den fungerar som inport om DDR-registret innehåller nollor. I progammet för binärräknaren har vi använt: OUT PORTB, temp Detta för att läsa ut innehållet i temp till PORTB. För att läsa in från PORTD till register temp används kommandot: IN temp, PIND Ytterligare en uppgift Skapa ett rinnande ljus. Två lysdioder skall vara tända bredvid varandra och rinna åt höger.