1 Introduction

With rapid growth and advancement in the field of automotive industry, microcontroller based embedded systems has become essential part of vehicles during last two and half decades. Microprocessor and microcontroller based embedded systems are getting popular compared to other technologies like FPGA and ASIC because high performance MCUs that offer MIPS and DSP instruction extensions may obviate the need for hardware acceleration. Shorter product life cycles may also be contributing to the shift. It’s a lot easier to write code in C/C++ and run it on a processor, than it is to write code in C/C++ and then translate it to a hardware description language [1].

Motorola HCS12 is a microcontroller family designed and introduced in the mid-1990 s from Freescale semiconductors. These are 16-bit microcontrollers which provides flexible selection between different flash memories and peripheral options for scalable designs. It is equipped with features like asynchronous serial communication interfaces (SCI), serial peripheral interfaces (SPI), input capture and output compare mode enhanced timers, pulse width modulation (PWM), CAN 2.0 software compatible module which makes this microcontroller perfect choice for automotive multiplexing applications. The inclusion of a PLL circuit allows power consumption and performance to be adjusted to suit operational requirements. Since this microcontroller has wide applications, there is need of skilled graduates who can design different applications using HCS12 microcontrollers.

In order to make students capable and competent for the use of microcontroller-based systems, a senior undergraduate level course on Microprocessors was introduced in Electrical and Computer Engineering department at Oakland University in Fall-2019. The core objective of this course is to balance between (1) the ‘conceptual’ understanding of microcontrollers emphasizing on its design and architecture with programming of microcontroller, and (2) a ‘hands-on’ training to be given to students to help them understand and design stand-alone microcontroller systems. In order to provide students with solid foundation and demystify the concepts of microcontrollers, it was author’s guiding viewpoint that students gain hands-on experience in using all the peripherals and features of microcontrollers using both assembly and C programming methods. Lab assignments for this course has been developed considering the vision that students should be able to use assembly language programming which will help in understanding machine level programming of embedded systems. As a student of Electrical and Computer Engineering department all students are quite familiar with using C programs to develop basic software and hardware applications. Understanding of low-level programming language is also important at same time in the field of microcontroller-based systems. Many students expressed difficulties while initially using assembly language programs. But this hurdle is overcome by lab assignments which enabled students to write basic level assembly programs and subroutines. Gradually, lab assignment difficulty level increased so that students can become more flexible in using in depth programming styles with different instructions and addressing modes. Once students become proficient in the use of assembly language, then C programming is introduced in lab assignments to explore and design real life applications of microcontrollers.

After gaining enough hands-on experience on using microcontrollers, students have to work on a group project. Students apply their understanding from lab assignments and concepts from lectures to develop a hardware application based on microcontroller. This allows students become efficient designer of microcontroller-based system.

This paper concentrates on some of such lab assignments that explains how to use timers in input capture and output compare mode. Real life applications can be developed using the concepts of this lab assignment like measuring human reaction time, controlling speed of DC motor and adjustment of servo motor angle using PWM. Results and outcomes of this course experience is discussed. The Result section shows statistical figure based on survey from students comparing before and after understanding of students about programming languages.

2 Related work

Microprocessor and microcontroller are considered as one of the fundamental and important courses in the field of electrical and computer engineering and hence taught in undergraduate and graduate level in majority of the universities. Several papers were already published which presented learning methods and techniques used in the course of microcontrollers but very few of them have emphasized on real life application-based lab assignments as a part of course which students can use in their term projects.

While there is enormous literature available depicting the advantages of HCS12 microcontroller and DRAGON12 Trainer kits used in the different level courses but this paper presents the methodology which is helpful for students to gain actual hands on experience which can be used in actual application. Christopher Carrol presented “Innovative Lab Station Using the Freescale ‘HCS12 Microcontroller and Dragon Development Board”, in which the use of Dragon Development board with Video display is shown. In that paper, a standalone system was created to eliminate the use of personal computer for programming of microcontroller [2]. Christopher Carrol extended his work in “Innovative ‘HCS12 Microcontroller Lab Station Using Limited Lab Resources”, where he described about different lab assignments in the course curriculum implemented using Dragon development board and video display [3].

Jeffery J. Richardson described about in-system programmer designed from a development board to program different types of microcontrollers which are not pin-for-pin compatible with development board in his “The Educational benefits of creating a development board based in-system programmer for 8-bit Embedded Microcontrollers” [4]. Targeted microcontroller group was AVR family in that paper. Furman Burford and Eric Moen conducted a broad search for their course of Mechatronics for alternative options of microcontrollers that can be programmed using C language. According to them, “Our method consisted of identifying criteria for evaluation, investigating which microcontrollers were being used in other institutions with mechatronics courses, compiling a manageable list of microcontroller candidates, and evaluating the top candidates” [5, 6]. Barret, Hager, Lewis, Jespersen and Rubel presented the laboratory equipment based on HC12 microcontroller in “Undergraduate Engineers for curriculum and laboratory equipment development: A Freescale S12 microcontroller laboratory trainer”. They have briefly discussed about projects completed by some of the students which includes Motorola HC12 microcontroller based teaching platform, a Freescale S12 microcontroller-based teaching robot, and a Verilog HDL based robot [7, 8].

Another paper presented by Jeevan F. D’Souza, Andrew D. Reed and C. Kelly Adams compares different microcontrollers including HCS12 microcontroller for selection of microcontroller for capstone projects in “Selecting Microcontrollers and Development Tools for Undergraduate Engineering Capstone Projects” [9]. K.M. Fotouhi used Stamps2 microprocessor board from parallax inc. in his paper “Microcontroller Controlled Walking Robot” [10]. This paper was based on the toddler robot designed by senior level graduate student and freshman students in collaboration. Abraham Howell, Richard Eckert and Roy McGrann discussed the results of using a low cost, flexible robot in a computer science microcontrollers and robotics course in their paper “Results of Using a Low Cost, Flexible Robot in a Microcontrollers and Robotics Course” [11]. Similar evaluation approach is used in this paper also which is response from students by taking a survey.

Nannan He, Han-Way Huang and Qijie Cai used project-based learning (PBL) for their course and explained about the results they achieved in “Teaching Touch Sensing Technologies Using ARM Cortex-M4 Microcontrollers” [12] where they had used ARM cortex-M4 microcontrollers. They emphasized on teaching how to use touch sensing technology to student with projects.

These similar works show different areas which had been explored. This paper presents advanced use of HCS12 microcontroller and helpfulness of course to give actual hands-on training to students to complete their projects for the course.

3 Course background and methodology

HCS12 microcontroller has wide range of applications from automotive industry to consumer appliances. Hence it was included in the initial course of Microprocessor Based System Design. This was cross listed course designed for both undergraduate and graduate level students. But it is realized that more focused and deeper approach needed for undergraduate students to understand the concepts and architecture of microprocessor as well as programming of it. Therefore, the course Microprocessor was introduced in Fall-2019 for the undergraduate students in Electrical and Computer Engineering department of Oakland University. Below are the specific educational objectives and learning outcomes expected from the course:

  • Programming the HCS12 microcontroller using assembly and C languages.

  • Write assembly language subroutines and call them as functions from a C program.

  • Use an A/D converter to read analog signals into a microcontroller.

  • Describe the output compare and input capture operations in a timer module of a microcontroller.

  • Generate pulse-width modulation (PWM) signals on a microcontroller suitable for controlling the speed of a DC motor or the position of a servo.

  • Describe how hardware interrupts work in a microcontroller.

  • Describe how serial data can be sent from one microcontroller to another using Serial Communication Interface (SCI) module.

  • Work in a team environment to design a microprocessor-based system and communicate the results in a written report and an oral presentation.

This course is developed according to the needs of undergraduate students from Electrical engineering and Computer engineering. Electrical engineering students, express difficulties in programming while Computer engineering students do not have hands on experience on hardware circuit designs. This course balances and helps student to gain knowledge of both programming and hardware circuit design. According to survey of Winter-2022 semester, there were 58% students from electrical engineering, 29% students from computer engineering and 13% students from both, electrical and computer engineering. All students are in their final year of engineering course and most of the students are working in different industries.

The course methodology involves commencing with theoretical lectures on microcontroller basics establishes a foundational understanding. Subsequent stages involve hands-on experience, starting with introductory lab sessions concentrating on foundational programming techniques. As the course advances, students engage in more complex tasks during advanced lab sessions, simulating real-world applications. The culmination of the learning journey is marked by a capstone project where students synthesize their acquired knowledge, applying it to a practical and comprehensive application. The flow chart described in Fig. 1 offering a clear and intuitive representation of the interconnected course elements.

Fig. 1
figure 1

Flow chart of the Course Methodology

Traditional approach of lectures has been modified in this course towards e-learning. All the lectures are recorded and posted on Moodle so that students can watch it later if they want to go through concepts again. Power Point presentations and program examples explained in the lecture are made available for students on moodle. Power point presentations are converted to video lectures using Panopto tool for students. While using Panopto tool, students can see instructor’s presentation, whiteboard, computer screen and projection. Panopto also has a note taking mechanism that allows students to type in and save notes as they watch the lecture recordings. Actual programming examples with live debugging on trainer kits (Dragon-12 is shown in Fig. 2) is shown during lecture to help student understand the concepts. Students has asked to try this example by their own with taking help from examples from class. After lectures, students perform lab exercises which are designed in lined with course concepts explained during lectures. Students first learn concepts during lectures and then apply the knowledge to perform lab exercises. Students are assessed based on six different lab assignments and two open book exams.

Fig. 2
figure 2

DRAGON12-Light Trainer board

4 HCS12 and DRAGON-12 light trainer

Freescale designed the 68HC12 as an upgrade to the 8-bit 68HC11 microcontroller. However, Motorola discovered that the performance of the 68HC12 microcontroller was not satisfactory after it was introduced to the market and it was upgraded to higher clock rate. The revised 68HC12 was referred to as the HCS12 family. The HCS12 MCU has the same instruction set and addressing modes as does the 68HC12. However, many of the internal designs have been changed. Automotive and process control applications are the two major target markets of the HCS12. Therefore, HCS12 was incorporated with different peripherals for signal generation and communication. Most HCS12 devices have many I/O pins to interface with I/O devices. When on-chip memory is not adequate, external memory can be added. All HCS12 devices adopt the same design for the same peripheral function to facilitate the migration from one device (with less memory or fewer peripheral functions) to another.

The internal block diagram and functionality of all registers are explained to students in the lecture using presentations. Initial lab assignments were given to students which are based on understanding of microcontroller CPU and registers. These initial lab assignments and lectures on block diagram of microcontroller helped students to understand the actual working of CPU, internal data transfer between registers, effect of addressing modes on data transfer from memory to internal registers of CPU, arithmetic and logical instruction execution in the CPU, branching instruction execution and how programs are stored in the memory using machine codes of every instruction. These assignments used actual simulation in the CodeWarrior IDE software tool.

The lab assignments mentioned in this paper were performed on Dragon 12 Light development boards. The HCS12/9S12 based Dragon 12 Light board includes a built-in USB interface based on the flawless FT232RL and an RGB piranha color LED. It is fully backward compatible to our Dragon 12 Light board. It will run all programs written from the Dragon12-Plus board without any modifications. The kit includes the Dragon12 Plus-USB board based on the MC9S12DG256CVPE microcontroller, DIP switches and push buttons to be used as input devices, 8 LEDs and a speaker as output devices. This board also have 4 seven-segment display and 16X2 LCD display that can be used as display devices [13].

The HCS12 microcontroller was chosen in this paper for several reasons, particularly focusing on its relevance to the educational objectives of an upper-level undergraduate course on Microprocessors at Oakland University. Following are the detailed justifications provided in the text for selecting the HCS12 microcontroller over other 16-bit families:

  • Pedagogical Alignment with Course Objectives: The primary objective of the course is to teach students the design of hardware and software for microprocessor-based systems. The HCS12 microcontroller was deemed suitable for learning due to its broad applicability in real-life operations, which fits the course’s practical emphasis.

  • Industry Relevance and Real-Life Applications: The paper discusses the wide applications of HCS12 microcontrollers, especially in automotive multiplexing applications. By incorporating a microcontroller that has actual industrial uses, students are better prepared for the job market with practical skills.

  • Specific Peripheral and Feature Suitability: The HCS12 microcontroller comes with a set of on-chip peripherals like SCI (Serial Communication Interfaces), SPI (Serial Peripheral Interfaces), enhanced timers with input capture and output compare modes, pulse width modulation (PWM), and CAN 2.0 module. These features make it an ideal choice for teaching a variety of microcontroller functionalities. Additionally, the inclusion of a PLL circuit allows the power consumption and performance of the microcontroller to be adjusted according to operational requirements.

  • Scalability of Designs: It offers flexible selection among different flash memories and peripheral options, allowing students to learn about scalable designs.

  • Capability for Rigorous Hands-on Experiences: Using the HCS12 microcontroller, the course methodology included practical exposure through hands-on experiments and lab assignments that help students understand machine-level programming and interfacing.

  • Educational Continuity and Compatibility: The HCS12’s compatibility with the Motorola 68HC12 instruction set while featuring improved internal design was presented as an upgrade path that could be relevant for educational purposes. It is important in an educational setting to choose a microcontroller family that offers continuity for students who might encounter Motorola families in other contexts.

  • Supportive Development Tools: The Freescale CodeWarrior IDE v5.1 was identified as a suitable software environment supporting HCS12 microcontrollers. This integrated development environment enhances the learning process, adapting to both assembly and C programming paradigms for microcontrollers.

5 Programming with codewarrior

Programming platforms are needed for any microcontroller-based system. CodeWarrior has been used in this course as a programming tool for HCS12 microcontrollers which is developed by NXP semiconductors. CodeWarrior is an integrated development environment used for editing, compiling and debugging programs for different digital signal controllers, microprocessors and microcontrollers. Freescale CodeWarrior have different features and tools that helps to understand concepts of microprocessors [14].

Freescale CodeWarrior provides selection of controller device for project to be designed from HC12, HCS12 and HCS12X families. It has all built in libraries for different controllers. After selection of device for project, programming language needs to be selected. According programming language selection, CodeWarrior includes start-up code for the device to be programmed. It can support both assembly language and C language for program editor. Once programming language is selected then user can decide on which memory segment of the actual controller to be used for programming. There are different modes of connections available for CodeWarrior, 2 of which, really helpful and vastly used in this course, are Full chip simulation and HCS12 serial monitor. Usefulness of both modes has been introduced to students so that they can understand how to use CodeWarrior and microcontrollers to design any project or system.

Full chip simulation mode of codewarrior is useful to access the status of all the internal registers and memory locations. Once any program is written using editor and compiled, then we can check program simulation and status of internal registers in the debug window of codewarrior. Full chip simulation shows actual working of controller for written program. Debugging of program can be done in step mode as well where program execution is stopped after every instruction and then we can check the status of registers and memory. This step mode is really helpful for debugging of program where functional error of programs can be detected [15].

CodeWarrior introduced to students during regular lecture session through presentation first so that they can get familiar with the software editor. Students actually worked on this IDE during lab assignments where brief introduction to all features of CodeWarrior has been given to them. First question arise to students is how to relate between CodeWarrior program and actual microcontroller. Full chip simulation and step mode debugging of program helped them to understand the actual working of microcontroller. First 2 lab sessions were assigned to students so that they can use all the tools in the CodeWarrior to program microcontrollers efficiently. Example of lab 1 task is shown here. In this lab assignment students use the CodeWarrior IDE to develop and test the ASM (assembly) programs where they have to use full-chip simulator to verify final results. There were three variables in this program namely, K, K2 and Count which are initialized to zero at start of program. We have provided the program to students and helped them to understand the program first. This program was incrementing values of variables K, K2 and Count. Actual program is shown in the image below. Then this program is compiled and debugged in the debug window using full chip simulation.

Figures 3 and 4 above show the program and actual debug window after executing that program.

The final result of this program is K = 10, K2 = 20 and Count = 9. The task was assigned to students was that after execution of program the values of variables should be K = 10, K2 = 20 and Count= 10. To identify problem in the program, students has been asked to use ‘breakpoint’ in the debug window. ‘Breakpoint’ stops program simulation when execution reaches to breakpoint instruction. This helps to skip through loops of program and to stop execution at desired instruction. Students used this breakpoint feature to identify the problem in the existing program.

All students were able to identify the problem in this program and provided solution for the program. Also, students understood how to simulate through a program and to verify contents of memory and internal registers of the microcontroller.

In further lab sessions, students introduced with HCS12 Serial Monitor mode of CodeWarrior where they can transfer the program written on editor to actual microcontroller kit which is Dragon 12 board. Serial monitor also helps to run program from debug window where default program frequency is set to 24 MHz and if program is run from dragon 12 board, then default frequency is set to 4 MHz [16,17,18].

6 Real-life applications

As course progressed, students understood and gained enough expertise to handle Dragon 12 board and use of assembly language to program HCS12 microcontroller.

Fig. 3
figure 3

CodeWarrior program editor

Fig. 4
figure 4

CodeWarrior debugger

It was important for students to have hands on experience with all internal registers, memory section and special purpose registers to progress in the course. Initial lab sessions and lectures served this purpose where students have been given with plenty of assembly language programs in the online class to understand basics of microcontroller. These exercises helped students a lot and this has discussed in the next section.

Microcontroller programming using C language was introduced to students, after students became familiarized with assembly language programming, which gives more flexibility and advanced programming methods. Microcontrollers are mostly used in embedded systems, so it was necessary for students to use microcontrollers for real life applications. Last 2 lab exercises of the course were based on this approach so that students can use these exercises for their final course project. Tasks in these lab exercises are discussed here.

One lab exercise was to measure human reaction time. Main task of this lab exercise was to measure time gap between push of two different switches. Initially students suggested that this task can be completed using only software variables and time delay functions generated using software looping. But this method was not useful to measure exact time and also program will become too complicated and inefficient. Measurement of time is always precise with the help of hardware timers than software functions to measure time when using in real life applications. Therefore, this lab exercise was useful for students to understand actual difference between hardware timers and software timers with hands on experience. Following figure, Fig. 5, shows actual tasks to be performed by students.

Fig. 5
figure 5

Lab exercise for measuring human reaction time

This lab session uses some components from dragon 12 board like push buttons (SW), LED and speakers. Students got familiar with all these components and how to use these components through programming through prior lab sessions.

Main objectives of this lab were to program HCS 12 using C language, use of Input Capture operation in HCS12 Timer module, use of Output Compare operation in HCS12 Timer module, to make students familiar with the serial communication interface (SCI) modules of HCS12, use of SCI to establish serial communication between a DRAGON boards and a PC, and use the Phase Locked Loop (PLL) to increase the bus frequency of the HCS12 [19, 20].

HCS12 microcontroller supports serial communication. For serial communication between dragon 12 board and PC, PuTTY serial console was used. Figure 6 shows actual results from lab session.

Fig. 6
figure 6

Result from lab of measuring human reaction time

Speed control of DC motor and servo motor angle control these are two important and broadly used applications of microcontroller-based system and both applications uses Pulse Width Modulation (PWM). Therefore, it is important that students should get hands on experience to generate PWM wave from HCS12 microcontroller. Part of a lab exercise was to control the angle of servo motor by generating PWM signal on one pin of dragon 12 board. Detailed task is shown in Fig. 7.

Fig. 7
figure 7

Lab exercise to control angle of a servo motor

HCS12 have two sets of 8 channel analog to digital converters. This analog to digital converter was used to read value of a potentiometer and convert that value to equivalent PWM signal for servo motor. In this lab exercise 16-bit PWM was used. The hardware setup is shown in Fig. 8 and the actual results of generated PWM waveform is shown in Figs. 9 and 10 [?].

Fig. 8
figure 8

Hardware setup to control servo motor angle

Fig. 9
figure 9

Generated PWM for minimum value read from potentiometer

Fig. 10
figure 10

Generated PWM for maximum value read from potentiometer

7 Results

Students has been assessed based on their grades in the mid-term and final exam grades, and additionally grades for final term project and for each lab exercise also considered for final assessment. Students’ grades had improved from mid-term exam to final exam which was evident from mean of mid-term exam grades was 70% while mean of final exam grades was 73% for Winter-2022 batch. Lab exercises were extremely useful for students for understanding course concepts as well as to complete term project.

A survey has been conducted for Winter-2022 batch after completion of their semester. 31 students participated in this survey which is approx. 80% of total number of students from that batch. Survey was basically conducted to get feedback from students about their experiences of course, helpfulness of course and knowledge gained through the course. Few graphs from this survey are shared here. Figure 11 shows that approx. 65% students were working in some field related to engineering during the course period.

Another question from the survey was how much students were confident about understanding of programming microcontroller using assembly and C language before starting of course and after completion of course. Figure 12. shows the comparison of students’ response to this question. 83.9% students were having low to moderate understanding of assembly language programming for microcontrollers. At the end of course, all students were having understanding from moderate to expert level for assembly language programming which is evident from Fig. 13.

Similar question was asked to students about C language programming for microcontrollers. Their response is shown in Fig. 14. Many students already had encountered with using C language for programming for prior course. Therefore 29% of students were having moderate to expert level of understanding for C programming. Figure 15 shows that all students responded that their understanding of C programming for microcontroller has been improved significantly at the end of course.

Fig. 11
figure 11

Students who are working during course period

Fig. 12
figure 12

Assembly language program understanding before start of course

Fig. 13
figure 13

Assembly language program understanding after completion of course

Fig. 14
figure 14

C language program understanding before start of course

Survey also focused on response of students for lab exercises. It was asked to students that whether lab exercises were useful to understand course concepts and almost 97% students thought that lab exercises were moderate to extremely useful for understanding of course concepts. The motivation behind lab exercises was not only course concepts but also to give students hands-on experience which they can use while designing their term projects. It was seemed to be quite successful from response of students in the survey. All students responded that lab exercises were helpful for them to complete their final term project as shown in Figs. 16 and 17.

Fig. 15
figure 15

C language program understanding after start of course

Fig. 16
figure 16

Helpfulness of lab exercises to understand course concepts

Fig. 17
figure 17

Helpfulness of lab assignments for final term project

The results section of the paper provides a comprehensive analysis of the outcomes and assessments of the Microprocessors course at Oakland University. The assessment methods included mid-term and final exam grades, grades for the final term project, and grades for each lab exercise, which were considered for the final assessment. The results indicate that students’ grades improved from the mid-term exam to the final exam, with the mean of mid-term exam grades at 70% and the mean of final exam grades at 73% for the Winter-2022 batch.

Additionally, a survey was conducted to gather feedback from students about their experiences, the helpfulness of the course, and the knowledge gained. Approximately 80% of the total number of students from the Winter-2022 batch participated in the survey. The survey focused on the students’ understanding of programming languages before and after the course, as well as the helpfulness of lab exercises in understanding course concepts and completing the final term project.

The survey results, which are quantitative in nature, indicate a significant improvement in students’ understanding of assembly and C programming languages after completing the course. The survey also revealed that the lab exercises were extremely useful for students in understanding course concepts and completing their final term project. The survey data, represented in statistical figures, demonstrate the qualitative and quantitative impact of the course on students’ learning outcomes and practical skills in microcontroller-based systems.

The paper also details the specific tasks and objectives of the lab exercises, such as measuring human reaction time and controlling the speed and angle of motors using Pulse Width Modulation (PWM). The results of these lab exercises are detailed, including the hardware setups, generated waveforms, and the students’ ability to identify and solve problems in the programs. The document also includes figures and diagrams illustrating the hardware setups and the results obtained from the lab exercises.

Furthermore, the paper highlights the successful integration of CodeWarrior software and real-life application-based lab assignments in the course. The use of CodeWarrior software provided an integrated development environment for editing, compiling, and debugging programs for microcontrollers, allowing students to gain familiarity with the internal architecture of HCS12 microcontrollers. The document emphasizes the effectiveness of the lab exercises in enhancing students’ hands-on experience and understanding of microcontroller programming.

In conclusion, the results section provides a comprehensive analysis of the students’ performance, the effectiveness of the lab exercises, and the impact of the course on their understanding of microcontroller programming. The survey data and the detailed descriptions of the lab exercises contribute to a thorough understanding of the course outcomes and the students’ learning experiences.

8 Conclusion

The use of CodeWarrior software and real-life application-based lab assignments proved quite successful for this course. In the case of CodeWarrior, students were quickly able to adapt software integrated development environment. Due to quick understanding of CodeWarrior IDE, students were able to simulate actual examples given in the class by their own. This approach helped students to get familiar with internal architecture of HCS12 and course concepts. Students were also benefited from author’s guidance on where to look for if program is not giving desired results.

Students then focused and spent good amount of time on understanding assembly language programming with different types of addressing modes of instructions. This helped them to become more flexible in terms of writing same programs with different type of instructions. Getting knowledge about assembly language programming and basics of microcontroller set the platform for students to understand complex C programs and advanced use of special purpose registers.

CodeWarrior also provided easy way for author to quickly and simply demonstrate various concepts and examples in classroom lectures so that students can learn quickly. This approach was proved useful for explaining C programs and advanced applications like Timer modules, PWM, Serial Communication and analog to digital converter. Therefore, students were able to perform all the lab assignments by their own and gained enough experience before starting to work on projects. Author intend to continue same methodology and approach for future batches. However, based on the feedback from students, more time could be assigned for C programs with increased number of examples.

This paper also highlights the successful implementation of the senior undergraduate level course on Microprocessors at Oakland University, focusing on equipping students with the skills to design and program microcontroller-based systems. The course methodology aimed to strike a balance between conceptual understanding and hands-on training, with a specific focus on assembly and C programming methods.

The lab assignments, such as measuring human reaction time, controlling the speed of DC motors, and adjusting servo motor angles using Pulse Width Modulation (PWM), provided students with hands-on experience and practical application of microcontroller concepts. The results and outcomes of the course demonstrated the effectiveness of the lab exercises in enhancing students’ understanding of course concepts and preparing them for their final term projects.

The survey conducted at the end of the semester provided valuable feedback from students about their experiences, the helpfulness of the course, and the knowledge gained. The survey results indicated a significant improvement in students’ understanding of assembly and C programming languages after completing the course. Additionally, the survey revealed that the lab exercises were extremely useful for students in understanding course concepts and completing their final term project.

In conclusion, the paper emphasizes the successful integration of theoretical concepts, practical applications, and hands-on experience in the Microprocessors course. The methodology and approach used in the course, including the use of CodeWarrior software and real-life application-based lab assignments, have proven to be effective in enhancing students’ understanding and practical skills in microcontroller programming. The positive feedback from students and the demonstrated improvement in their understanding of programming languages underscore the success of the course in achieving its objectives. The document also highlights the intention to continue the same methodology and approach for future batches, with potential adjustments based on student feedback to further enhance the learning experience.