Forum: Optimering av Assemblerprogram

Forum huvudsida -> Programmering -> Optimering av Assemblerprogram

Sidor: 1

Till botten

Vitdom 10:17 - 14:e December 2008 | Post #1
Medlem
Inlägg: 71


Skicka PM
Jag har programmerat ett assemblerprogram för Atmel's AVR ATmega8515 mikrokontroller, det fungerar utmärkt men jag är inte van vid så här långa koder(för att göra en så liten sak). Så jag undrar om någon kan hjälpa mig att optimera min kod.

Vad alla mnemonics betyder hittar ni här: http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf


  1. ; tworol00.asm - 28/11-08 *
  2. ; ------------------------- *
  3. ; Rullar lysdioder när man trycker på SW0 eller SW7 *
  4. ;****************************************************
  5.  
  6. .include "8515def.inc"
  7.  
  8. .def temp = r16
  9. .def lights = r17
  10. .def delay1 = r18
  11. .def delay2 = r19
  12. .def factor = r20
  13. .def savec = r21
  14.  
  15. RESET:
  16. ser temp ;Förbered portarna
  17. out DDRB, temp
  18. clr temp
  19. out DDRD, temp
  20.  
  21. ldi lights, $E7 ;Förbered lysdioderna
  22. out PORTB, lights
  23.  
  24. ldi factor, $02 ;Förbered fördröjningsfaktorn
  25.  
  26. ser savec ;Förbered savec
  27.  
  28. loop:
  29. dec delay1 ;Fördröjning ca 400ms(1MHz)
  30. brne loop
  31. dec delay2
  32. brne loop
  33. dec factor
  34. brne loop
  35. ldi factor, $02
  36.  
  37. loop1:
  38. in temp, PIND ;Hämta indata från PIND och lägg i temp
  39.  
  40. cpi temp, $7F ;Undersök om SW0 eller SW7 är nertryckt
  41. breq L1
  42. cpi temp, $FE
  43. breq L4
  44. rjmp loop1
  45.  
  46. L1: ;Kommer hit om SW7 är nertryckt
  47. cpi savec, $00
  48. breq L2
  49.  
  50. bset 0 ;om savec = $FF så sätts carry = 1
  51. rjmp L3
  52.  
  53. L2: ;om savec = $00 så sätts carry = 0
  54. bclr 0
  55.  
  56. L3:
  57. rol lights
  58. brcc L7
  59.  
  60. ser savec ;om carry = 1 så sätts savec = $FF
  61. rjmp L8
  62.  
  63. L4: ;Kommer hit om SW0 är nertryckt
  64. cpi savec, $00
  65. breq L5
  66.  
  67. bset 0 ;om savec = $FF så sätts carry = 1
  68. rjmp L6
  69.  
  70. L5: ;om savec = $00 så sätts carry = 0
  71. bclr 0
  72.  
  73. L6:
  74. ror lights
  75. brcc L7
  76.  
  77. ser savec ;om carry = 1 så sätts savec = $FF
  78. rjmp L8
  79.  
  80. L7: ;om carry = 0 så sätts savec = $00
  81. clr savec
  82.  
  83. L8: ;Skicka utdata till PORTB från lights
  84. out PORTB, lights
  85. rjmp loop


-------------------------





Sidor: 1

Forum huvudsida -> Programmering -> Optimering av Assemblerprogram
Atom feed

Du får inte posta i den här tråden | Till toppen