To implement the program you must write several subroutines and a main program to operate an Engine Control Unit which uses the Analog To Digital converter (ATD), Input/Output ports and the Timer built into the HC12. The input of ATD channel 2 is connected to a tachometer measuring the engine speed. An active low timing trigger input and the fuel inj ector pulse output are connected to Port H as shown in Figure 1.
![344_operate an Engine Control Unit.png](https://www.mywordsolution.com/CMSImages/344_operate%20an%20Engine%20Control%20Unit.png)
You are required to take 4 engine speed measurements, take their average value, make a simple calculation and create the timing interval for the fuel injector pulse width (W).
There are several parts/subroutines required to be written for this problem and you may create other subroutines to complete your coding and improve the structure of your program.
Instructions on how to implement the program using the MiniIDE editor/assembler and SimH Simulator software are provided aftert this specification. Suggestions on using the simulator to test your p rogram arep rovided (in italics) in severalpar ts of the assignment.
Part-1
Write an assembly language subroutine called INITATD to initialise the ATD ready to operate as required in Part 2 below.
Part-2
Write an assembly language subroutine called SPEED that starts an 8 bit, left justified ATD conversion on channel 2, waits for the conversion to complete, reads the resulting data and returns the data in accumulator A. The data value returned will be a positive number, $00 through to $50 (decimal=80). This number is a measure of Engine Speed (S) in hundreds of revs per minute. For example an ATD value of $20 (decimal=32) equates to 3200 rpm. Although larger numbers can come from the ATD, the maximum range of values you can expect is 0 to 80.
When testing this on the simulator you should switch on the ADC viewer under the View menu. You should set the analog input using the sliderf or channel 2 (PAD2). A value of 0.0 volts set on the slider equates to 0 rpm and 1.5682 volts set on the slider equates to an engine sp eed of 8000 rpm . Each click on a slider arrow is 100 rpm up or down on the engine speed.