Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;***********************************************************
  2. ;*
  3. ;*  Enter Name of file here
  4. ;*
  5. ;*  Enter the description of the program here
  6. ;*
  7. ;*  This is the skeleton file Lab 5 of ECE 375
  8. ;*
  9. ;** *********************************************************
  10. ;*
  11. ;*   Author: Enter your name
  12. ;*     Date: Enter Date
  13. ;*
  14. ;***********************************************************
  15.  
  16. .include "m128def.inc"          ; Include definition file
  17.  
  18. ;***********************************************************
  19. ;*  Internal Register Definitions and Constants
  20. ;***********************************************************
  21. .def    mpr = r16               ; Multi-Purpose Register
  22. .def    button_reg = r17        ; Register for button input
  23. .def    USART_reg = r20         ; Register for USART
  24. .def    zero = r21
  25.  
  26. .equ    EngEnR = 4              ; Right Engine Enable Bit
  27. .equ    EngEnL = 7              ; Left Engine Enable Bit
  28. .equ    EngDirR = 5             ; Right Engine Direction Bit
  29. .equ    EngDirL = 6             ; Left Engine Direction Bit
  30.  
  31.  
  32. ; Use these commands between the remote and TekBot
  33. ; MSB = 1 thus:
  34. ; commands are shifted right by one and ANDed with 0b10000000 = $80
  35. .equ    MovFwd =  ($80|1<<(EngDirR-1)|1<<(EngDirL-1));0b10110000 Move Forwards Command
  36. .equ    MovBck =  ($80|$00)                          ;0b10000000 Move Backwards Command
  37. .equ    TurnR =   ($80|1<<(EngDirL-1))               ;0b10100000 Turn Right Command
  38. .equ    TurnL =   ($80|1<<(EngDirR-1))               ;0b10010000 Turn Left Command
  39. .equ    Halt =    ($80|1<<(EngEnR-1)|1<<(EngEnL-1))  ;0b11001000 Halt Command
  40. .equ    FreezRemote =   (0b11111000)                             ;0b11111000 Freez Remote Command
  41. .equ    FreezTag = (0b01010101)                      ;0b01010101
  42.  
  43.  
  44.  
  45. ;/////////////////////////////////////////////////////////////
  46. ;Buttons on Mega128 Board
  47. ;/////////////////////////////////////////////////////////////
  48. .equ    BUTTON_S1 = 0b00000001
  49. .equ    BUTTON_S2 = 0b00000010
  50. .equ    BUTTON_S3 = 0b00000100
  51. .equ    BUTTON_S4 = 0b00001000
  52. .equ    BUTTON_S5 = 0b00010000
  53. .equ    BUTTON_S6 = 0b00100000
  54. .equ    BUTTON_S7 = 0b01000000
  55. .equ    BUTTON_S8 = 0b10000000
  56.  
  57.  
  58. ;/////////////////////////////////////////////////////////////
  59. ;USART register values
  60. ;/////////////////////////////////////////////////////////////
  61. .equ    BAUD_UBRR_HIGH  = high(832)     ;Baud 2400 --> 832 = $0340 via page 197 of Mega128 datasheet
  62. .equ    BAUD_UBRR_LOW   = low(832)
  63.  
  64. ;/////////////////////////////////////////////////////////////
  65. ;Unique TekBot ID
  66. ;/////////////////////////////////////////////////////////////
  67. .equ    TekBot_ID = 0b01110010  ; Our totally random TekBot ID
  68.  
  69. ;***********************************************************
  70. ;*  Start of Code Segment
  71. ;***********************************************************
  72. .cseg                           ; Beginning of code segment
  73.  
  74. ;-----------------------------------------------------------
  75. ; Interrupt Vectors
  76. ;-----------------------------------------------------------
  77. .org    $0000                   ; Beginning of IVs
  78.         rjmp    INIT            ; Reset interrupt
  79.  
  80.  
  81. .org    $0046                   ; End of Interrupt Vectors
  82.  
  83. ;-----------------------------------------------------------
  84. ; Program Initialization
  85. ;-----------------------------------------------------------
  86. INIT:
  87.     ;Stack Pointer (VERY IMPORTANT!!!!)
  88.     ; Initialize Stack Pointer
  89.     ldi     mpr, low(RAMEND)
  90.     out     SPL, mpr    ; Load SPL with low byte of RAMEND
  91.     ldi     mpr, high(RAMEND)
  92.     out     SPH, mpr    ; Load SPH with high byte of RAMEND
  93.  
  94.     ;I/O Ports
  95.     ; Initialize Port B for output
  96.     ldi     mpr, $00        ; Initialize Port B for outputs
  97.     out     PORTB, mpr      ; Port B outputs low
  98.     ldi     mpr, $ff        ; Set Port B Directional Register
  99.     out     DDRB, mpr       ; for output
  100.  
  101.     ; Initialize Port D for inputs
  102.     ldi     mpr, $FF        ; Initialize Port D for inputs
  103.     out     PORTD, mpr      ; with Tri-State
  104.     ldi     mpr, $00        ; Set Port D Directional Register
  105.     out     DDRD, mpr       ; for inputs
  106.  
  107.     ;USART1
  108.         ;Set baudrate at 2400bps
  109.         ;Enable transmitter
  110.         ;Set frame format: 8data, 2stop bit
  111.  
  112. USART_Init:
  113.         ; Baudrate = 2400
  114.         ; 2400 --> UBRR = 416 by table on page 197 in Mega128 datasheet
  115.         ; Set baud rate
  116.         ldi     mpr,    BAUD_UBRR_HIGH
  117.         sts     UBRR1H,     mpr
  118.         ldi     mpr,    BAUD_UBRR_LOW
  119.         sts     UBRR1L,     mpr
  120.         ldi     mpr,    (1<<U2X1)
  121.         sts     UCSR1A, mpr
  122.  
  123.         ; Enable receiver and transmitter
  124.         ldi     mpr,    (0<<RXEN1)|(1<<TXEN1)       ;0 for receive, but 1 for transmit
  125.         sts     UCSR1B, mpr
  126.         ; Set frame format: 8data, 2stop bit
  127.         ldi     mpr,    (1<<USBS1)|(1<<UCSZ10)|(1<<UCSZ11)
  128.         sts     UCSR1C, mpr
  129.  
  130.     ;Other
  131.     clr zero
  132.  
  133. ;-----------------------------------------------------------
  134. ; Main Program
  135. ;-----------------------------------------------------------
  136. MAIN:
  137.     ; Pull in button pushes and display on onboard leds
  138.     in      button_reg, PIND
  139.     mov     mpr,    button_reg
  140.     com     mpr
  141.     out     PORTB,  mpr
  142.  
  143.     mov     mpr,    button_reg
  144.     andi    mpr,    BUTTON_S8
  145.     breq    BS8
  146.  
  147.     mov     mpr,    button_reg
  148.     andi    mpr,    BUTTON_S7
  149.     breq    BS7
  150.    
  151.     mov     mpr,    button_reg
  152.     andi    mpr,    BUTTON_S6
  153.     breq    BS6
  154.    
  155.     mov     mpr,    button_reg
  156.     andi    mpr,    BUTTON_S5
  157.     breq    BS5
  158.  
  159.  
  160.     mov     mpr,    button_reg
  161.     andi    mpr,    BUTTON_S2
  162.     breq    BS2
  163.    
  164.     mov     mpr,    button_reg
  165.     andi    mpr,    BUTTON_S1
  166.     breq    BS1
  167.  
  168.     rjmp    MAIN
  169.  
  170. BS8: ; Freez
  171.     ldi     USART_reg,  TekBot_ID
  172.     rcall   USART_Transmit
  173.     ldi     USART_reg,  FreezRemote
  174.     rcall   USART_Transmit
  175.     rjmp    DONE
  176. BS7: ; Halt
  177.     ldi     USART_reg,  TekBot_ID
  178.     rcall   USART_Transmit
  179.     ldi     USART_reg,  Halt
  180.     rcall   USART_Transmit
  181.     rjmp    DONE
  182.  
  183. BS6: ; Turn Right
  184.     ldi     USART_reg,  TekBot_ID
  185.     rcall   USART_Transmit
  186.     ldi     USART_reg,  TurnR
  187.     rcall   USART_Transmit
  188.     rjmp    DONE
  189.  
  190. BS5: ; Turn Left
  191.     ldi     USART_reg,  TekBot_ID
  192.     rcall   USART_Transmit
  193.     ldi     USART_reg,  TurnL
  194.     rcall   USART_Transmit
  195.     rjmp    DONE
  196.  
  197. BS4: ; FREEZ Command
  198.     ldi     USART_reg,  TekBot_ID
  199.     rcall   USART_Transmit
  200.     ldi     USART_reg,  FreezTag
  201.     rcall   USART_Transmit
  202.     rjmp    DONE
  203.        
  204. BS2: ; Move Forward
  205.     ldi     USART_reg,  TekBot_ID
  206.     rcall   USART_Transmit
  207.     ldi     USART_reg,  MovFwd
  208.     rcall   USART_Transmit
  209.     rjmp    DONE
  210.    
  211. BS1: ;  Move Backward
  212.     ldi     USART_reg,  TekBot_ID
  213.     rcall   USART_Transmit
  214.     ldi     USART_reg,  MovBck
  215.     rcall   USART_Transmit
  216.     rjmp    DONE
  217.  
  218. DONE:
  219.     rjmp    MAIN
  220.  
  221.  
  222. ;***********************************************************
  223. ;*  Functions and Subroutines
  224. ;***********************************************************
  225. USART_Transmit:
  226.  
  227.     ; Wait for empty transmit buffer
  228.     lds     mpr,    UCSR1A
  229.     sbrs    mpr,    UDRE1
  230.     rjmp    USART_Transmit
  231.    
  232.     ; Put data (USART_reg) into buffer, sends the data
  233.     sts     UDR1,   USART_reg
  234.    
  235.     ret
  236.  
  237. ;***********************************************************
  238. ;*  Stored Program Data
  239. ;***********************************************************
  240.  
  241.  
  242.  
  243. ;***********************************************************
  244. ;*  Additional Program Includes
  245. ;***********************************************************
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement