Advertisement
MateuszGrabarczyk

SMIW LAB 7

Jan 13th, 2023 (edited)
369
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.12 KB | None | 0 0
  1. //////////////////////////////////////////////////////////////////////////////
  2. // Laboratory AVR Microcontrollers Part1
  3. // Program template for ASM lab 7
  4. // Please fill in this information before starting coding
  5. // Authors:
  6. //. Write a program that copies data from TAB_ROM to TAB_RAM. Copying should
  7. // start after any button is pressed. Turn LED connected to Port B.6 to state ON
  8. // after that.
  9. //1.
  10. //2.
  11. //3.
  12. //4.
  13. // Group:
  14. // Section:
  15. // Task number:
  16. //
  17. // Version: 2020v3.0
  18. //////////////////////////////////////////////////////////////////////////////
  19. .nolist ;quartz assumption 4Mhz
  20. .include "m2560def.inc"
  21. //////////////////////////////////////////////////////////////////////////////
  22. // Change this variable to test different values from 0 to 100
  23. .equ xlength = 100
  24. ;//////////////////////////////////////////////////////////////////////////////
  25. ; EEPROM - data non-volatile memory segment Please don't use
  26. .ESEG
  27. ;//////////////////////////////////////////////////////////////////////////////
  28. ; StaticRAM - data memory.segment
  29. .DSEG
  30. .ORG 0x200; may be omitted this is the default value
  31. ; Destination table (xlengthx bytes).
  32. TAB_RAM: .BYTE xlength
  33. ;//////////////////////////////////////////////////////////////////////////////
  34. ; CODE - Program memory segment
  35. ; Please Remember that it is "word" address space
  36. ;
  37. .CSEG
  38. .org 0x0000 ; may be omitted this is default value
  39. jmp RESET ; Reset Handler
  40.  
  41. ;//////////////////////////////////////////////////////////////////////////////
  42. ; Program start
  43. RESET:
  44. cli ; disable all interrupts
  45. // Set stack pointer to the top of RAM
  46. ldi R16, HIGH(RAMEND)
  47. out SPH, R16
  48. ldi R16, LOW(RAMEND)
  49. out SPL, R16
  50. // 1. Place here code related to initialization of all ports
  51. // for instance: port A as input and no pullups
  52. // DDRA=0x00
  53. clr r16 ; ustawienie 0x00 w rejestrze
  54. ser r17 ; ustawienie 0xFF w rejestrze
  55.  
  56. out DDRA, r16 ; PORTA - jako wejsciowy
  57. out PORTA, r17 ; PORTA - wejscia PULL-UP
  58. out DDRB, r17 ; PORTB - jako wyjscie
  59. out PORTB, r17 ; PORTB - wyjscie w stan niski by diody nie œwieci³y
  60. // PORTA=0x00
  61. // port B as output and initial value FF
  62. // DDRB=0xFF
  63. // PORTB=0xFF
  64. //
  65. // Writing a logic one to PINxn toggles the value of PORTxn, regardless of the value of DDRxn
  66. // Note that the SBI instruction can be used to toggle one single bit in a port.
  67. // for instance: sbi DDRB, 0
  68. // 2. Enable interrupts if needed
  69. // sei
  70.  
  71. //------------------------------------------------------------------------------
  72. // 3. Load initial values of index registers
  73. // Z, X, Y
  74. ldi ZL, BYTE3(TAB_ROM<<1)
  75. out RAMPZ, ZL
  76. ldi ZH, BYTE2(TAB_ROM<<1)
  77. ldi ZL, BYTE1(TAB_ROM<<1)
  78.  
  79. ldi YH, BYTE2(TAB_RAM)
  80. ldi YL, BYTE1(TAB_RAM)
  81.  
  82. CZEKAJ:
  83. in r16, PINA
  84. cpi r16, 0xFF
  85. breq CZEKAJ
  86.  
  87. PETLA_KOPIUJACA:
  88. elpm R16, Z+ // nastepna wartosc do R16
  89. cpi R16, 0
  90. breq ZERO // jesli zero, skok do ZERO
  91. rjmp LADUJ
  92.  
  93. ZERO:
  94. elpm R16, Z // nastepna wartosc do r16
  95. cpi R16, 0
  96. breq KONIEC // jesli zero, skok do ZERO
  97. ldi R16, 0
  98.  
  99. LADUJ:
  100. st Y+, R16
  101. rjmp PETLA_KOPIUJACA
  102.  
  103. KONIEC:
  104. // wlaczenie leda na porcie b.6
  105. cbi PORTB, 6
  106.  
  107.  
  108.  
  109.  
  110. //------------------------------------------------------------------------------
  111. // Program end - Ending loop
  112. //------------------------------------------------------------------------------
  113. End:
  114. rjmp END
  115. //------------------------------------------------------------------------------
  116. // Table Declaration - place here test values
  117. // Test with other table values and different begin addresses of a table (also above 0x8000)
  118. //
  119. //.org 0x8000
  120. TAB_ROM: .db 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x1F
  121. //.db 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1F, 0x1F
  122. /*.db 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F
  123. .db 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F
  124. .db 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F
  125. .db 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F
  126. .db 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F
  127. .db 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F
  128. .db 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F
  129. .db 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F
  130. .db 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaA, 0xaB, 0xaC, 0xaD, 0xAE, 0xAF
  131. .db 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF
  132. .db 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF
  133. .db 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF
  134. .db 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0*/
  135. // please correct end of this table according to the guidelines given by the teacher
  136. .db 0x00,0x00
  137. .EXIT
  138. //-------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement