


















































Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Community
Ask the community for help and clear up your study doubts
Discover the best universities in your country according to Docsity users
Free resources
Download our free guides on studying techniques, anxiety management strategies, and thesis advice from Docsity tutors
Material Type: Exam; Professor: Kuyath; Class: Assembly-Language Programming; Subject: Electrical Engineering Tech; University: University of North Carolina - Charlotte; Term: Unknown 1989;
Typology: Exams
1 / 58
This page cannot be seen from the preview
Don't miss anything!
1
2
4
The #include commands instruct the compiler to include these files as part of the overall program when compiling The Mega8515.h file includes all of the definitions for labels as well as port addresses. The stdio.h file includes functions such as printf and scanf
5
For the Atmega128, we have to change this to Mega128 – but, the Atmega128 does not have the UART initialized below
7
The #define commands instructs the compiler to equate these values with the labels “baud” and “xtal”. They are used in the program
8
These variables are global because they are declared outside the main() function first, second, third, seed, and count are declared as char (8-bit unsigned integers). delay is declared as an int , a 16- bit unsigned integer
10
It first initializes Port A and Port B
11
It first initializes Port A and Port B and then initializes the UART
13 The main program is contained in the while (1) { } loop structure: it mean run forever while (1) { // do forever.. while (PINA.0) // Wait for a button and seed++; // let the counter roll over and // over to form a seed. first = second = third = seed; // preload the columns do { // mix up the numbers // while waiting for button release. first ^= seed>>1; // Exclusive ORing in the moving seed second^= seed>>2; // can really stir up the numbers. third ^= seed>>3; seed++; // keep rolling over the seed pattern } while (PINA.0 == 0); // while the button is pressed for (count = 0; count < 5; count++) { // flash light when done.. for (delay = 0; delay < 10000; delay++) ; // just count up and wait PORTB.1 = 0; // turn the LED on.. for (delay = 0; delay < 10000; delay++) ; PORTB.1 = 1; // turn the LED off.. } first &= 3; // limit number to values from 0 to 3 second &= 3; third &= 3; printf("--> %d, %d ,%d <--\n",first, second, third); // show the values.. // determine a payout.. if((first == 3) && (second == 3) && (third == 3)) printf("Paid out: JACKPOT!!\n"); // all "cherries" else if((first == 3) || (second == 3) || (third == 3)) printf("Paid out: One Dime\n"); // if any are "cherries".. else if((first == second) && (second == third)) printf("Paid out: One Nickle\n"); // if three are alike, of any kind.. else printf("Paid out: ZERO\n"); // otherwise -- you lose.. } } This brace goes with main ( )
14 This while loop is made up of these two instructions while (1) { // do forever.. while (PINA.0) // Wait for a button and seed++; // let the counter roll over and // over to form a seed. first = second = third = seed; // preload the columns do { // mix up the numbers // while waiting for button release. first ^= seed>>1; // Exclusive ORing in the moving seed second^= seed>>2; // can really stir up the numbers. third ^= seed>>3; seed++; // keep rolling over the seed pattern } while (PINA.0 == 0); // while the button is pressed for (count = 0; count < 5; count++) { // flash light when done.. for (delay = 0; delay < 10000; delay++) ; // just count up and wait PORTB.1 = 0; // turn the LED on.. for (delay = 0; delay < 10000; delay++) ; PORTB.1 = 1; // turn the LED off.. } first &= 3; // limit number to values from 0 to 3 second &= 3; third &= 3; printf("--> %d, %d ,%d <--\n",first, second, third); // show the values.. // determine a payout.. if((first == 3) && (second == 3) && (third == 3)) printf("Paid out: JACKPOT!!\n"); // all "cherries" else if((first == 3) || (second == 3) || (third == 3)) printf("Paid out: One Dime\n"); // if any are "cherries".. else if((first == second) && (second == third)) printf("Paid out: One Nickle\n"); // if three are alike, of any kind.. else printf("Paid out: ZERO\n"); // otherwise -- you lose.. } }
16 When the button is pushed, the program will execute this assignment statement……. while (1) { // do forever.. while (PINA.0) // Wait for a button and seed++; // let the counter roll over and // over to form a seed. first = second = third = seed; // preload the columns do { // mix up the numbers // while waiting for button release. first ^= seed>>1; // Exclusive ORing in the moving seed second^= seed>>2; // can really stir up the numbers. third ^= seed>>3; seed++; // keep rolling over the seed pattern } while (PINA.0 == 0); // while the button is pressed for (count = 0; count < 5; count++) { // flash light when done.. for (delay = 0; delay < 10000; delay++) ; // just count up and wait PORTB.1 = 0; // turn the LED on.. for (delay = 0; delay < 10000; delay++) ; PORTB.1 = 1; // turn the LED off.. } first &= 3; // limit number to values from 0 to 3 second &= 3; third &= 3; printf("--> %d, %d ,%d <--\n",first, second, third); // show the values.. // determine a payout.. if((first == 3) && (second == 3) && (third == 3)) printf("Paid out: JACKPOT!!\n"); // all "cherries" else if((first == 3) || (second == 3) || (third == 3)) printf("Paid out: One Dime\n"); // if any are "cherries".. else if((first == second) && (second == third)) printf("Paid out: One Nickle\n"); // if three are alike, of any kind.. else printf("Paid out: ZERO\n"); // otherwise -- you lose.. } }
17 Then the for loops are executed to blink the LED. PORTB.1 =0, instructs the program to make pin 1 of PORTB low, turning the LED on. PORTB.1 =1, instructs the program to make pin 1 of PORTB high, turning the LED off. while (1) { // do forever.. while (PINA.0) // Wait for a button and seed++; // let the counter roll over and // over to form a seed. first = second = third = seed; // preload the columns do { // mix up the numbers // while waiting for button release. first ^= seed>>1; // Exclusive ORing in the moving seed second^= seed>>2; // can really stir up the numbers. third ^= seed>>3; seed++; // keep rolling over the seed pattern } while (PINA.0 == 0); // while the button is pressed for (count = 0; count < 5; count++) { // flash light when done.. for (delay = 0; delay < 10000; delay++) ; // just count up and wait PORTB.1 = 0; // turn the LED on.. for (delay = 0; delay < 10000; delay++) ; PORTB.1 = 1; // turn the LED off.. } first &= 3; // limit number to values from 0 to 3 second &= 3; third &= 3; printf("--> %d, %d ,%d <--\n",first, second, third); // show the values.. // determine a payout.. if((first == 3) && (second == 3) && (third == 3)) printf("Paid out: JACKPOT!!\n"); // all "cherries" else if((first == 3) || (second == 3) || (third == 3)) printf("Paid out: One Dime\n"); // if any are "cherries".. else if((first == second) && (second == third)) printf("Paid out: One Nickle\n"); // if three are alike, of any kind.. else printf("Paid out: ZERO\n"); // otherwise -- you lose.. } }
19 The remainder of this program will have no effect because we don’t have any output device connected (or simulated) while (1) { // do forever.. while (PINA.0) // Wait for a button and seed++; // let the counter roll over and // over to form a seed. first = second = third = seed; // preload the columns do { // mix up the numbers // while waiting for button release. first ^= seed>>1; // Exclusive ORing in the moving seed second^= seed>>2; // can really stir up the numbers. third ^= seed>>3; seed++; // keep rolling over the seed pattern } while (PINA.0 == 0); // while the button is pressed for (count = 0; count < 5; count++) { // flash light when done.. for (delay = 0; delay < 10000; delay++) ; // just count up and wait PORTB.1 = 0; // turn the LED on.. for (delay = 0; delay < 10000; delay++) ; PORTB.1 = 1; // turn the LED off.. } first &= 3; // limit number to values from 0 to 3 second &= 3; third &= 3; printf("--> %d, %d ,%d <--\n",first, second, third); // show the values.. // determine a payout.. if((first == 3) && (second == 3) && (third == 3)) printf("Paid out: JACKPOT!!\n"); // all "cherries" else if((first == 3) || (second == 3) || (third == 3)) printf("Paid out: One Dime\n"); // if any are "cherries".. else if((first == second) && (second == third)) printf("Paid out: One Nickle\n"); // if three are alike, of any kind.. else printf("Paid out: ZERO\n"); // otherwise -- you lose.. } }
20