代做ESE 123 Prelab 9 Stopwatch代做留学生SQL 程序

ESE 123

Prelab 9

Stopwatch

Objec&ves:

In this prelab we will:

Learn how to divide integer numbers

Learn about IF condi@onal construct in C

Learn how to write code to read pushbuBons

Integer division:

C  is  a typed  language  −  numbers  can  be  of  an  integral  type  (i.e.  integers  in  all  their various flavors − char, int, long, etc.), or of a floa@ng point type (float, double, and the like). The ‘/‘ division operator acts differently depending on its arguments. If at least one argument is a floa@ng point number, the ‘/‘ operator will return a floa@ng point results. For instance 5.2 / 4 would return a floa@ng point result (1.3) because 5.2 is a float.

Recall that most numbers can not be represented perfectly as floa@ng point numbers. For instance, 1/3 cannot be represented perfectly as a finite length decimal number. The closest we can do is 0.333 where the bar indicates repea@ng digits. Not so obvious is that  1/5 can  be  perfectly  represented as a decimal  number (0.2), but not as a binary float  (0.00110011).  The  closest  representa@on  of  0.2  in  a  32  bit  binary float is

0.20000000298023223876953125. This means that:

5/1 × 5

Is not going to be exactly equal to 1. This can cause real problems in programming where you might have a loop that increments by 0.2 each @me and you expect the result to be exactly equal to 1 a\er five passes. Addi@onally, floa@ng point numbers take more space to store and take longer to process than integers.

There are advantages to handling the division of integers exactly. That is why C includes two  mathema@cal  operators  for  integer  division: integer  division produces  an  integer quo@ent and the modulo func&on returns the remainder of a division.

Integer division means that the dividend is divided by the divisor and any frac@onal part is simply thrown away.  15/3  is  5  in  integer  division,  but  16/3  and  17/3  are  also  5  in integer division.

The modulo func@on, denoted by the ‘%’ operator ignores the quo@ent, but returns the remainder. 15%3 is 0 because there is no remainder. 16%3 is 1, 17%3 is 2, and 18%3 is back to 0.

We have seen that the ‘/‘ operator returns a float if either argument is a float. If both arguments are integral types the ‘/‘ operator performs integer division.

Checking bu:ons:

A look at the schema@c diagram at the end of this document shows three buBons SW1 (labeled  UP),  SW2  (OK),  and  SW3  (DOWN). These  are all connected to  PORTE  of the microcontroller. We have set up the microcontroller to make these inputs with a weak pull-up.  This   means  that  there   is   a   resistor   connected   internally   to   +5V   in  the microcontroller so that the input will read as a logical 1 if nothing else is going on.

However, pushing the buBons can change that. The buBons are configured to short the input to ground thus forcing the input to a logical 0.

The switches are connected to the three least significant bits of PORTE: PE2 (DOWN), PE1 (OK), and  PE0  (UP). We wish to check the condi@on of one switch at a @me and ignore the other bits of PORTE.

A two input AND logical func@on takes two bits in and generates one bit out. The output bit is TRUE (logical 1) if both of the inputs are TRUE. If any input is FALSE (logical 0) the output is FALSE.

The arithme@c logic unit (ALU) on our chip is 8 bits wide. That means that it contains 8 separate AND gates. Each AND gate takes one input from one operand and the other from the corresponding bit of the other operand.

Say we want to see if the  UP  buBon  is  pressed. This  is  connected to  PE0 − the  least significant bit of PORTE. If it is pressed PE0 will be a logical 0. If it is not pressed PE0 will be a logical 1.

If the UP buBon is pressed (PORTE_IN bit 0 is low) and we perform. this AND opera@on:

PORTE_IN 0b11011110

AND 0b00000001

0b00000000

The result is zero. Now suppose the buBon is the released and PORTE_IN bit 0 will be high:

PORTE_IN 0b11011111

AND 0b00000001

0b00000001

There are the only two possibili@es if we AND with PORTE_IN with 0b00000001. Zero if the buBon is presses and non-zero if it is released. The other bits of PORTE_IN have no bearing on the result.

This is called masking and it allows us to use the AND opera@on to ignore everything except for the bit or bits that interest us. If we were interested in isola@ng the OK buBon (PORTE_IN  bit  1)  we  would  AND  PORTE_IN  with  0b00000010  and  the  result  would strictly depend on the OK buBon − we would get 0b00000000 if the buBon was pressed and 0b00000010 if not.

In  C  the  bitwise  AND  operator  is  denoted  with  a  single  & symbol  (the  logical  AND operator is denoted with two && symbols). The C code to mask the OK buBon would be:

PORTE_IN & 0b00000010

IF structure:

C can make decisions. You might want to check for equality in an IF structure. In this case you’ll need the ‘==‘ operator. In C the ‘=‘ operator is an assignment operator (it takes the data on its right side and stores it into the memory loca@on on the le\ side). The ‘==‘ is a rela@onal operator, it returns TRUE if the things on its right and le\ sides have the same value. If we wanted to check to see if a variable called test is equal to one:

There are @mes where you may need an ELSE clause. The code following the ELSE

executes only if the preceding IF was NOT performed. This allows us to run different

code depending on the state of something. In this example, we are checking to see if a buBon is pressed:

In this case we are checking the status of the UP buBon (PE0). PORTE_IN is ANDed with 0b00000001 so that only the rightmost bit of PORTE_IN (PE0) has any effect. If this

buBon is pressed the code following the IF will run. The ELSE code will run if the buBon is released. The ELSE code is op@onal.

You can test for OK buBon presses by just ANDing with a different constant. Use 0b00000010 for the OK buBon and 0b00000100 for the DOWN buBon.

You may place any C statement inside an IF statement.  This includes … other IF statements.  Consider the example below:

In the example above, the IF statement for b is inside the IF statement for a.   If a is not equal to 1, the value of b will not be checked.   If a is equal to 1, then if b is checked and, if it is equal to 1, the code in the nested IF statement will run.  This arrangement is useful if you want something to happen only if two condi@ons are TRUE.   If either a or b is not equal to 1, nothing happens.

Report:

Write a report with the answers to the following ques@ons:

1. What is 75 / 54 using integer division? (2 points)

2. What is 75 % 54? (2 points)

3. The modulo operator can be useful in an IF statement. Imagine that char variable X  has already been declared. Write an IF statement that subtracts 1 from X if X is odd. Note that X%2 will be 1 if X is odd and 0 if X is even. (4 points)

4. Con@nuing with the previous ques@on, write an IF…ELSE statement that adds 2 to X if X is even, and subtracts 1 if X is odd. (4 points)

5. Write C masking code that will return a 0 if the DOWN buBon is pressed, and anything else if it is released (see the schema@c diagram at the end this document). (2 points)

6. Assume a char variable called hr has been declared. Write a C IF statement that subtracts 1 from hr if the DOWN buBon is pressed. (4 points)


热门主题

课程名

mktg2509 csci 2600 38170 lng302 csse3010 phas3226 77938 arch1162 engn4536/engn6536 acx5903 comp151101 phl245 cse12 comp9312 stat3016/6016 phas0038 comp2140 6qqmb312 xjco3011 rest0005 ematm0051 5qqmn219 lubs5062m eee8155 cege0100 eap033 artd1109 mat246 etc3430 ecmm462 mis102 inft6800 ddes9903 comp6521 comp9517 comp3331/9331 comp4337 comp6008 comp9414 bu.231.790.81 man00150m csb352h math1041 eengm4100 isys1002 08 6057cem mktg3504 mthm036 mtrx1701 mth3241 eeee3086 cmp-7038b cmp-7000a ints4010 econ2151 infs5710 fins5516 fin3309 fins5510 gsoe9340 math2007 math2036 soee5010 mark3088 infs3605 elec9714 comp2271 ma214 comp2211 infs3604 600426 sit254 acct3091 bbt405 msin0116 com107/com113 mark5826 sit120 comp9021 eco2101 eeen40700 cs253 ece3114 ecmm447 chns3000 math377 itd102 comp9444 comp(2041|9044) econ0060 econ7230 mgt001371 ecs-323 cs6250 mgdi60012 mdia2012 comm221001 comm5000 ma1008 engl642 econ241 com333 math367 mis201 nbs-7041x meek16104 econ2003 comm1190 mbas902 comp-1027 dpst1091 comp7315 eppd1033 m06 ee3025 msci231 bb113/bbs1063 fc709 comp3425 comp9417 econ42915 cb9101 math1102e chme0017 fc307 mkt60104 5522usst litr1-uc6201.200 ee1102 cosc2803 math39512 omp9727 int2067/int5051 bsb151 mgt253 fc021 babs2202 mis2002s phya21 18-213 cege0012 mdia1002 math38032 mech5125 07 cisc102 mgx3110 cs240 11175 fin3020s eco3420 ictten622 comp9727 cpt111 de114102d mgm320h5s bafi1019 math21112 efim20036 mn-3503 fins5568 110.807 bcpm000028 info6030 bma0092 bcpm0054 math20212 ce335 cs365 cenv6141 ftec5580 math2010 ec3450 comm1170 ecmt1010 csci-ua.0480-003 econ12-200 ib3960 ectb60h3f cs247—assignment tk3163 ics3u ib3j80 comp20008 comp9334 eppd1063 acct2343 cct109 isys1055/3412 math350-real math2014 eec180 stat141b econ2101 msinm014/msing014/msing014b fit2004 comp643 bu1002 cm2030
联系我们
EMail: 99515681@qq.com
QQ: 99515681
留学生作业帮-留学生的知心伴侣!
工作时间:08:00-21:00
python代写
微信客服:codinghelp
站长地图