Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Convert these C++ codes into assembly language using Atmel Studio 7 #include #include LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE); //TEMP SENSOR const int sensor=A1; // Assigning analog pin A5

Convert these C++ codes into assembly language using Atmel Studio 7

#include #include

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);

//TEMP SENSOR const int sensor=A1; // Assigning analog pin A5 to variable 'sensor' float tempc; //variable to store temperature in degree Celsius float tempf; //variable to store temperature in Fahreinheit float vout; //temporary variable to hold sensor reading

//FLOWRATE byte statusLed = 13; byte sensorInterrupt = 0; // 0 = digital pin 2 byte sensorPin = 2; float calibrationFactor = 4.5; volatile byte pulseCount; float flowRate; unsigned int flowMilliLitres; unsigned long totalMilliLitres; unsigned long oldTime;

void setup() { //temperature sensor pinMode(sensor,INPUT); // Configuring sensor pin as input Serial.begin(9600);

//lcd lcd.begin(16,2); lcd.setCursor(0,0); //column 0,row 0 lcd.print("MCTE 2332");

pinMode(13,OUTPUT); pinMode(8,OUTPUT); pinMode(10,OUTPUT);

//FLOWRATE Serial.begin(38400); pinMode(statusLed, OUTPUT); digitalWrite(statusLed, HIGH); // We have an active-low LED attached pinMode(sensorPin, INPUT); digitalWrite(sensorPin, HIGH);

int pulseCount = 0; int flowRate = 0.0; int flowMilliLitres = 0; int totalMilliLitres = 0; int oldTime = 0;

// The Hall-effect sensor is connected to pin 2 which uses interrupt 0. // Configured to trigger on a FALLING state change (transition from HIGH // state to LOW state) attachInterrupt(sensorInterrupt, pulseCounter, FALLING); }

void loop() { //TEMP vout=analogRead(sensor); //Reading the value from sensor vout=(vout*500)/1023; tempc=vout; // Storing value in Degree Celsius tempf=(vout*1.8)+32; // Converting to Fahrenheit Serial.print("in DegreeC="); Serial.print("\t"); Serial.print(tempc); Serial.print(" "); Serial.print("in Fahrenheit="); Serial.print("\t"); Serial.print(tempf); Serial.println(); delay(500); //Delay of 1 second for ease of viewing

//FLOWRATE if((millis() - oldTime) > 1000) // Only process counters once per second { // Disable the interrupt while calculating flow rate and sending the value to // the host detachInterrupt(sensorInterrupt); // Because this loop may not complete in exactly 1 second intervals we calculate // the number of milliseconds that have passed since the last execution and use // that to scale the output. We also apply the calibrationFactor to scale the output // based on the number of pulses per second per units of measure (litres/minute in // this case) coming from the sensor. flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor; // Note the time this processing pass was executed. Note that because we've // disabled interrupts the millis() function won't actually be incrementing right // at this point, but it will still return the value it was set to just before // interrupts went away. oldTime = millis(); // Divide the flow rate in litres/minute by 60 to determine how many litres have // passed through the sensor in this 1 second interval, then multiply by 1000 to // convert to millilitres. flowMilliLitres = (flowRate / 60) * 1000; // Add the millilitres passed in this second to the cumulative total totalMilliLitres += flowMilliLitres; unsigned int frac; // Print the flow rate for this second in litres / minute Serial.print("Flow rate: "); Serial.print(int(flowRate)); // Print the integer part of the variable Serial.print("."); // Print the decimal point // Determine the fractional part. The 10 multiplier gives us 1 decimal place. frac = (flowRate - int(flowRate)) * 10; Serial.print(frac, DEC) ; // Print the fractional part of the variable Serial.print("L/min"); // Print the number of litres flowed in this second Serial.print(" Current Liquid Flowing: "); // Output separator Serial.print(flowMilliLitres); Serial.print("mL/Sec");

// Print the cumulative total of litres flowed since starting Serial.print(" Output Liquid Quantity: "); // Output separator Serial.print(totalMilliLitres); Serial.println("mL");

// Reset the pulse counter so we can start incrementing again pulseCount = 0; // Enable the interrupt again now that we've finished sending output attachInterrupt(sensorInterrupt, pulseCounter, FALLING); }

//LCD lcd.setCursor(0,0); lcd.print("FLOWRATE: "); lcd.print(flowRate); lcd.setCursor(0,1); lcd.print("TEMP: "); lcd.print(tempc); lcd.print((char)223); lcd.print("C");

//ORANGE LED if(flowRate>0) digitalWrite(10,HIGH); else if (flowRate<=0) digitalWrite(10,LOW); //GREEN LED if(tempc>25) digitalWrite(8,HIGH); else digitalWrite(8,LOW);

//RED LED if(digitalRead(10)==HIGH && digitalRead(8)==HIGH ) digitalWrite(13, HIGH); else digitalWrite(13, LOW);

}

void pulseCounter() { // Increment the pulse counter pulseCount++; }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Advances In Databases And Information Systems Second East European Symposium Adbis 98 Poznan Poland September 1998 Proceedings Lncs 1475

Authors: Witold Litwin ,Tadeusz Morzy ,Gottfried Vossen

1st Edition

3540649247, 978-3540649243

More Books

Students also viewed these Databases questions

Question

f. Did they change their names? For what reasons?

Answered: 1 week ago