Write a python code that 1 The time it takes for the object
Write a python code that: 1. The time it takes for the object to reach the target. 2. The magnitude and direction of the velocity when the object reaches the target distance. 3. The height of the object when it reaches the target distance. 4. Whether the object hits the structure, the toss is too short, or the toss is too long.
Solution
/* ; Studio vi handles this by default
 ;.nolist
 ;.include \"m328def.inc\"
 ;.list
 */
.equ fclk = 16000000 ; system clock frequency (for delays)
; register usage
 .def temporary worker = R16 ; temporary storage
; LCD interface (should accept as true with the diagram above)
 ; confirm that the LCD RW pin is connected to GND
 .equ LCD_D7_port = PORTD ; lcd D7 association
 .equ lcd_D7_bit = PORTD7
 .equ lcd_D7_ddr = DDRD
.equ LCD_D6_port = PORTD ; lcd D6 association
 .equ lcd_D6_bit = PORTD6
 .equ lcd_D6_ddr = DDRD
.equ LCD_D5_port = PORTD ; lcd D5 association
 .equ lcd_D5_bit = PORTD5
 .equ lcd_D5_ddr = DDRD
.equ LCD_D4_port = PORTD ; lcd D4 association
 .equ lcd_D4_bit = PORTD4
 .equ lcd_D4_ddr = DDRD
.equ LCD_E_port = PORTB ; lcd modify pin
 .equ lcd_E_bit = PORTB1
 .equ lcd_E_ddr = DDRB
.equ LCD_RS_port = PORTB ; lcd Register choose pin
 .equ lcd_RS_bit = PORTB0
 .equ lcd_RS_ddr = DDRB
; LCD module info
 .equ lcd_LineOne = 0x00 ; begin of line one
 .equ lcd_LineTwo = 0x40 ; begin of line a pair of
 ;.equ lcd_LineThree = 0x14 ; begin of line three (20x4)
 ;.equ lcd_lineFour = 0x54 ; begin of line four (20x4)
 ;.equ lcd_LineThree = 0x10 ; begin of line three (16x4)
 ;.equ lcd_lineFour = 0x50 ; begin of line four (16x4)
; LCD directions
 .equ lcd_Clear = 0b00000001 ; replace all characters with computer code \'space\'
 .equ lcd_Home = 0b00000010 ; come back pointer to 1st position on 1st line
 .equ lcd_EntryMode = 0b00000110 ; shift pointer from left to right read/write
 .equ lcd_DisplayOff = 0b00001000 ; flip show off
 .equ lcd_DisplayOn = 0b00001100 ; show on, cursor off, do not blink character
 .equ lcd_FunctionReset = 0b00110000 ; reset the LCD
 .equ lcd_FunctionSet4bit = 0b00101000 ; 4-bit information, 2-line show, 5 x 7 font
 .equ lcd_SetCursor = 0b10000000 ; set pointer position
; ****************************** Reset Vector *******************************
 .org 0x0000
 jmp begin ; miss Interrupt Vectors, Program ID etc.
;******************************* Program ID *********************************
 .org INT_VECTORS_SIZE
program_author:
 .db \"Donald Weiman\",0
program_version:
 .db \"LCD-AVR-4d (asm)\",0,0
program_date:
 .db \"Sep eight, 2013\",0
; ****************************** Main Program Code **************************
 start:
 ; initialize the stack pointer to the very best RAM address
 ldi temporary worker,low(RAMEND)
 out SPL,temp
 ldi temporary worker,high(RAMEND)
 out SPH,temp
; tack the microchip pins for the info lines
 sbi lcd_D7_ddr, lcd_D7_bit ; four information lines - output
 sbi lcd_D6_ddr, lcd_D6_bit
 sbi lcd_D5_ddr, lcd_D5_bit
 sbi lcd_D4_ddr, lcd_D4_bit
; tack the microchip pins for the management lines
 sbi lcd_E_ddr, lcd_E_bit ; E line - output
 sbi lcd_RS_ddr, lcd_RS_bit ; RS line - output
; initialize the LCD controller as determined by the equates (LCD instructions)
 decision lcd_init_4d ; initialize the {lcd|liquid crystal show|LCD|digital display|alphanumeric display} display for a 4-bit interface
; show the primary line of knowledge
 ldi ZH, high(program_author) ; purpose to the data that\'s to be displayed
 ldi ZL, low(program_author)
 ldi temporary worker, lcd_LineOne ; purpose to wherever the data ought to be displayed
 decision lcd_write_string_4d
; show the second line of knowledge
 ldi ZH, high(program_version) ; purpose to the data that\'s to be displayed
 ldi ZL, low(program_version)
 ldi temporary worker, lcd_LineTwo ; purpose to wherever the data ought to be displayed
 decision lcd_write_string_4d
; endless loop
 here:
 rjmp here
; ****************************** finish of Main Program Code *******************
; ============================== 4-bit LCD Subroutines ======================
 ; Name: lcd_init_4d
 ; Purpose: initialize the LCD module for a 4-bit information interface
 ; Entry: equates (LCD instructions) established for the required operation
 ; Exit: no parameters
 ; Notes: uses time delays rather than checking the busy flag
lcd_init_4d:
 ; Power-up delay
 ldi temporary worker, one hundred ; initial forty millisecond delay
 decision delayTx1mS
; necessary - At this time the LCD module is within the 8-bit mode and it\'s expecting to receive
 ; eight bits of information, one bit on every of its eight information lines, when the \'E\' line is periodical.
 ;
 ; Since the LCD module is wired for the 4-bit mode, solely the higher four information lines area unit connected to
 ; the microchip and therefore the lower four information lines area unit usually left open. Therefore, when
 ; the \'E\' line is periodical, the LCD controller can scan no matter information has been established on the higher
 ; four information lines and therefore the lower four information lines are high (due to internal pull-up circuitry).
 ;
 ; as luck would have it the \'FunctionReset\' instruction doesn\'t care regarding what\'s on the lower four bits therefore
 ; this instruction is sent on simply the four out there information lines and it\'ll be taken
 ; properly by the LCD controller. The \'lcd_write_4\' subprogram can accomplish this if the
 ; management lines have antecedently been designed properly.
; established the RS and E lines for the \'lcd_write_4\' subprogram.
 cbi lcd_RS_port, lcd_RS_bit ; choose the Instruction Register (RS low)
 cbi lcd_E_port, lcd_E_bit ; confirm E is at the start low
; Reset the LCD controller.
 ldi temporary worker, lcd_FunctionReset ; 1st a part of reset sequence
 decision lcd_write_4
 ldi temporary worker, ten ; four.1 mS delay (min)
 decision delayTx1mS
ldi temporary worker, lcd_FunctionReset ; second a part of reset sequence
 decision lcd_write_4
 ldi temporary worker, two hundred ; one hundred U.S.A. delay (min)
 decision delayTx1uS
ldi temporary worker, lcd_FunctionReset ; third a part of reset sequence
 decision lcd_write_4
 ldi temporary worker, two hundred ; this delay is omitted within the information sheet
 decision delayTx1uS
; Preliminary operate Set instruction - used solely to line the 4-bit mode.
 ; the quantity of lines or the font can not be set at this point since the controller continues to be within the
 ; 8-bit mode, however the info transfer mode is modified since this parameter is set by one
 ; of the higher four bits of the instruction.
 ldi temporary worker, lcd_FunctionSet4bit ; set 4-bit mode
 decision lcd_write_4
 ldi temporary worker, eighty ; forty U.S.A. delay (min)
 decision delayTx1uS
; operate Set instruction
 ldi temporary worker, lcd_FunctionSet4bit ; set mode, lines, and font
 decision lcd_write_instruction_4d
 ldi temporary worker, eighty ; forty U.S.A. delay (min)
 decision delayTx1uS
; ensuing 3 directions area unit laid out in the info sheet as a part of the data formatting routine,
 ; therefore it\'s a decent plan (but most likely not necessary) to try and do them even as mere so redo them
 ; later if the applying needs a distinct configuration.
; show On/Off management instruction
 ldi temporary worker, lcd_DisplayOff ; flip show OFF
 decision lcd_write_instruction_4d
 ldi temporary worker, eighty ; forty U.S.A. delay (min)
 decision delayTx1uS
; Clear show instruction
 ldi temporary worker, lcd_Clear ; clear show RAM
 decision lcd_write_instruction_4d
 ldi temporary worker, four ; one.64 mS delay (min)
 decision delayTx1mS
; Entry Mode Set instruction
 ldi temporary worker, lcd_EntryMode ; set desired shift characteristics
 decision lcd_write_instruction_4d
 ldi temporary worker, eighty ; forty U.S.A. delay (min)
 decision delayTx1uS
; this is often the tip of the LCD controller data formatting as laid out in the info sheet, however the show
 ; has been left within the OFF condition. this is often a decent time to show the show back ON.
; show On/Off management instruction
 ldi temporary worker, lcd_DisplayOn ; flip the show ON
 decision lcd_write_instruction_4d
 ldi temporary worker, eighty ; forty U.S.A. delay (min)
 decision delayTx1uS
 ret
; ---------------------------------------------------------------------------
  ; Name: lcd_write_string_4d
 ; Purpose: show a string of characters on the LCD
 ; Entry: ZH and ZL inform to the beginning of the string
 ; (temp) contains the required DDRAM address at that to start out the show
 ; Exit: no parameters
 ; Notes: the string should finish with a null (0)
 ; uses time delays rather than checking the busy flag
lcd_write_string_4d:
 ; preserve registers
 push ZH ; preserve pointer registers
 push ZL
; fix up the pointers to be used with the \'lpm\' instruction
 lsl ZL ; shift the pointer one bit left for the lpm instruction
 rol ZH
; established the initial DDRAM address
 ori temporary worker, lcd_SetCursor ; convert the plain address to a collection pointer instruction
 decision lcd_write_instruction_4d ; established the primary DDRAM address
 ldi temporary worker, eighty ; forty U.S.A. delay (min)
 decision delayTx1uS
; write the string of characters
 lcd_write_string_4d_01:
 lpm temporary worker, Z+ ; get a personality
 cpi temporary worker, zero ; check for finish of string
 breq lcd_write_string_4d_02 ; done
; arrive here if this is often a sound character
 decision lcd_write_character_4d ; show the character
 ldi temporary worker, eighty ; forty U.S.A. delay (min)
 decision delayTx1uS
 rjmp lcd_write_string_4d_01 ; not done, send another character
; arrive here once all characters within the message are sent to the LCD module
 lcd_write_string_4d_02:
 pop ZL ; restore pointer registers
 pop ZH
 ret
; ---------------------------------------------------------------------------
  ; Name: lcd_write_character_4d
 ; Purpose: send a computer memory unit {of information|of information|of knowledge} to the LCD data register
 ; Entry: (temp) contains the info computer memory unit
 ; Exit: no parameters
 ; Notes: doesn\'t cope with RW (busy flag isn\'t implemented)
lcd_write_character_4d:
 sbi lcd_RS_port, lcd_RS_bit ; choose the info Register (RS high)
 cbi lcd_E_port, lcd_E_bit ; confirm E is at the start low
 decision lcd_write_4 ; write the higher 4-bits of the info
 swap temporary worker ; swap high and low nibbles
 decision lcd_write_4 ; write the lower 4-bits of the info
 ret
; ---------------------------------------------------------------------------
  ; Name: lcd_write_instruction_4d
 ; Purpose: send a computer memory unit of knowledge to the LCD instruction register
 ; Entry: (temp) contains the info computer memory unit
 ; Exit: no parameters
 ; Notes: doesn\'t cope with RW (busy flag isn\'t implemented)
lcd_write_instruction_4d:
 cbi lcd_RS_port, lcd_RS_bit ; choose the Instruction Register (RS low)
 cbi lcd_E_port, lcd_E_bit ; confirm E is at the start low
 decision lcd_write_4 ; write the higher 4-bits of the instruction
 swap temporary worker ; swap high and low nibbles
 decision lcd_write_4 ; write the lower 4-bits of the instruction
 ret
; ---------------------------------------------------------------------------
  ; Name: lcd_write_4
 ; Purpose: send a nibble (4-bits) of knowledge to the LCD module
 ; Entry: (temp) contains a computer memory unit of information with the required 4-bits within the higher nibble
 ; (RS) is designed for the required LCD register
 ; (E) is low
 ; (RW) is low
 ; Exit: no parameters
 ; Notes: use either time delays or the busy flag
lcd_write_4:
 ; established D7
 sbi lcd_D7_port, lcd_D7_bit ; assume that the D7 information is \'1\'
 sbrs temporary worker, seven ; check the particular information worth
 cbi lcd_D7_port, lcd_D7_bit ; arrive here as long as the info was truly \'0\'
; established D6
 sbi lcd_D6_port, lcd_D6_bit ; repeat for every information bit
 sbrs temporary worker, 6
 cbi lcd_D6_port, lcd_D6_bit
; established D5
 sbi lcd_D5_port, lcd_D5_bit
 sbrs temporary worker, 5
 cbi lcd_D5_port, lcd_D5_bit
; established D4
 sbi lcd_D4_port, lcd_D4_bit
 sbrs temporary worker, 4
 cbi lcd_D4_port, lcd_D4_bit
; write the info
 ; \'Address set-up time\' (40 nS)
 sbi lcd_E_port, lcd_E_bit ; modify pin high
 decision delay1uS ; implement \'Data set-up time\' (80 nS) and \'Enable pulse width\' (230 nS)
 cbi lcd_E_port, lcd_E_bit ; modify pin low
 decision delay1uS ; implement \'Data hold time\' (10 nS) and \'Enable cycle time\' (500 nS)
 ret
; ============================== finish of 4-bit LCD Subroutines ===============
; ============================== Time Delay Subroutines =====================
 ; Name: delayYx1mS
 ; Purpose: give a delay of (YH:YL) x one mS
 ; Entry: (YH:YL) = delay information
 ; Exit: no parameters
 ; Notes: the 16-bit register provides for a delay of up to sixty five.535 Seconds
 ; needs delay1mS
delayYx1mS:
 decision delay1mS ; delay for one mS
 sbiw YH:YL, one ; update the the delay counter
 brne delayYx1mS ; counter isn\'t zero
; arrive here once delay counter is zero (total delay amount is finished)
 ret
; ---------------------------------------------------------------------------
  ; Name: delayTx1mS
 ; Purpose: give a delay of (temp) x one mS
 ; Entry: (temp) = delay information
 ; Exit: no parameters
 ; Notes: the 8-bit register provides for a delay of up to 255 mS
 ; needs delay1mS
delayTx1mS:
 decision delay1mS ; delay for one mS
 dec temporary worker ; update the delay counter
 brne delayTx1mS ; counter isn\'t zero
; arrive here once delay counter is zero (total delay amount is finished)
 ret
; ---------------------------------------------------------------------------
  ; Name: delay1mS
 ; Purpose: give a delay of one mS
 ; Entry: no parameters
 ; Exit: no parameters
 ; Notes: chews up fclk/1000 clock cycles (including the \'call\')
delay1mS:
 push YL ; [2] preserve registers
 push YH ; [2]
 ldi YL, low (((fclk/1000)-18)/4) ; [1] delay counter
 ldi YH, high(((fclk/1000)-18)/4) ; [1]
delay1mS_01:
 sbiw YH:YL, one ; [2] update the the delay counter
 brne delay1mS_01 ; [2] delay counter isn\'t zero
; arrive here once delay counter is zero
 pop YH ; [2] restore registers
 pop YL ; [2]
 dowse ; [4]
; ---------------------------------------------------------------------------
  ; Name: delayTx1uS
 ; Purpose: give a delay of (temp) x one U.S.A. with a sixteen megahertz clock frequency
 ; Entry: (temp) = delay information
 ; Exit: no parameters
 ; Notes: the 8-bit register provides for a delay of up to 255 U.S.A.
 ; needs delay1uS
delayTx1uS:
 decision delay1uS ; delay for one U.S.A.
 dec temporary worker ; decrement the delay counter
 brne delayTx1uS ; counter isn\'t zero
; arrive here once delay counter is zero (total delay amount is finished)
 ret
; ---------------------------------------------------------------------------
  ; Name: delay1uS
 ; Purpose: give a delay of one U.S.A. with a sixteen megahertz clock frequency
 ; Entry: no parameters
 ; Exit: no parameters
 ; Notes: add another push/pop for twenty megahertz clock frequency
delay1uS:
 push temporary worker ; [2] these directions do nothing except consume clock cycles
 pop temporary worker ; [2]
 push temporary worker ; [2]
 pop temporary worker ; [2]
 dowse ; [4]
; ============================== finish of your time Delay Subroutines ==============







