Advertisement
prjbrook

usi2f.asm Reverse bits seems ok

Oct 12th, 2014
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. Reverse bits seems to work OK. Put val into r16 and rcall reverseBits
  2. .include "tn85def.inc" ;usi2f: Previous worked OK. But need to (a) reverse bits and (b) cut into nice lead
  3. ; byte and remaining 2bits ina following byte.
  4. again:
  5. ldi r16, low(RAMEND)
  6. out SPL, r16
  7. ldi r16,high(RAMEND)
  8. out SPH, r16
  9. ldi r17,17
  10. ldi r18,18
  11. ldi r16,$a6
  12. rcall reverseBits
  13. ag1:
  14. rjmp ag1
  15. ldi r16,$ff
  16. out DDRB,r16
  17. out PORTB,r16
  18. ldi r17,(1<<USIWM0)|(0<<USICS0) ;need this otherwise msb not initially joined to D0
  19. out USICR,r17
  20. ldi r16,$a4
  21. rcall SPITransfer_Fast2
  22. ldi r16,$bf
  23. rcall SPITransfer_Fast2
  24.  
  25. ;rcall SPITransfer
  26. here:
  27. rcall oneSec
  28. rcall oneSec
  29. rcall oneSec
  30. rjmp again
  31.  
  32.  
  33.  
  34. ;-----------------------------------
  35. SPITransfer_Fast2:
  36. out USIDR,r16
  37. ;fin2:
  38. ;rjmp fin2
  39. ;ldi r16,(1<<USIWM0)|(0<<USICS0)|(1<<USITC)
  40. ldi r17,(1<<USIWM0)|(0<<USICS0)|(1<<USITC)|(1<<USICLK)
  41. ldi r18,8
  42. upt2:
  43. ;out USICR,r16 ; MSB
  44. rcall oneBitTime
  45. ;rcall oneSec
  46. ;rjmp upt2
  47. out USICR,r17
  48. up3:
  49. ;rjmp up3
  50. dec r18
  51. brne upt2
  52.  
  53. ret
  54. ;---------------------------------------
  55.  
  56. halfBitTime: ;better name for this delay. Half of 1/600
  57. ;myDelay1200:
  58. ;ldi r21,13 ; 13 works for m328 at 16Mhz
  59. push r20
  60. push r21
  61. ldi r21,7 ;try 7 for tiny85 at 8Hmz
  62. ldi r20,130 ;r20,21 at 130,7 give 833uS. Good for 600baud at 8Mhz
  63. starthbt:
  64. inc r20
  65. nop
  66. brne starthbt
  67. dec r21
  68. brne starthbt
  69. pop r21
  70. pop r20
  71. ret
  72. ;--------------------------------------------------
  73. oneBitTime:
  74. rcall halfBitTime
  75. rcall halfBitTime
  76. ret
  77. ;---------------------------------
  78. delay100ms: ;handy; delay for about 0.1 sec = 100 ms
  79. ;header endif_1,10,"delay100ms"
  80. ;delay100ms:
  81. ;.ifdef testing
  82. ; ldi r16,1
  83. ;.else
  84. push r16
  85. ldi r16,60
  86. .;endif
  87. upd100:
  88. rcall oneBitTime
  89. dec r16
  90. brne upd100
  91. pop r16
  92. ret ;after about a tenth of a second
  93. ;------------------------
  94. oneSec:
  95. ;jmp finsec ;take out when not simulating
  96. push r17
  97. ldi r17,5
  98. upones:
  99. rcall delay100ms
  100. dec r17
  101. brne upones
  102. pop r17
  103. finsec:
  104. ret
  105. ;-----------------------------------
  106. reverseBits: ;r16 gets reversed
  107. push r17
  108. push r18
  109. ldi r18,8
  110. ;ldi r16,$a6
  111. ldi r17,0
  112. uprb:
  113.  
  114. lsl r16
  115. ror r17
  116. dec r18
  117. brne uprb
  118. uprb2:
  119. mov r16,r17
  120. pop r18
  121. pop r17
  122. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement