{"id":14138,"date":"2018-03-30T15:33:01","date_gmt":"2018-03-30T19:33:01","guid":{"rendered":"http:\/\/embedded-lab.com\/blog\/?p=14138"},"modified":"2023-09-06T02:59:37","modified_gmt":"2023-09-06T06:59:37","slug":"more-on-ti-msp430s","status":"publish","type":"post","link":"https:\/\/embedded-lab.com\/blog\/more-on-ti-msp430s\/","title":{"rendered":"More on TI MSP430s"},"content":{"rendered":"<h5 style=\"margin-top: 0cm\"><\/h5>\n<h5 style=\"margin-top: 0cm\">This post is a sequel of the first post on TI MSP430 micros <a href=\"http:\/\/embedded-lab.com\/blog\/introducing-ti-msp430-microcontrollers\/\">here<\/a>.<\/h5>\n<h1 style=\"margin-top: 0cm\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/55291.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14210 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/55291-580x452.png\" alt=\"5529\" width=\"580\" height=\"452\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/55291-580x452.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/55291.png 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/h1>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm\">Low Power Modes (LPM)<\/h1>\n<p style=\"text-align: justify\">From the smartwatches in our wrists to the vehicles we use for transportation, many modern electronic gadgets and gizmos are battery-powered. Some are even dependent on renewable energy sources like solar energy. In such devices, there is always an inherent energy crisis and so saving energy is a must in such designs for prolonged usage. At present there is hardly any microcontroller in the market that does not come equipped with energy-saving schemes or low power modes of operation. MSP430s were mainly designed for battery-backed instruments and it is no surprise that they come loaded with the some of the best possible energy-saving mechanisms.<\/p>\n<p style=\"text-align: justify\">There six modes of operation of which five are low power modes. These are as follows:<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/Modes.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14131\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/Modes-580x160.png\" alt=\"Modes\" width=\"580\" height=\"160\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/Modes-580x160.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/Modes-1024x283.png 1024w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/Modes.png 1032w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Of these six modes, three modes are mostly used \u2013 Active Mode (AM), LPM0 and LPM3. In Active Mode, the typical self-consumption of a MSP430 device is roughly about 300\u00b5A with nothing connected to it. In LPM0 the self-consumption is about a third of active mode while in LPM3, this consumption is just about 1\u00b5A. These figures tell us how much energy efficient MSP430s are.<\/p>\n<p style=\"text-align: justify\">Entering and exiting LPM is easy in terms of coding. However, the most common question that coders face with LPMs is how to get back to active mode or some other low power mode from a given low power mode. Well, it is pretty simple and it is accomplished with interrupts. It is up to coders to decide how to manage interrupts, clock sources and what do to after waking up from a LPM condition. Note that in LPMs, the CPU is disabled and so any task that requires CPU\u2019s intervention is stalled. Since the CPU and some clocks are halted in LPMs, don\u2019t even think that the tasks depending on them will be magically done. For instance, if a code has entered LPM3 and a timer is being driven with SMCLK, we should not expect it to tick because in LPM3, SMCLK is turned off. Organizing the code in a decent and well-planned manner is the secret behind successfully implementing LPMs.<\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> &lt;msp430.h&gt;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"delay.h\"<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#pragma<\/strong> vector = PORT1_VECTOR<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>__interrupt<\/strong> <strong>void<\/strong> <strong>PORT1_ISR_HOOK<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 LPM2_EXIT;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1OUT |= BIT6;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1IFG = 0x00;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; 9; s++)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT ^= BIT0;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(160);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT &amp;= ~BIT6;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LPM2;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 };<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1OUT = BIT3;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1DIR = BIT0 | BIT6;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 1 Resistor Enable Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1REN = BIT3;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1IES = BIT3;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1IFG = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Enable Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1IE = BIT3;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P2OUT = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 2 Port Select Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P2SEL &amp;= ~(BIT6 | BIT7);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P2DIR = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P2IES = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P2IFG = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_1MHZ != 0xFF)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 * apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_1MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 1MHz *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_1MHZ;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 \u00a0\u00a0}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \u00a0* Basic Clock System Control 3<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * LFXT1S_2 -- If XTS = 0, XT1 = VLOCLK ; If XTS = 1, XT1 = 3 - 16-MHz crystal or resonator<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_2 | XCAP_1;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Clear oscillator fault flag with software delay *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>do<\/strong><\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Clear OSC fault flag<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 IFG1 &amp;= ~OFIFG;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ 50us delay<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(50);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 } <strong>while<\/strong> (IFG1 &amp; OFIFG);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~OSCOFF -- Oscillator On<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \u00a0*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * WDTCTL, Watchdog Timer+ Register<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTIS1 -- Watchdog clock source bit1 disabled<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}\n<\/em><\/span><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/SIM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14133\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/SIM-580x211.png\" alt=\"SIM\" width=\"580\" height=\"211\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/SIM-580x211.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/SIM-1024x373.png 1024w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/SIM.png 1104w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">The simulation log of Proteus shown below shows when the internal oscillators started and stopped. These indicate LPM and AM states.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/SIM-log.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14132\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/SIM-log-580x401.png\" alt=\"SIM log\" width=\"580\" height=\"401\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/SIM-log-580x401.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/SIM-log.png 783w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"margin-top: 0cm\">Explanation<\/h2>\n<p style=\"text-align: justify\">This is a pretty straight example. The code here works by first flashing the Launchpad board\u2019s red LED for some time. During this time the MSP430 is running in active mode. After the flashing is over, the MP430 micro enters LPM2 state. Note that in LPM2 state all except the DC generator and ACLK are turned off. At this stage to wake up and exit LPM2, an interrupt is needed. Here this interrupt is generated by the external interrupt caused by pressing the Launchpad board\u2019s user button. In the interrupt service routine (ISR), LPM2 is left and is indicated by a brief flash from the Launchpad board\u2019s green LED. After executing the ISR, the code returns to main function and the process repeats again.<\/p>\n<p style=\"text-align: justify\">Note that for LPMs, there is no segment in Grace and LPM code definitions can be found in device\u2019s header files.<\/p>\n<h2 style=\"text-align: justify\">Demo<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/LPM-2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14135\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/LPM-2-580x351.jpg\" alt=\"LPM (2)\" width=\"580\" height=\"351\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/LPM-2-580x351.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/LPM-2.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a> <a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/LPM-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14134\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/LPM-1-580x378.jpg\" alt=\"LPM (1)\" width=\"580\" height=\"378\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/LPM-1-580x378.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/08\/LPM-1.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/DSRTfoSNDlo?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm\">Internal Flash Memory<\/h1>\n<p style=\"text-align: justify\">In some applications, there are some very important data that we wish to retain in our target device even when it is powered down. For such purposes we need a nonvolatile memory. Like many modern micros of today\u2019s market, MSP430s do not contain any separate EEPROM memory or battery-backed nonvolatile memory. For storing data like calibration data, settings, etc. that we would have saved in EEPROM memories, we can use the internal flash memory of our MSP430 devices. Though it may sound difficult and challenging, it is not so. However, we need to be very careful about storage locations as such that we don\u2019t accidentally use locations where application codes reside.<\/p>\n<p style=\"text-align: justify\">Shown below is a flash memory map example of a MSP430G2xxx device.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/memory_map.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14143\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/memory_map.png\" alt=\"memory_map\" width=\"533\" height=\"382\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Note that there are four segments labelled A through D. These are the locations that we will be using for data storage and are called information memory. The rest is code space. We can also use the code space too but the code space has 512-byte segment size compared to 64-byte segment size of information memory. Now why is it so important to use information memory space instead of code memory? This is because of its small segment size. During memory erase, we have to erase a full segment. Bit, byte and word level read-write operations can be done easily but erasing is not possible at these levels. Two separate segments can be used to emulate low level erase. When such mechanism is applied. One segment acts like a buffer while the other is used for actual storage. Wear-leveling may optionally be applied. However, these processes add delays and extra cosing.<\/p>\n<p style=\"text-align: justify\">Segment A is a very important segment as it stores important internal calibration data like DCO frequency variables, etc. Thus, it is protected and locked separately. It will be wise to leave it and use the other three segments of information memory space to store data.<\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_I2C.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"PCF8574.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Flash_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_print<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Flash_Erase<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Flash_Write_Char<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address, <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>char<\/strong> <strong>Flash_Read_Char<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Flash_Write_Word<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address, <strong>unsigned<\/strong> <strong>int<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>int<\/strong> <strong>Flash_Read_Word<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> value = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430F2xx Flash Memory Controller *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>Flash_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_clear_home<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"MSP430 Flash Ex.\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 value = <strong>Flash_Read_Char<\/strong>(0x1000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"WR: ---\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(9, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"RD:\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>lcd_print<\/strong>(13, 1, value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(2000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>if<\/strong>((P1IN &amp; BIT3) == !BIT3)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>((P1IN &amp; BIT3) == !BIT3);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Flash_Erase<\/strong>(0x1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Flash_Write_Char<\/strong>(0x1000, value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>lcd_print<\/strong>(13, 1, value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0P1OUT |= BIT0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 _delay_cycles(40000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT &amp;= ~BIT0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>delay_ms<\/strong>(20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>lcd_print<\/strong>(4, 1, value);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(200);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Flash_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: Flash_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: Flash_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0\u00a0* Flash Memory Control Register 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * FSSEL_1 -- MCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~FN5 -- Flash controller clock divider bit 5<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * FN4 -- Flash controller clock divider bit 4<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~FN3 -- Flash controller clock divider bit 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * FN2 -- Flash controller clock divider bit 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~FN1 -- Flash controller clock divider bit 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * FN0 -- Flash controller clock divider bit 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL2 = FWKEY | FSSEL_1 | FN4 | FN2 | FN0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: Flash_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: Flash_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = BIT3;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = BIT0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Resistor Enable Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1REN = BIT3;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 3 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P3OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 3 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P3DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_8MHZ != 0xFF) {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Adjust this accordingly to your VCC rise time *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(100000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_8MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 8MHz *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_8MHZ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_0 -- If XTS = 0, XT1 = 32768kHz Crystal ; If XTS = 1, XT1 = 0.4 - 1-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~OSCOFF -- Oscillator On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTCTL, Watchdog Timer+ Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS1 -- Watchdog clock source bit1 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_print<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> chr = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = ((value \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = (((value \/ 10) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 1), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 2), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Flash_Erase<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> *FlashPtr;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FlashPtr = (<strong>char<\/strong> *)address;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0FCTL1 = FWKEY + ERASE;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Set Erase bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL3 = FWKEY;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Clear Lock bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bic_SR_register<\/strong>(GIE);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Disable Interrupts<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 *FlashPtr = 0;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Dummy write to erase Flash segment B<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>((FCTL3 &amp; BUSY) == BUSY);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Busy<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Enable Interrupts<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL1 = FWKEY;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Lock<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL3 = FWKEY + LOCK;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\/\/ Set Lock bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Flash_Write_Char<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address, <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> *FlashPtr = (<strong>char<\/strong> *)address;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL1 = FWKEY + WRT;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Set WRT bit for write operation<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL3 = FWKEY;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Clear Lock bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bic_SR_register<\/strong>(GIE);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Disable Interrupts<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 *FlashPtr = value;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Save Data<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>((FCTL3 &amp; BUSY) == BUSY);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Busy<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Enable Interrupts<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL1 = FWKEY;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Clear WRT bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL3 = FWKEY + LOCK;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Set LOCK bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>char<\/strong> <strong>Flash_Read_Char<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> value = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> *FlashPtr = (<strong>char<\/strong> *)address;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0value = *FlashPtr;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Flash_Write_Word<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address, <strong>unsigned<\/strong> <strong>int<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> *FlashPtr = (<strong>unsigned<\/strong> <strong>int<\/strong> *)address;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL1 = FWKEY + WRT;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Set WRT bit for write operation<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL3 = FWKEY;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Clear Lock bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bic_SR_register<\/strong>(GIE);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Disable Interrupts<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 *FlashPtr = value;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Save Data<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>((FCTL3 &amp; BUSY) == BUSY);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Busy<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Enable Interrupts<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL1 = FWKEY;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Clear WRT bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL3 = FWKEY + LOCK;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Set LOCK bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>int<\/strong> <strong>Flash_Read_Word<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> value = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> *FlashPtr = (<strong>unsigned<\/strong> <strong>int<\/strong> *)address;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 value = *FlashPtr;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/sim.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14141\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/sim-580x267.png\" alt=\"sim\" width=\"580\" height=\"267\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/sim-580x267.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/sim.png 904w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"margin-top: 0cm\">Explanation<\/h2>\n<p style=\"text-align: justify\">The flash memory module of MSP430s has an integrated controller that controls programming and erase operations. The controller has four registers, a timing generator, and a voltage generator to supply program and erase voltages.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Grace.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14142\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Grace.png\" alt=\"Grace\" width=\"517\" height=\"357\" \/><\/a><\/p>\n<p>Using Grace, we initialize the aforementioned:<\/p>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>FCTL2 = FWKEY | FSSEL_1 | FN4 | FN2 | FN0;<\/em><\/span><\/pre>\n<p style=\"text-align: justify\">To write a byte, we need two things \u2013 memory location and the value we wish to write. This memory location is that piece of memory space where we wish to store the value.<\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Flash_Write_Char<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address, <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> *FlashPtr = (<strong>char<\/strong> *)address;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL1 = FWKEY + WRT;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Set WRT bit for write operation<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL3 = FWKEY;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Clear Lock bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bic_SR_register<\/strong>(GIE);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Disable Interrupts<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 *FlashPtr = value;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Save Data<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>((FCTL3 &amp; BUSY) == BUSY);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Busy<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Enable Interrupts<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL1 = FWKEY;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Clear WRT bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 FCTL3 = FWKEY + LOCK;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Set LOCK bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Firstly, the address of the memory location where data is to be stored is pointed out. Flash write process starts by setting the write bit, followed by removing the flash protection. Once these are done, all interrupts are temporarily disabled to avoid any accidental write or illegal operation. The value to be written is then pointed. Until the value is successfully written all other processes are halted. Once the value to be stored is successfully written, interrupts are enabled, the write bit is cleared and the flash lock is applied.<\/p>\n<p style=\"text-align: justify\">Reading the flash is simpler. We just have to point the location we wish to read.<\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>char<\/strong> <strong>Flash_Read_Char<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> value = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> *FlashPtr = (<strong>char<\/strong> *)address;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 value = *FlashPtr;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p style=\"text-align: justify\"><span style=\"color: #000000\" data-darkreader-inline-color=\"\">The process for erasing is similar to write processes. The only difference is Erase bit instead of Write bit.<\/span><\/p>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>Flash_Erase<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> address)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>char<\/strong> *FlashPtr;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 FlashPtr = (<strong>char<\/strong> *)address;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 FCTL1 = FWKEY + ERASE;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Set Erase bit<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 FCTL3 = FWKEY;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Clear Lock bit<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>__bic_SR_register<\/strong>(GIE);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Disable Interrupts<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 *FlashPtr = 0;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Dummy write to erase Flash segment B<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 \u00a0\u00a0<strong>while<\/strong>((FCTL3 &amp; BUSY) == BUSY);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Busy<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Enable Interrupts<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 FCTL1 = FWKEY;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Lock<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 FCTL3 = FWKEY + LOCK;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Set Lock bit<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<p style=\"text-align: justify\">The same read-write processes can also be applied to read\/write word-level values.<\/p>\n<p style=\"text-align: justify\">The code demoed her works by reading the last data stored in the target flash location (0x1000) and incrementing a variable named <strong><em>value<\/em><\/strong>. Only this location is read and updated when the Launchpad board\u2019s button is pressed.<\/p>\n<h2 style=\"text-align: justify\">Demo<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Flash.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14140\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Flash-580x370.jpg\" alt=\"Flash\" width=\"580\" height=\"370\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Flash-580x370.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Flash.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/o_LUBiWJ5Og?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">Time Delay Generation with Timer Compare-Match Feature<\/h1>\n<p style=\"text-align: justify\">Time-bases and delays can be generated in many different ways, ranging from software techniques to using a dedicated hardware timer. Between software-based methods and hardware-based ones, the latter is more efficient and effective. This is because software-based methods rely on wasteful CPU-intensive loops and other resource-consuming processes. Hardware approaches for generating time-bases and delays are smart choices because the prime job of a timer is to count ticks or measure time. Yet within hardware-based methods, there are several techniques and tricks. We can choose between polling a free running timer or using interrupts to get things done in a more real-time sense. We have seen previously that we can use timer interrupts to time events. Here we will also see the same but this time compare-match interrupt is used instead of timer interrupt.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/TIMCCR.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14148\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/TIMCCR-580x173.png\" alt=\"TIMCCR\" width=\"580\" height=\"173\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/TIMCCR-580x173.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/TIMCCR.png 612w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Timer0_A3_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#pragma<\/strong> vector = TIMER0_A0_VECTOR<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>__interrupt<\/strong> <strong>void<\/strong> <strong>TIMER0_A0_ISR_HOOK<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT ^= (BIT0 | BIT6);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bic_SR_register_on_exit<\/strong>(LPM0_bits);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 A3 Timer0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>Timer0_A3_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT |= BIT0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT &amp;= ~BIT6;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(LPM0_bits);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = BIT0 | BIT6;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Port Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2SEL &amp;= ~(BIT6 | BIT7);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_1MHZ != 0xFF)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 * apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_1MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 1MHz *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_1MHZ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0\u00a0* Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_0 -- If XTS = 0, XT1 = 32768kHz Crystal ; If XTS = 1, XT1 = 0.4 - 1-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Timer0_A3_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: Timer0_A3_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: Timer0_A3_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * TA0CCTL0, Capture\/Compare Control Register 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0\u00a0* CM_0 -- No Capture<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * CCIS_0 -- CCIxA<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCS -- Asynchronous Capture<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCCI -- Latched capture signal (read)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CAP -- Compare mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * OUTMOD_0 -- PWM output mode: 0 - OUT bit value<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CCTL0 = CM_0 | CCIS_0 | OUTMOD_0 | CCIE;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* TA0CCR0, Timer_A Capture\/Compare Register 0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CCR0 = 49999;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * TA0CTL, Timer_A3 Control Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * TASSEL_2 -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ID_3 -- Divider - \/8<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * MC_1 -- Up Mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CTL = TASSEL_2 | ID_3 | MC_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: Timer0_A3_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: Timer0_A3_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~OSCOFF -- Oscillator On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTCTL, Watchdog Timer+ Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS1 -- Watchdog clock source bit1 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/SIM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14147\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/SIM-580x235.png\" alt=\"SIM\" width=\"580\" height=\"235\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/SIM-580x235.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/SIM.png 751w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify\">Explanation<\/h2>\n<p style=\"text-align: justify\">Timer0_A3 is set here for compare-match interval mode. In this mode, Timer0_A3\u2019s settings are same as we would do for ordinary timer overflow interrupt. However, the key difference is the interrupt source. Note that in the diagram below timer overflow interrupt is not being used. Timer capture-compare interrupt is used instead.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Grace1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14146\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Grace1-580x411.png\" alt=\"Grace\" width=\"580\" height=\"411\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Grace1-580x411.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Grace1.png 701w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p>The desire time period is set for 400ms or 2.5Hz. At every 400ms interval, a compare-match interrupt will occur. How this is done? Well the timer is set for up counting and it has an input clock of 125kHz \u2013 1MHz SMCLK prescaled by 8.<\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Timer0_A3_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: Timer0_A3_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: Timer0_A3_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * TA0CCTL0, Capture\/Compare Control Register 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * CM_0 -- No Capture<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * CCIS_0 -- CCIxA<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCS -- Asynchronous Capture<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCCI -- Latched capture signal (read)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CAP -- Compare mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * OUTMOD_0 -- PWM output mode: 0 - OUT bit value<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0\u00a0*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CCTL0 = CM_0 | CCIS_0 | OUTMOD_0 | CCIE;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* TA0CCR0, Timer_A Capture\/Compare Register 0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CCR0 = 49999;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * TA0CTL, Timer_A3 Control Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * TASSEL_2 -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ID_3 -- Divider - \/8<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * MC_1 -- Up Mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CTL = TASSEL_2 | ID_3 | MC_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: Timer0_A3_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: Timer0_A3_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Inside the interrupt function, the LEDs of Launchpad board are toggled. Note that after the occurrence of the interrupt LPM0 is exited.<\/p>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#pragma<\/strong> vector = TIMER0_A0_VECTOR<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>__interrupt<\/strong> <strong>void<\/strong> <strong>TIMER0_A0_ISR_HOOK<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1OUT ^= (BIT0 | BIT6);<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>__bic_SR_register_on_exit<\/strong>(LPM0_bits);<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<p style=\"text-align: justify\">In the main, there is no task and in it LPM0 is entered. Thus, the process is independent of the main and is energy efficient.<\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0\u00a0\u00a0 __bis_SR_register<\/strong>(LPM0_bits);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<h2>Demo<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Comp_match.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14149\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Comp_match.jpg\" alt=\"Comp_match\" width=\"579\" height=\"590\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/Q7z8qEF04UY?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">One Wire (OW) \u2013 Interfacing DS18B20 Temperature Sensor<\/h1>\n<p style=\"text-align: justify\">One Wire (OW) or single wire communication is different from other more common and conventional communication platforms like SPI or I2C in terms of data exchange behavior. OW communication is also not very much popular compared to SPI, UART (RS232), I2C, RS485, etc. From device to device, the way of exchanging data varies but what\u2019s common is the fact that all devices that use this communication method use a sort of time-slotting mechanism. Ones and zeros are defined by high pulse time over a fixed period. This trick is widely used in infrared remote controllers. One major advantage of OW communication is the fact that no special or dedicated hardware block is needed to implement it. All that is typically needed is a digital I\/O pin. A timer can be used for tracking time-slots but it is optional. External interrupts can also be optionally used alongside the timer. DS18B20 one wire digital temperature sensor from Dallas semiconductor uses this communication protocol.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/OW-DS18B20.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14155\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/OW-DS18B20-580x381.jpg\" alt=\"OW-DS18B20\" width=\"580\" height=\"381\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/OW-DS18B20-580x381.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/OW-DS18B20.jpg 780w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<p><strong><em>one_wire.h<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS18B20_DIR<\/strong> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P2DIR<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS18B20_OUT_PORT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P2OUT<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS18B20_IN_PORT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P2IN<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS18B20_PIN<\/strong> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BIT0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS18B20_OUTPUT<\/strong>()\u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0 <strong>do<\/strong>{DS18B20_DIR |= DS18B20_PIN;}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS18B20_INPUT<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>do<\/strong>{DS18B20_DIR &amp;= ~DS18B20_PIN;}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS18B20_IN<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (DS18B20_IN_PORT &amp; DS18B20_PIN)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS18B20_OUT_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>do<\/strong>{DS18B20_OUT_PORT &amp;= ~DS18B20_PIN;}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS18B20_OUT_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>do<\/strong>{DS18B20_OUT_PORT |= DS18B20_PIN;}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TRUE<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>FALSE<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>onewire_reset<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>onewire_write_bit<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> bit_value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>onewire_read_bit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>onewire_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value);\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>onewire_read<\/strong>(<strong>void<\/strong>);\n<\/span><\/em><\/pre>\n<p><strong><em>one_wire.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"one_wire.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>onewire_reset<\/strong>(<strong>void<\/strong>)\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>unsigned<\/strong> <strong>char<\/strong> res = FALSE;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0DS18B20_OUTPUT();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0DS18B20_OUT_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>delay_us<\/strong>(480);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0DS18B20_OUT_HIGH();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>delay_us<\/strong>(60);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0DS18B20_INPUT();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0res = DS18B20_IN();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>delay_us<\/strong>(480);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>return<\/strong> res;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>onewire_write_bit<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> bit_value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUTPUT();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUT_LOW();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(bit_value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(104);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUT_HIGH();\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>onewire_read_bit<\/strong>(<strong>void<\/strong>)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 DS18B20_OUTPUT();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 DS18B20_OUT_LOW();\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 DS18B20_OUT_HIGH();\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(15);\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 DS18B20_INPUT();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong>(DS18B20_IN());\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>onewire_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>unsigned<\/strong> <strong>char<\/strong> s = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0DS18B20_OUTPUT();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>while<\/strong>(s &lt; 8)\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 <strong>if<\/strong>((value &amp; (1 &lt;&lt; s)))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUT_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 _delay_cycles(1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUT_HIGH();\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(60);\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUT_LOW();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(60);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUT_HIGH();\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 _delay_cycles(1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 s++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0}<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>onewire_read<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>unsigned<\/strong> <strong>char<\/strong> s = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>unsigned<\/strong> <strong>char<\/strong> value = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>while<\/strong>(s &lt; 8)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 DS18B20_OUTPUT();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 DS18B20_OUT_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 _delay_cycles(1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 DS18B20_OUT_HIGH();\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 DS18B20_INPUT();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 <strong>if<\/strong>(DS18B20_IN())\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 value |= (1 &lt;&lt; s);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 <strong>delay_us<\/strong>(60);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 s++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0}\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em>DS18B20.h<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"one_wire.h\"\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>convert_T<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x44<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>read_scratchpad<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  0xBE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>write_scratchpad<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x4E<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>copy_scratchpad<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  0x48\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>recall_E2<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xB8<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>read_power_supply<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xB4\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>skip_ROM<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xCC<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>resolution<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 12<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DS18B20_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>float<\/strong> <strong>DS18B20_get_temperature<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<p><strong><em>DS18B20.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"DS18B20.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DS18B20_init<\/strong>(<strong>void<\/strong>)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>onewire_reset<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>float<\/strong> <strong>DS18B20_get_temperature<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> msb = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> lsb = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>register<\/strong> <strong>float<\/strong> temp = 0.0;\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>onewire_reset<\/strong>();\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>onewire_write<\/strong>(skip_ROM);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>onewire_write<\/strong>(convert_T);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>switch<\/strong>(resolution)\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 12:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(750);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 11:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(375);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 10:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(188);\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 9:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(94);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>onewire_reset<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>onewire_write<\/strong>(skip_ROM);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>onewire_write<\/strong>(read_scratchpad);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 lsb = <strong>onewire_read<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 msb = <strong>onewire_read<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp = msb;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp *= 256.0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp += lsb;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>switch<\/strong>(resolution)\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 12:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp *= 0.0625;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 11:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp *= 0.125;\u00a0\u00a0\u00a0 \u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 10:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp *= 0.25;\u00a0\u00a0 \u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 9:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp *= 0.5;\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(40);\u00a0\u00a0 \u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> (temp);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em>main.c <\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_I2C.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"PCF8574.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"one_wire.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"DS18B20.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> symbol[8] =<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 0x00, 0x06, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_symbol<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_C<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_I<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_D<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_F<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>float<\/strong> t = 0.0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>DS18B20_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0<strong>LCD_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>lcd_symbol<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(1, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"MSP430 DS18B20\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"T\/ C\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(2, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_send<\/strong>(0, DAT);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 t = <strong>DS18B20_get_temperature<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_F<\/strong>(9, 1, t, 3);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Port Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2SEL &amp;= ~(BIT6 | BIT7);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_8MHZ != 0xFF)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Adjust this accordingly to your VCC rise time *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(100000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_8MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 8MHz *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_8MHZ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_0 -- If XTS = 0, XT1 = 32768kHz Crystal ; If XTS = 1, XT1 = 0.4 - 1-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~OSCOFF -- Oscillator On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTCTL, Watchdog Timer+ Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS1 -- Watchdog clock source bit1 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_symbol<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>LCD_send<\/strong>(0x40, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; 8; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_send<\/strong>(symbol[s], DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>LCD_send<\/strong>(0x80, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_C<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>char<\/strong> ch[5] = {0x20, 0x20, 0x20, 0x20, '\\0'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x2D;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0ch[0] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 0) &amp;&amp; (value &lt;= 9))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_I<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> ch[7] = {0x20, 0x20, 0x20, 0x20, 0x20, 0x20, '\\0'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x2D;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &gt; 9999)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value \/ 10000) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 10000)\/ 1000) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = (((value % 1000) \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 999) &amp;&amp; (value &lt;= 9999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 10000)\/ 1000) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 1000) \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 1000) \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_D<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> ch[5] = {0x2E, 0x20, 0x20, '\\0'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[1] = ((value \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value \/ 10) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_F<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>long<\/strong> tmp = 0x0000;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp = value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>print_I<\/strong>(x_pos, y_pos, tmp);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp = ((value - tmp) * 1000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(tmp &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tmp = -tmp;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(0x2D);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0<strong>LCD_putchar<\/strong>(0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt;= 10000) &amp;&amp; (value &lt; 100000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 6), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 1000) &amp;&amp; (value &lt; 10000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 5), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 100) &amp;&amp; (value &lt; 1000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 4), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 10) &amp;&amp; (value &lt; 100))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 3), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>(value &lt; 10)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 2), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS18B20.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14153\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS18B20-580x317.png\" alt=\"DS18B20\" width=\"580\" height=\"317\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS18B20-580x317.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS18B20.png 780w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify\">Explanation<\/h2>\n<p style=\"text-align: justify\">One wire communication is detailed in these application notes from Maxim:<\/p>\n<p style=\"text-align: justify\"><a href=\"https:\/\/www.maximintegrated.com\/en\/app-notes\/index.mvp\/id\/126\">https:\/\/www.maximintegrated.com\/en\/app-notes\/index.mvp\/id\/126<\/a><\/p>\n<p style=\"text-align: justify\"><a href=\"https:\/\/www.maximintegrated.com\/en\/app-notes\/index.mvp\/id\/162\">https:\/\/www.maximintegrated.com\/en\/app-notes\/index.mvp\/id\/162<\/a><\/p>\n<p style=\"text-align: justify\">These notes are all that are needed for implementing the one wire communication interface for DS18B20. Please go through these notes for details. The codes are self-explanatory and are implemented from the code examples in these app notes.<\/p>\n<h2>Demo<\/h2>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS18B20.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14157 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS18B20-580x418.jpg\" alt=\"DS18B20\" width=\"580\" height=\"418\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS18B20-580x418.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS18B20.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><br \/>\n<iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/G0rSDnkcSZA?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">One Wire (OW) \u2013 Interfacing DHT22 Hygrometer Sensor<\/h1>\n<p style=\"text-align: justify\">Like DS18B20, DHT22 (a.k.a AM2302) digital relative humidity-temperature or hygrometer sensor uses time-slotting principle over one wire to transfer data to its host controller. Apart from other technical specs, these sensors differ in terms of time-slots and in the process of data exchanging and communication bus arbitration. Since data is transferred digitally over one wire, there is no need for such sensors to be present on board and close to the host MCU. Thus, such sensors can be placed significantly far from the host micro. This is not so easily possible with analog sensors or with sensors using multiple wires. This feature is what makes OW communication method an impressive one.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/keyes-am2302-module.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14154\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/keyes-am2302-module.jpg\" alt=\"keyes-am2302-module\" width=\"300\" height=\"155\" \/><\/a><\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<p><strong><em>DHT22.h<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;delay.h&gt;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT22_DIR<\/strong> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P2DIR<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT22_OUT_PORT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P2OUT<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT22_IN_PORT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P2IN<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT22_PIN<\/strong> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BIT0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT22_DIR_OUT<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>do<\/strong>{DHT22_DIR |= DHT22_PIN;}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT22_DIR_IN<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>do<\/strong>{DHT22_DIR &amp;= ~DHT22_PIN;}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT22_IN<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (DHT22_IN_PORT &amp; DHT22_PIN)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT22_OUT_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>do<\/strong>{DHT22_OUT_PORT &amp;= ~DHT22_PIN;}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT22_OUT_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>do<\/strong>{DHT22_OUT_PORT |= DHT22_PIN;}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TRUE<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a01<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>FALSE<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> values[5];<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DHT22_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>DHT22_get_byte<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>DHT22_get_data<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<p><strong><em>DHT22.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"DHT22.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> values[5];<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DHT22_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 DHT22_DIR_IN();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>delay_ms<\/strong>(1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>DHT22_get_byte<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 8;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> value = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 DHT22_DIR_IN();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>while<\/strong>(s &gt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 value &lt;&lt;= 1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(DHT22_IN() == FALSE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(DHT22_IN())<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value |= 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(DHT22_IN());<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 s--;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>DHT22_get_data<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> chk = FALSE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> check_sum = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DHT22_DIR_OUT();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DHT22_OUT_HIGH();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DHT22_OUT_LOW();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DHT22_OUT_HIGH();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(32);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DHT22_DIR_IN();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 chk = DHT22_IN();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(2);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(chk == TRUE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(80);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 chk = DHT22_IN();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(chk == FALSE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> 2;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(80);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt;= 4; s += 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 values[s] = <strong>DHT22_get_byte<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DHT22_DIR_OUT();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DHT22_OUT_HIGH();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; 4; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 check_sum += values[s];<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(check_sum != values[4])<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> 3;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em>main.c <\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_I2C.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"PCF8574.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"DHT22.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> symbol[8] =<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 0x00, 0x06, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_symbol<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_C<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_I<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_D<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_F<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>float<\/strong> value = 0.0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> state = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>DHT22_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>lcd_symbol<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state = <strong>DHT22_get_data<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>switch<\/strong>(state)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 1:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"No Sensor Found!\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 2:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"Checksum Error!\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>default<\/strong>:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value =\u00a0 ((values[0] * 256.0 + values[1]) * 0.1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"R.H\/%:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_F<\/strong>(11, 0, value, 1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value =\u00a0 ((values[2] * 256.0 + values[3]) * 0.1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"T\/ C :\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(2, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_send<\/strong>(0, DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_F<\/strong>(11, 1, value, 1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Port Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2SEL &amp;= ~(BIT6 | BIT7);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_8MHZ != 0xFF)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Adjust this accordingly to your VCC rise time *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(100000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\/\/ Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_8MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 8MHz *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_8MHZ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_0 -- If XTS = 0, XT1 = 32768kHz Crystal ; If XTS = 1, XT1 = 0.4 - 1-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~OSCOFF -- Oscillator On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \u00a0* WDTCTL, Watchdog Timer+ Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS1 -- Watchdog clock source bit1 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_symbol<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>LCD_send<\/strong>(0x40, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; 8; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_send<\/strong>(symbol[s], DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>LCD_send<\/strong>(0x80, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_C<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>char<\/strong> ch[5] = {0x20, 0x20, 0x20, 0x20, '\\0'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x2D;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0<strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 0) &amp;&amp; (value &lt;= 9))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_I<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> ch[7] = {0x20, 0x20, 0x20, 0x20, 0x20, 0x20, '\\0'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x2D;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &gt; 9999)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value \/ 10000) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 10000)\/ 1000) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = (((value % 1000) \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0ch[4] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 999) &amp;&amp; (value &lt;= 9999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 10000)\/ 1000) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 1000) \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 1000) \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_D<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> ch[5] = {0x2E, 0x20, 0x20, '\\0'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[1] = ((value \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value \/ 10) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ch[3] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_F<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>long<\/strong> tmp = 0x0000;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp = value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>print_I<\/strong>(x_pos, y_pos, tmp);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp = ((value - tmp) * 1000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(tmp &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tmp = -tmp;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(0x2D);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt;= 10000) &amp;&amp; (value &lt; 100000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 6), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 1000) &amp;&amp; (value &lt; 10000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 5), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 100) &amp;&amp; (value &lt; 1000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 4), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 10) &amp;&amp; (value &lt; 100))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 3), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>(value &lt; 10)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0<strong>print_D<\/strong>((x_pos + 2), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2>Explanation<\/h2>\n<p class=\"Default\" style=\"text-align: justify\"><span lang=\"EN-US\" style=\"font-size: 11.0pt\">Unlike I2C, SPI, UART and other communication methods, one wire communication has no fixed communication standard. A perfect example is the difference between the way of communicating with DHT22 and DS18B20. Although they appear to share a similar methodology but the communication protocols are different.<\/span><\/p>\n<p class=\"Default\" style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DHT22.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14151\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DHT22-580x251.png\" alt=\"DHT22\" width=\"580\" height=\"251\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DHT22-580x251.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DHT22.png 948w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Shown above is the timing diagram of DHT22. If you compare the timings for ones and zeroes in both devices you\u2019ll notice that these timings are way different. Same goes for the data, command and control processes. Here again the datasheet of DHT22 is used to create the library for DHT22 and the process is just manipulation of a single GPIO pin.<\/p>\n<h2>Demo<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DHT22.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14156\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DHT22-580x322.jpg\" alt=\"DHT22\" width=\"580\" height=\"322\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DHT22-580x322.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DHT22.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/Emi-skFcs4A?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm\">Software UART<\/h1>\n<p style=\"text-align: justify\">Software UART is seldom needed but it comes really useful in absence of hardware UART. In some cases, we may not have the luxury of using hardware UART. Hardware UART block may also be absent. We already know that USCI module can be used for implementing hardware UART but this block is not present in chips like MSP430G2452. In such devices, we have to use software-generated UART. Software UART uses ordinary digital I\/Os and delays. Both additionally and optionally external interrupts and timers can be used for better results. Owing to its hardware independency and simplicity, it is very robust. However extra coding and therefore extra memory spaces are needed.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/uart_bus.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14161\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/uart_bus.jpg\" alt=\"uart_bus\" width=\"441\" height=\"259\" \/><\/a><\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<p><strong><em>SW_UART.h<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_RXD_DIR<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1DIR<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_TXD_DIR<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1DIR<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_RXD_OUT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_TXD_OUT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_RXD_IN<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1IN<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_RXD_IN_RES<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1REN<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_RXD_PIN<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BIT1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_TXD_PIN<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BIT2<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_RXD_DIR_IN<\/strong>()\u00a0\u00a0\u00a0\u00a0 <strong>do<\/strong>{SW_UART_RXD_OUT |= SW_UART_RXD_PIN; SW_UART_RXD_DIR &amp;= ~SW_UART_RXD_PIN; SW_UART_RXD_IN_RES |= SW_UART_RXD_PIN;}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_TXD_DIR_OUT<\/strong>()\u00a0\u00a0\u00a0 <strong>do<\/strong>{SW_UART_TXD_DIR |= SW_UART_TXD_PIN;}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_TXD_OUT_HIGH<\/strong>()\u00a0\u00a0 <strong>do<\/strong>{SW_UART_TXD_OUT |= SW_UART_TXD_PIN;}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_TXD_OUT_LOW<\/strong>()\u00a0\u00a0\u00a0 <strong>do<\/strong>{SW_UART_TXD_OUT &amp;= ~SW_UART_TXD_PIN;}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_RXD_INPUT<\/strong>()\u00a0\u00a0\u00a0\u00a0 (SW_UART_RXD_IN &amp; SW_UART_RXD_PIN)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>baudrate<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4800<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>no_of_bits<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>one_bit_delay<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (1000000 \/ baudrate)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>half_bit_delay<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (one_bit_delay \/ 2)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_UART_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_UART_transmit<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SW_UART_receive<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<p><strong><em>SW_UART.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_UART.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_UART_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_TXD_DIR_OUT();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_RXD_DIR_IN();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_TXD_OUT_HIGH();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_UART_transmit<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> bits = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_TXD_OUT_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(one_bit_delay);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(bits = 0; bits &lt; no_of_bits; bits++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt;&gt; bits) &amp; 0x01)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_TXD_OUT_HIGH();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_TXD_OUT_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(one_bit_delay);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_TXD_OUT_HIGH();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(one_bit_delay);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SW_UART_receive<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> bits = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> value = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(SW_UART_RXD_INPUT());<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(one_bit_delay);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(half_bit_delay);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(bits = 0; bits &lt; no_of_bits; bits++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(SW_UART_RXD_INPUT())<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value += (1 &lt;&lt; bits);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(one_bit_delay);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(SW_UART_RXD_INPUT())<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(half_bit_delay);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(half_bit_delay);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em>main.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_I2C.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"PCF8574.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_UART.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> rx_value = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> tx_value = 0x20;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_clear_home<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"TXD:\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"RXD:\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_UART_init<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 rx_value = <strong>SW_UART_receive<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>LCD_goto<\/strong>(15, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(rx_value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tx_value++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(15, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(tx_value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SW_UART_transmit<\/strong>(tx_value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(200);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0\/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_8MHZ != 0xFF) {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Adjust this accordingly to your VCC rise time *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(100000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_8MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 8MHz *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_8MHZ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_0 -- If XTS = 0, XT1 = 32768kHz Crystal ; If XTS = 1, XT1 = 0.4 - 1-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~OSCOFF -- Oscillator On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTCTL, Watchdog Timer+ Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS1 -- Watchdog clock source bit1 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/sim1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14162\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/sim1-580x334.png\" alt=\"sim\" width=\"580\" height=\"334\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/sim1-580x334.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/sim1.png 925w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify\">Explanation<\/h2>\n<p style=\"text-align: justify\">Software UART is created with digital I\/Os. Thus, the very first task we need to do is to initialize these pins. The SW_UART header file states which pins and ports are used. So, you only need to set these first. All of my codes are modular and so once you set these properly the functions and the definitions associated take care of other tasks. This, in turn, makes the codes easily to use and ready for quick modifications\/deployments.<\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_RXD_DIR<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1DIR<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_TXD_DIR<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1DIR<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_RXD_OUT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_TXD_OUT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_RXD_IN<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1IN<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_RXD_IN_RES<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1REN<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_RXD_PIN<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BIT1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_UART_TXD_PIN<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BIT2<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Once the pins are set as per requirement, it is needed to initialize them for software UART functionality.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_UART_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_TXD_DIR_OUT();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_RXD_DIR_IN();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_TXD_OUT_HIGH();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(10);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The header file also states the communication baud rate and number of bits:<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>baudrate<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4800<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>no_of_bits<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  8<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>one_bit_delay<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (1000000 \/ baudrate)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>half_bit_delay<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (one_bit_delay \/ 2)<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Based on the baud rate further timing infos are calculated. Software UART is not as reliable as hardware UART and so it is better to use low baud rates. It is even better if it can be skipped. However, when there is no other option or when there is a need for additional UART, it must be used.<\/p>\n<p style=\"text-align: justify\">The UART transmit and receive functions are written using polling methods. External digital I\/O interrupt can be used for receiving data. These functions are created just by studying the signal patterns and using the same tactics as with other software communication libraries. The trick is to emulate\/receive the signals as a real hardware would do.<\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_UART_transmit<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> bits = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_TXD_OUT_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(one_bit_delay);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(bits = 0; bits &lt; no_of_bits; bits++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt;&gt; bits) &amp; 0x01)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_TXD_OUT_HIGH();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_TXD_OUT_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(one_bit_delay);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SW_UART_TXD_OUT_HIGH();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(one_bit_delay);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SW_UART_receive<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> bits = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> value = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(SW_UART_RXD_INPUT());<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(one_bit_delay);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(half_bit_delay);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(bits = 0; bits &lt; no_of_bits; bits++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(SW_UART_RXD_INPUT())<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value += (1 &lt;&lt; bits);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(one_bit_delay);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(SW_UART_RXD_INPUT())<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(half_bit_delay);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(half_bit_delay);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2>Demo<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/UART-2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14164\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/UART-2.jpg\" alt=\"UART (2)\" width=\"500\" height=\"433\" \/><\/a> <a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/UART-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14163\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/UART-1-580x237.jpg\" alt=\"UART (1)\" width=\"580\" height=\"237\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/UART-1-580x237.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/UART-1.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/AZlA7_Ydxww?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">USCI SPI \u2013 Interfacing MPL115A1 Atmospheric Pressure Sensor<\/h1>\n<p style=\"text-align: justify\">We have already seen that MSP430\u2019s USI module can be used to implement both I2C and SPI communication platforms. However, there will be times we will have to use USCI modules. USCI is a bit complicated and is a bit difficult to use in simple terms. Here in this article, however, I kept things simple and projected ways to use this module simply. Four examples of USCI module in I2C and SPI modes will be presented in this article. The first one will demo how to interface a MSP430 device with a MPL115A1 atmospheric pressure sensor in a full-duplex SPI bus. Full-duplex SPI bus is needed the most when interfacing sensors, RTCs, SPI-based memory chips, SD cards, etc.<\/p>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Block.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14166 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Block.png\" alt=\"Block\" width=\"438\" height=\"430\" \/><\/a><\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<p><strong><em>HW_SPI.h<\/em><\/strong><\/p>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> &lt;msp430.h&gt;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>HW_SPI_init<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>SPI_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> tx_data);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SPI_read<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SPI_transfer<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> tx_data);<\/em><\/span><\/pre>\n<p><strong><em>HW_SPI.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"HW_SPI.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>HW_SPI_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UCA0CTL1 |= UCSWRST;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UCA0CTL0 = UCCKPH | UCMSB | UCMST | UCMODE_1 | UCSYNC;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UCA0CTL1 = UCSSEL_2 | UCSWRST;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UCA0BR0 = 8;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UCA0CTL1 &amp;= ~UCSWRST;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SPI_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> tx_data)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCA0TXIFG));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UCA0TXBUF = tx_data;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(UCA0STAT &amp; UCBUSY);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SPI_read<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> rx_data = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCA0RXIFG));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 rx_data = UCA0RXBUF;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(UCA0STAT &amp; UCBUSY);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> rx_data;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SPI_transfer<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> tx_data)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> rx_data = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCA0TXIFG));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UCA0TXBUF = tx_data;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(UCA0STAT &amp; UCBUSY);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCA0RXIFG));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 rx_data = UCA0RXBUF;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(UCA0STAT &amp; UCBUSY);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> rx_data;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em>MPL115A1.h<\/em><\/strong><\/p>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> &lt;msp430.h&gt;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"delay.h\"<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"HW_SPI.h\"<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>LOW<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0           0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>HIGH<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0           1<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>PRESH<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x80<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>PRESL<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x82<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>TEMPH<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x84<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>TEMPL<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x86<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>A0_H<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x88\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>A0_L<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x8A<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>B1_H<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x8C<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>B1_L<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x8E<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>B2_H<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x90\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>B2_L<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x92<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>C12_H<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x94<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>C12_L<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x96\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>conv_cmd<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x24\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>MPL115A1_CSN_PORT_OUT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0        P2OUT<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>MPL115A1_SDN_PORT_OUT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0        P2OUT<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>MPL115A1_CSN_PORT_DIR<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0        P2DIR<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>MPL115A1_SDN_PORT_DIR<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0        P2DIR<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>MPL115A1_SDN_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0        BIT0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>MPL115A1_CSN_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0        BIT1<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>MPL115A1_SDN_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P2OUT |= MPL115A1_SDN_pin<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>MPL115A1_SDN_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0        P2OUT &amp;= ~MPL115A1_SDN_pin\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>MPL115A1_CSN_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P2OUT |= MPL115A1_CSN_pin<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>MPL115A1_CSN_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0        P2OUT &amp;= ~MPL115A1_CSN_pin\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>struct<\/strong><\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>float<\/strong> A0;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>float<\/strong> B1;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>float<\/strong> B2;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>float<\/strong> C12;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}coefficients;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>MPL115A1_init<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>unsigned<\/strong> <strong>char<\/strong> <strong>MPL115A1_read<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>MPL115A1_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address, <strong>unsigned<\/strong> <strong>char<\/strong> value);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>MPL115A1_get_coefficients<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>MPL115A1_get_bytes<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> *hb, <strong>unsigned<\/strong> <strong>int<\/strong> *lb, <strong>unsigned<\/strong> <strong>char<\/strong> address);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>MPL115A1_get_data<\/strong>(<strong>float<\/strong> *pres, <strong>float<\/strong> *temp);<\/em><\/span><\/pre>\n<p><strong><em>MPL115A1.c<\/em><\/strong><\/p>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"MPL115A1.h\"<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>MPL115A1_init<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 MPL115A1_SDN_PORT_DIR |= MPL115A1_SDN_pin;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 MPL115A1_CSN_PORT_DIR |= MPL115A1_CSN_pin;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 MPL115A1_SDN_HIGH();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 MPL115A1_CSN_HIGH();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>HW_SPI_init<\/strong>();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>MPL115A1_get_coefficients<\/strong>();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>unsigned<\/strong> <strong>char<\/strong> <strong>MPL115A1_read<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> value = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 MPL115A1_CSN_LOW();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>delay_ms<\/strong>(3);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>SPI_write<\/strong>(address);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 value = <strong>SPI_read<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 value = <strong>SPI_transfer<\/strong>(address);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 MPL115A1_CSN_HIGH();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>return<\/strong> value;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>MPL115A1_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address, <strong>unsigned<\/strong> <strong>char<\/strong> value)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 MPL115A1_CSN_LOW();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>delay_ms<\/strong>(3);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>SPI_write<\/strong>((address &amp; 0x7F));<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>SPI_write<\/strong>(value);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 MPL115A1_CSN_HIGH();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>MPL115A1_get_coefficients<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> hb = 0;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> lb = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>MPL115A1_get_bytes<\/strong>(&amp;hb, &amp;lb, A0_H);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 coefficients.A0 = ((hb &lt;&lt; 5) + (lb &gt;&gt; 3) + ((lb &amp; 0x07) \/ 8.0));<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>MPL115A1_get_bytes<\/strong>(&amp;hb, &amp;lb, B1_H);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 coefficients.B1 = (((((hb &amp; 0x1F) * 0x0100) + lb) \/ 8192.0) - 3.0);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>MPL115A1_get_bytes<\/strong>(&amp;hb, &amp;lb, B2_H);\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 coefficients.B2 = (((((hb - 0x80) &lt;&lt; 8) + lb) \/ 16384.0) - 2.0);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 <strong>MPL115A1_get_bytes<\/strong>(&amp;hb, &amp;lb, C12_H);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 coefficients.C12 = (((hb * 0x100) + lb) \/ 16777216.0);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}\u00a0<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>MPL115A1_get_bytes<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> *hb, <strong>unsigned<\/strong> <strong>int<\/strong> *lb, <strong>unsigned<\/strong> <strong>char<\/strong> address)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 *hb = ((<strong>unsigned<\/strong> <strong>int<\/strong>)<strong>MPL115A1_read<\/strong>(address));<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 *lb = ((<strong>unsigned<\/strong> <strong>int<\/strong>)<strong>MPL115A1_read<\/strong>((address + 2)));<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>MPL115A1_get_data<\/strong>(<strong>float<\/strong> *pres, <strong>float<\/strong> *temp)\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> hb = 0;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> lb = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 <strong>signed<\/strong> <strong>long<\/strong> Padc = 0;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 <strong>signed<\/strong> <strong>long<\/strong> Tadc = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 <strong>MPL115A1_write<\/strong>(conv_cmd, 0);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 <strong>MPL115A1_get_bytes<\/strong>(&amp;hb, &amp;lb, PRESH);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 Padc = (((hb &lt;&lt; 8) + lb) &gt;&gt; 6);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 <strong>MPL115A1_get_bytes<\/strong>(&amp;hb, &amp;lb, TEMPH);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 Tadc = (((hb &lt;&lt; 8) + lb) &gt;&gt; 6);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 *pres = ( coefficients.A0 + (( coefficients.B1 + ( coefficients.C12 * Tadc)) * Padc) + ( coefficients.B2 * Tadc));<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 *pres = (((*pres * 65.0) \/ 1023.0) + 50.0);\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 *temp = (30.0 + ((Tadc - 472) \/ (-5.35)));<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<p><strong><em>main.c<\/em><\/strong><\/p>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> &lt;msp430.h&gt;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"delay.h\"<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"HW_SPI.h\"<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"SW_I2C.h\"<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"PCF8574.h\"<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"lcd.h\"<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"MPL115A1.h\"<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> symbol[8] =<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 0x00, 0x06, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>};<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>USCI_A0_graceInit<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>lcd_symbol<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>print_C<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>print_I<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>print_D<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>print_F<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>float<\/strong> t = 0.0;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>float<\/strong> p = 0.0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 USCI_A0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>USCI_A0_graceInit<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>LCD_init<\/strong>();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>LCD_clear_home<\/strong>();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>lcd_symbol<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"P\/kPa:\");<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"T\/ C :\");<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(2, 1);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>LCD_send<\/strong>(0, DAT);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>MPL115A1_init<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>MPL115A1_get_data<\/strong>(&amp;p, &amp;t);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_F<\/strong>(10, 0, p, 1);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_F<\/strong>(11, 1, t, 1);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(400);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 };<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 1 Port Select 2 Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1SEL2 = BIT1 | BIT2 | BIT4;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1OUT = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 1 Port Select Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1SEL = BIT1 | BIT2 | BIT4;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1DIR = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1IES = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P1IFG = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P2OUT = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P2DIR = BIT0 | BIT1;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P2IES = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P2IFG = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 3 Output Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P3OUT = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Port 3 Direction Register *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 P3DIR = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_8MHZ != 0xFF)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Adjust this accordingly to your VCC rise time *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(100000);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_8MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 8MHz *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_8MHZ;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * LFXT1S_0 -- If XTS = 0, XT1 = 32768kHz Crystal ; If XTS = 1, XT1 = 0.4 - 1-MHz crystal or resonator<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>USCI_A0_graceInit<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: USCI_A0_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: USCI_A0_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Disable USCI *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Disable USCI *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 UCA0CTL1 |= UCSWRST;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Control Register 0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * UCCKPH -- Data is captured on the first UCLK edge and changed on the following edge<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~UCCKPL -- Inactive state is low<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * UCMSB -- MSB first<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~UC7BIT -- 8-bit<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * UCMST -- Master mode<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * UCMODE_1 -- 4-Pin SPI with UCxSTE active high: slave enabled when UCxSTE = 1<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * UCSYNC -- Synchronous Mode<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 UCA0CTL0 = UCCKPH | UCMSB | UCMST | UCMODE_1 | UCSYNC;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Control Register 1<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * UCSSEL_2 -- SMCLK<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * UCSWRST -- Enabled. USCI logic held in reset state<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 UCA0CTL1 = UCSSEL_2 | UCSWRST;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Bit Rate Control Register 0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 UCA0BR0 = 8;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* Enable USCI *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 UCA0CTL1 &amp;= ~UCSWRST;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: USCI_A0_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: USCI_A0_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~OSCOFF -- Oscillator On<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/*<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * WDTCTL, Watchdog Timer+ Register<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 \u00a0\u00a0* ~WDTIS1 -- Watchdog clock source bit1 disabled<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* User code *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>lcd_symbol<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 <strong>LCD_send<\/strong>(0x40, CMD);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; 8; s++)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_send<\/strong>(symbol[s], DAT);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 <strong>LCD_send<\/strong>(0x80, CMD);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>print_C<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>char<\/strong> ch[5] = {0x20, 0x20, 0x20, 0x20, '\\0'};<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0x00)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x2D;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value \/ 100) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 100) \/ 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 100) \/ 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = ((value % 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 0) &amp;&amp; (value &lt;= 9))<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value % 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(ch);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>print_I<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>char<\/strong> ch[7] = {0x20, 0x20, 0x20, 0x20, 0x20, 0x20, '\\0'};<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x2D;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>else<\/strong><\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &gt; 9999)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value \/ 10000) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 10000)\/ 1000) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = (((value % 1000) \/ 100) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = (((value % 100) \/ 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = ((value % 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 \u00a0}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 999) &amp;&amp; (value &lt;= 9999))<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 10000)\/ 1000) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 1000) \/ 100) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = (((value % 100) \/ 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = ((value % 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 1000) \/ 100) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 100) \/ 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 100) \/ 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = ((value % 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>else<\/strong><\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value % 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0ch[2] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(ch);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>print_D<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>char<\/strong> ch[5] = {0x2E, 0x20, 0x20, '\\0'};<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 ch[1] = ((value \/ 100) + 0x30);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 1)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value \/ 10) % 10) + 0x30);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 1)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(ch);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>print_F<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>long<\/strong> tmp = 0x0000;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 tmp = value;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>print_I<\/strong>(x_pos, y_pos, tmp);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 tmp = ((value - tmp) * 1000);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>if<\/strong>(tmp &lt; 0)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tmp = -tmp;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(0x2D);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>else<\/strong><\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(0x20);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt;= 10000) &amp;&amp; (value &lt; 100000))<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 6), y_pos, tmp, points);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 1000) &amp;&amp; (value &lt; 10000))<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 5), y_pos, tmp, points);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 100) &amp;&amp; (value &lt; 1000))<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 4), y_pos, tmp, points);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 10) &amp;&amp; (value &lt; 100))<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 3), y_pos, tmp, points);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>(value &lt; 10)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 2), y_pos, tmp, points);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p style=\"text-align: justify\">The model for MPL115A1 is not available in Proteus VSM and so it cannot be simulated. Only the pinouts are shown in the schematic below.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/USCI_SPI_MPL115A1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14170\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/USCI_SPI_MPL115A1-580x278.png\" alt=\"USCI_SPI_MPL115A1\" width=\"580\" height=\"278\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/USCI_SPI_MPL115A1-580x278.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/USCI_SPI_MPL115A1.png 813w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify\">Explanation<\/h2>\n<p style=\"text-align: justify\"><strong><em>HW_SPI.h<\/em><\/strong> and <strong><em>HW_SPI.c<\/em><\/strong> files describe the functionality of USCI-SPI hardware.<\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>HW_SPI_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SPI_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> tx_data);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SPI_read<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SPI_transfer<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> tx_data);<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The first function as shown above initiates the USCI-SPI hardware. The initialization is generated using Grace. Note the Grace screenshot below:<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/USCI_A0_initialization.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14168\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/USCI_A0_initialization.png\" alt=\"USCI_A0_initialization\" width=\"539\" height=\"500\" \/><\/a><\/p>\n<p style=\"text-align: justify\">These settings describe which pins are being used, their purposes, communication speed, SPI mode, clock polarity and so on. Note the slave select pin is not shown here as we have used a different pin for that purpose.<\/p>\n<p style=\"text-align: justify\">SPI_read, SPI_write and SPI_transfer functions do their jobs as per their namings.<\/p>\n<p style=\"text-align: justify\">Now let\u2019s get inside the read and write function of USCI-SPI<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SPI_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> tx_data)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCA0TXIFG));<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UCA0TXBUF = tx_data;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(UCA0STAT &amp; UCBUSY);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SPI_read<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> rx_data = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCA0RXIFG));<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 rx_data = UCA0RXBUF;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(UCA0STAT &amp; UCBUSY);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> rx_data;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SPI_transfer<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> tx_data)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> rx_data = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCA0TXIFG));<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UCA0TXBUF = tx_data;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(UCA0STAT &amp; UCBUSY);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCA0RXIFG));<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 rx_data = UCA0RXBUF;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(UCA0STAT &amp; UCBUSY);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> rx_data;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The SPI read and write processes are simplest to understand. Before starting communication, respective data transaction interrupt flags are polled. Note that these flags are needed even if we don\u2019t use USCI interrupts. Once polled okay, data is sent from MSP430 device in SPI write mode or received while in read mode. Then we have to check if data has been fully received\/transmitted by asserting the USCI busy flag. Lastly the USCI SPI transfer function is a mixture of both SPI read and write functions.<\/p>\n<p style=\"text-align: justify\">The code here is used to read a MPL115A1 barometric pressure sensor and display atmospheric pressure-temperature data. MPL115A1 uses full-duplex SPI communication medium to communicate with its host device and here MSP430\u2019s USCI_A0 in SPI mode is employed to achieved that.<\/p>\n<h2>Demo<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/MPL115A1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14172\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/MPL115A1-580x274.jpg\" alt=\"MPL115A1\" width=\"580\" height=\"274\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/MPL115A1-580x274.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/MPL115A1.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/1uFOF87f0Hw?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">USCI SPI \u2013 Interfacing SSD1306 OLED Display<\/h1>\n<p style=\"text-align: justify\">SPI is perhaps best known for the communication speed it offers. This raw communication speed is most needed when we need to interface external memories and smart displays like TFT displays and OLED displays. Here, we will see how to interface a SSD1306 OLED display with MSP430 using half-duplex or unidirectional USCI-based SPI communication bus.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/OLED.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14167\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/OLED-580x318.png\" alt=\"OLED\" width=\"580\" height=\"318\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/OLED-580x318.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/OLED.png 585w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<p><strong><em>HW_SPI.h<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>HW_SPI_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SPI_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> tx_data);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SPI_read<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SPI_transfer<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> tx_data);<\/span><\/em><\/pre>\n<p><strong><em>HW_SPI.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"HW_SPI.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>HW_SPI_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 UCB0CTL1 |= UCSWRST;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 UCB0CTL0 = UCCKPH | UCMSB | UCMST | UCMODE_1 | UCSYNC;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 UCB0CTL1 = UCSSEL_2;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 UCB0BR0 = 8;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 UCB0BR1 = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 UCB0CTL1 &amp;= ~UCSWRST;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SPI_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> tx_data)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCB0TXIFG));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 UCB0TXBUF = tx_data;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong>(UCB0STAT &amp; UCBUSY);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SPI_read<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> rx_data = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCB0RXIFG));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 rx_data = UCB0RXBUF;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong>(UCB0STAT &amp; UCBUSY);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>return<\/strong> rx_data;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SPI_transfer<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> tx_data)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> rx_data = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCB0TXIFG));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 UCB0TXBUF = tx_data;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong>(UCB0STAT &amp; UCBUSY);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCB0RXIFG));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 rx_data = UCB0RXBUF;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong>(UCB0STAT &amp; UCBUSY);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>return<\/strong> rx_data;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em>SSD1306.h<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;MSP430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"HW_SPI.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>OLED_PORT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>OLED_DIR<\/strong> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1DIR<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RST_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BIT2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DC_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BIT3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>CS_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 BIT4<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>OLED_PORT_OUT<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 OLED_DIR |= (RST_pin | DC_pin | CS_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>OLED_RST_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 OLED_PORT |= RST_pin<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>OLED_RST_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 OLED_PORT &amp;= ~RST_pin<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>OLED_DC_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 OLED_PORT |= DC_pin<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>OLED_DC_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 OLED_PORT &amp;= ~DC_pin<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>OLED_CS_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 OLED_PORT |= CS_pin<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>OLED_CS_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 OLED_PORT &amp;= ~CS_pin<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Lower_Column_Start_Address_CMD<\/strong>\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Higher_Column_Start_Address_CMD<\/strong>\u00a0\u00a0 0x10<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Memory_Addressing_Mode_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x20<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Column_Address_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x21<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Page_Address_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x22<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Display_Start_Line_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x40<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Contrast_Control_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x81<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Charge_Pump_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x8D<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Segment_Remap_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xA0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Entire_Display_ON_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xA4<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Normal_or_Inverse_Display_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0 0xA6<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Multiplex_Ratio_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xA8<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Display_ON_or_OFF_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xAE<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Page_Start_Address_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xB0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_COM_Output_Scan_Direction_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0 0xC0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Display_Offset_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xD3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Display_Clock_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xD5<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Pre_charge_Period_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xD9<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Common_HW_Config_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xDA<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_VCOMH_Level_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xDB<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_NOP_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xE3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Horizontal_Addressing_Mode<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Vertical_Addressing_Mode<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x01<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Page_Addressing_Mode<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x02<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Disable_Charge_Pump<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Enable_Charge_Pump<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x04\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Column_Address_0_Mapped_to_SEG0<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Column_Address_0_Mapped_to_SEG127<\/strong>\u00a0\u00a0\u00a0\u00a0 0x01<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Normal_Display<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Entire_Display_ON<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x01\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Non_Inverted_Display<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a00x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Inverted_Display<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x01\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Display_OFF<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Display_ON<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x01<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Scan_from_COM0_to_63<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Scan_from_COM63_to_0<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00x08<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>x_size<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 128<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>x_max<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 x_size<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>x_min<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>y_size<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 64<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>y_max<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a08<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>y_min<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>ON<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>OFF<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>YES<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>NO<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>HIGH<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>LOW<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DAT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_GPIOs<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_reset_sequence<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> type);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_gotoxy<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_fill<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> bmp_data);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_clear_screen<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_cursor<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_char<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_string<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> *ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_chr<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_int<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_decimal<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_float<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/span><\/em><\/pre>\n<p><strong><em>SSD1306.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SSD1306.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"fonts.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_GPIOs<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 OLED_PORT_OUT();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1SEL2 = BIT5 | BIT7;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1SEL = BIT5 | BIT7;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>setup_GPIOs<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>HW_SPI_init<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_reset_sequence<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Display_ON_or_OFF_CMD + Display_OFF), CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Display_Clock_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x80, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Multiplex_Ratio_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x3F, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Display_Offset_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x00, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Display_Start_Line_CMD | 0x00), CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Charge_Pump_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Higher_Column_Start_Address_CMD | Enable_Charge_Pump), CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Memory_Addressing_Mode_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Page_Addressing_Mode, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Segment_Remap_CMD | Column_Address_0_Mapped_to_SEG127), CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_COM_Output_Scan_Direction_CMD | Scan_from_COM63_to_0), CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Common_HW_Config_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x12, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Contrast_Control_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0xCF, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Pre_charge_Period_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0xF1, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0<strong>OLED_write<\/strong>(Set_VCOMH_Level_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x40, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Entire_Display_ON_CMD | Normal_Display), CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Normal_or_Inverse_Display_CMD | Non_Inverted_Display), CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Display_ON_or_OFF_CMD + Display_ON) , CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_gotoxy<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_clear_screen<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_reset_sequence<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(40);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 OLED_RST_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(40);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 OLED_RST_HIGH();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> type)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>switch<\/strong>(type)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> DAT:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 OLED_DC_HIGH();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> CMD:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 OLED_DC_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 OLED_CS_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SPI_transfer<\/strong>(value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0OLED_CS_HIGH();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_gotoxy<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Page_Start_Address_CMD + y_pos), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(((x_pos &amp; 0x0F) | Set_Lower_Column_Start_Address_CMD), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((((x_pos &amp; 0xF0) &gt;&gt; 0x04) | Set_Higher_Column_Start_Address_CMD), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_fill<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> bmp_data)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> x_pos = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> page = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(page = y_min; page &lt; y_max; page++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Page_Start_Address_CMD + page), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Lower_Column_Start_Address_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Higher_Column_Start_Address_CMD, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(x_pos = x_min; x_pos &lt; x_max; x_pos++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(bmp_data, DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_clear_screen<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_fill<\/strong>(0x00);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_cursor<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> i = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(y_pos != 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(x_pos == 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_gotoxy<\/strong>(0x00, (y_pos + 0x02));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_gotoxy<\/strong>((0x50 + ((x_pos - 0x02) * 0x06)), (y_pos + 0x02));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(i = 0; i &lt; 6; i++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<strong>OLED_write<\/strong>(0xFF, DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_char<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> ch)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> chr = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = (ch - 32);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(x_pos &gt; (x_max - 6))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 x_pos = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 y_pos++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_gotoxy<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; 6; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(font_regular[chr][s], DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_string<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> *ch)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> chr = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> i = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> j = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(ch[j] != '\\0')<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 chr = (ch[j] - 32);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(x_pos &gt; (x_max - 0x06))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 x_pos = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 y_pos++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0<strong>OLED_gotoxy<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(i = 0; i &lt; 6; i++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(font_regular[chr][i], DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 j++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 x_pos += 6;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_chr<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> ch = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>(x_pos, y_pos, '-');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>(x_pos, y_pos,' ');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value \/ 100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 6), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 12), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 18), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 6), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 12), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 18), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 0) &amp;&amp; (value &lt;= 9))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 6), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 12), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 18), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_int<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0<strong>unsigned<\/strong> <strong>char<\/strong> ch = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>(x_pos, y_pos, '-');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>(x_pos, y_pos,' ');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &gt; 9999)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value \/ 10000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 6), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 10000)\/ 1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 12), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 1000) \/ 100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 18), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 24), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 30), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 999) &amp;&amp; (value &lt;= 9999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 10000)\/ 1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 6), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 1000) \/ 100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 12), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 18), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 24), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 30), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 1000) \/ 100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 6), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 12), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 18), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 24), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 30), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 6), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 12), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 18), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 24), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 30), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 6), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 12), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 18), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 24), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 30), y_pos , 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_decimal<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> ch = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>(x_pos, y_pos, '.');<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch = (value \/ 1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 6), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 1000) \/ 100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 12), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 18), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 3)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>((x_pos + 24), y_pos , (0x30 + ch));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_float<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>long<\/strong> tmp = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp = value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_int<\/strong>(x_pos, y_pos, tmp);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp = ((value - tmp) * 10000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(tmp &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tmp = -tmp;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt;= 10000) &amp;&amp; (value &lt; 100000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_decimal<\/strong>((x_pos + 36), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 1000) &amp;&amp; (value &lt; 10000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0<strong>OLED_print_decimal<\/strong>((x_pos + 30), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 100) &amp;&amp; (value &lt; 1000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_decimal<\/strong>((x_pos + 24), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 10) &amp;&amp; (value &lt; 100))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_decimal<\/strong>((x_pos + 18), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>(value &lt; 10)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_decimal<\/strong>((x_pos + 12), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>(x_pos, y_pos, '-');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0<strong>OLED_print_char<\/strong>(x_pos, y_pos, ' ');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em>main.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"HW_SPI.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SSD1306.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>USCI_B0_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>char<\/strong> c = -11;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> i = -111;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>float<\/strong> f = -1.9;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 USCI_B0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>USCI_B0_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_init<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_string<\/strong>(4, 0, \"MSP430G2553 SSD1306\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_string<\/strong>(16, 1, \"USCI_B0 SPI Test\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_string<\/strong>(0, 4, \"Char :\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_string<\/strong>(0, 5, \"Int. :\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_string<\/strong>(0, 6, \"Float:\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_chr<\/strong>(92, 4, c);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_int<\/strong>(92, 5, i);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_float<\/strong>(92, 6, f, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 c++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0i++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 f += 0.1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(200);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Port Select 2 Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1SEL2 = BIT5 | BIT7;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Port Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1SEL = BIT5 | BIT7;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = BIT2 | BIT3 | BIT4;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 3 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P3OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 3 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P3DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0\u00a0*\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_8MHZ != 0xFF)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Adjust this accordingly to your VCC rise time *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(100000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\/\/ apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_8MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 8MHz *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_8MHZ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_0 -- If XTS = 0, XT1 = 32768kHz Crystal ; If XTS = 1, XT1 = 0.4 - 1-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>USCI_B0_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: USCI_B0_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: USCI_B0_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Disable USCI *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= UCSWRST;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Control Register 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCCKPH -- Data is captured on the first UCLK edge and changed on the following edge<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCCKPL -- Inactive state is low<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCMSB -- MSB first<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UC7BIT -- 8-bit<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCMST -- Master mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCMODE_1 -- 4-Pin SPI with UCxSTE active high: slave enabled when UCxSTE = 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCSYNC -- Synchronous Mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL0 = UCCKPH | UCMSB | UCMST | UCMODE_1 | UCSYNC;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Control Register 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCSSEL_2 -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCSWRST -- Enabled. USCI logic held in reset state<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 = UCSSEL_2 | UCSWRST;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Bit Rate Control Register 0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0UCB0BR0 = 8;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Enable USCI *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 &amp;= ~UCSWRST;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: USCI_B0_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: USCI_B0_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~OSCOFF -- Oscillator On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTCTL, Watchdog Timer+ Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS1 -- Watchdog clock source bit1 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p style=\"text-align: justify\">The model for SPI-based SSD1306 OLED display is not available in Proteus VSM and so it cannot be simulated. Only the pinouts are shown in the schematic below.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/USCI_SPI_OLED.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14171\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/USCI_SPI_OLED-580x344.png\" alt=\"USCI_SPI_OLED\" width=\"580\" height=\"344\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/USCI_SPI_OLED-580x344.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/USCI_SPI_OLED.png 633w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify\">Explanation<\/h2>\n<p style=\"text-align: justify\">The code here basically uses the same functions as in the previous example except for the fact that USCI_B0 is used in half-duplex mode here. The rest of the code is the driver implementation for SSD1306 OLED display. Note that the driver has been cut short of graphical functions due to low memory capacity of Value-Line Devices. Explaining the operation of the OLED display is beyond the scope of this article.<\/p>\n<p style=\"text-align: justify\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/USCI_B0_initialization.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14169\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/USCI_B0_initialization.png\" alt=\"USCI_B0_initialization\" width=\"555\" height=\"497\" \/><\/a><\/p>\n<h2>Demo<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/OLED.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14173\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/OLED-580x340.jpg\" alt=\"OLED\" width=\"580\" height=\"340\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/OLED-580x340.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/OLED.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/nxlARm-RGoY?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">USCI I2C \u2013 Interfacing BH1750 Ambient Light Sensor<\/h1>\n<p style=\"text-align: justify\">Using USCI in I2C mode is a bit difficult compared to using USCI in SPI mode. This is because of the many iterations and function calls in I2C mode. Again, here I tried to keep things simple and kept things in a fashion we would normally expect. USCI-based I2C can be realized with a state-of-machine too but that way is not easy for beginners.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Block1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14174\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Block1.png\" alt=\"Block\" width=\"521\" height=\"529\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Block1.png 521w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Block1-90x90.png 90w\" sizes=\"auto, (max-width: 521px) 100vw, 521px\" \/><\/a><\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<p><strong><em>HW_I2C.h<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>I2C_USCI_init<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>I2C_USCI_set_address<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>I2C_USCI_read_byte<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>I2C_USCI_read_word<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address,<strong>unsigned<\/strong> <strong>char<\/strong> *value, <strong>unsigned<\/strong> <strong>char<\/strong> length);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>I2C_USCI_write_byte<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address, <strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<p><strong><em>HW_I2C.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"HW_I2C.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>I2C_USCI_init<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR &amp;= ~(BIT6 + BIT7);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT |= (BIT6 + BIT7);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1SEL2 |= (BIT6 | BIT7);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1SEL |= (BIT6 | BIT7);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= UCSWRST;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL0 = (UCMST | UCMODE_3 | UCSYNC);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 = (UCSSEL_2 | UCSWRST);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0BR0 = 20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0I2CSA = address;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 &amp;= ~UCSWRST;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>I2C_USCI_set_address<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= UCSWRST;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0I2CSA = address;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 &amp;= ~UCSWRST;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>I2C_USCI_read_byte<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(UCB0CTL1 &amp; UCTXSTP);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= (UCTR | UCTXSTT);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCB0TXIFG));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0TXBUF = address;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCB0TXIFG));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 &amp;= ~UCTR;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= UCTXSTT;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 IFG2 &amp;= ~UCB0TXIFG;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(UCB0CTL1 &amp; UCTXSTT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= UCTXSTP;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> UCB0RXBUF;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>I2C_USCI_read_word<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address,<strong>unsigned<\/strong> <strong>char<\/strong> *value, <strong>unsigned<\/strong> <strong>char<\/strong> length)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> i = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong> (UCB0CTL1 &amp; UCTXSTP);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= (UCTR | UCTXSTT);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong> (!(IFG2 &amp; UCB0TXIFG));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 IFG2 &amp;= ~UCB0TXIFG;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(UCB0STAT &amp; UCNACKIFG)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> UCB0STAT;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0TXBUF = address;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong> (!(IFG2 &amp; UCB0TXIFG));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(UCB0STAT &amp; UCNACKIFG)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> UCB0STAT;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 &amp;= ~UCTR;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= UCTXSTT;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 IFG2 &amp;= ~UCB0TXIFG;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong> (UCB0CTL1 &amp; UCTXSTT);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(i = 0; i &lt; (length - 1); i++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong> (!(IFG2&amp;UCB0RXIFG));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 IFG2 &amp;= ~UCB0TXIFG;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value[i] = UCB0RXBUF;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong> (!(IFG2 &amp; UCB0RXIFG));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 IFG2 &amp;= ~UCB0TXIFG;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= UCTXSTP;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 value[length - 1] = UCB0RXBUF;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 IFG2 &amp;= ~UCB0TXIFG;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>I2C_USCI_write_byte<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address, <strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(UCB0CTL1 &amp; UCTXSTP);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= (UCTR | UCTXSTT);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCB0TXIFG));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(UCB0STAT &amp; UCNACKIFG)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0<strong>return<\/strong> UCB0STAT;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0TXBUF = address;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCB0TXIFG));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(UCB0STAT &amp; UCNACKIFG)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> UCB0STAT;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0TXBUF = value;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(!(IFG2 &amp; UCB0TXIFG));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(UCB0STAT &amp; UCNACKIFG)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> UCB0STAT;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= UCTXSTP;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 IFG2 &amp;= ~UCB0TXIFG;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em>BH1750.h<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"HW_I2C.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong>\u00a0 <strong>BH1750_addr<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a00x23<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong>\u00a0 <strong>power_down<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a00x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong>\u00a0 <strong>power_up<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a00x01<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong>\u00a0 <strong>reset<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a00x07<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong>\u00a0 <strong>cont_H_res_mode1<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a00x10<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong>\u00a0 <strong>cont_H_res_mode2<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a00x11\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong>\u00a0 <strong>cont_L_res_mode<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a00x13\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong>\u00a0 <strong>one_time_H_res_mode1<\/strong>\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a00x20<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong>\u00a0 <strong>one_time_H_res_mode2<\/strong>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a00x21<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong>\u00a0 <strong>one_time_L_res_mode<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0        \u00a00x23\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BH1750_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BH1750_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> cmd);\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>int<\/strong> <strong>BH1750_read_word<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>int<\/strong> <strong>get_lux_value<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> mode, <strong>unsigned<\/strong> <strong>int<\/strong> delay_time);<\/span><\/em><\/pre>\n<p><strong><em>BH1750.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"BH1750.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BH1750_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>I2C_USCI_init<\/strong>(BH1750_addr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>delay_ms<\/strong>(10);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>BH1750_write<\/strong>(power_down);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BH1750_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> cmd)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_USCI_write_byte<\/strong>(BH1750_addr, cmd);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>int<\/strong> <strong>BH1750_read_word<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>unsigned<\/strong> <strong>long<\/strong> value = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> bytes[2] = {0x00, 0x00};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>I2C_USCI_read_word<\/strong>(0x11, bytes, 2);\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 value = ((bytes[1] &lt;&lt; 8) | bytes[0]);\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>int<\/strong> <strong>get_lux_value<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> mode, <strong>unsigned<\/strong> <strong>int<\/strong> delay_time)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>unsigned<\/strong> <strong>long<\/strong> lux_value = 0x00;\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> dly = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0x08;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong>(s)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>BH1750_write<\/strong>(power_up);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>BH1750_write<\/strong>(mode);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 lux_value += <strong>BH1750_read_word<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(dly = 0; dly &lt; delay_time; dly += 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>BH1750_write<\/strong>(power_down);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0   s--;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 lux_value &gt;&gt;= 3;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>return<\/strong> ((<strong>unsigned<\/strong> <strong>int<\/strong>)lux_value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<p><strong><em>main.c <\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"HW_I2C.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_I2C.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"PCF8574.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"BH1750.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>USCI_B0_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_print<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> LX = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> tmp = 0x0000;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 USCI_B0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>USCI_B0_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>BH1750_init<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_clear_home<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"MSP430G USCI I2C\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"Lux:\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tmp = <strong>get_lux_value<\/strong>(cont_H_res_mode1, 20);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(tmp &gt; 10)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LX = tmp;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0LX = <strong>get_lux_value<\/strong>(cont_H_res_mode1, 140);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>lcd_print<\/strong>(11, 1, LX);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(200);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Port Select 2 Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1SEL2 = BIT6 | BIT7;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Port Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1SEL = BIT6 | BIT7;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 3 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P3OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 3 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P3DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_1MHZ != 0xFF)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 * apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_1MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 1MHz *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_1MHZ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_0 -- If XTS = 0, XT1 = 32768kHz Crystal ; If XTS = 1, XT1 = 0.4 - 1-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>USCI_B0_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: USCI_B0_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: USCI_B0_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Disable USCI *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= UCSWRST;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Control Register 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCA10 -- Own address is a 7-bit address<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCSLA10 -- Address slave with 7-bit address<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCMM -- Single master environment. There is no other master in the system. The address compare unit is disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCMST -- Master mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCMODE_3 -- I2C Mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCSYNC -- Synchronous Mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL0 = UCMST | UCMODE_3 | UCSYNC;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Control Register 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCSSEL_2 -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCTR -- Receiver<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCTXNACK -- Acknowledge normally<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCTXSTP -- No STOP generated<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCTXSTT -- Do not generate START condition<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCSWRST -- Enabled. USCI logic held in reset state<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 = UCSSEL_2 | UCSWRST;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* I2C Slave Address Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0I2CSA = BH1750_addr;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Bit Rate Control Register 0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0BR0 = 20;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Enable USCI *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 &amp;= ~UCSWRST;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: USCI_B0_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: USCI_B0_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0\u00a0* ~OSCOFF -- Oscillator On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTCTL, Watchdog Timer+ Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS1 -- Watchdog clock source bit1 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_print<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> tmp[6] = {0x20, 0x20, 0x20, 0x20, 0x20, '\\0'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp[0] = ((value \/ 10000) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp[1] = (((value \/ 1000) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp[2] = (((value \/ 100) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp[3] = (((value \/ 10) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp[4] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(tmp);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p style=\"text-align: justify\">The model for BH1750FVI is not available in Proteus VSM and so it cannot be simulated. Only the pinouts are shown in the schematic below.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/BH1750-Sim.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14181\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/BH1750-Sim-580x350.png\" alt=\"BH1750 Sim\" width=\"580\" height=\"350\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/BH1750-Sim-580x350.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/BH1750-Sim.png 632w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify\">Explanation<\/h2>\n<p style=\"text-align: justify\">Just like USCI SPI setup, Grace is used for setting the basic parameters for USCI I2C communication. Note only USCI_B0 supports I2C communication unlike USCI SPI communication. Since our MSP430 micro is the master device in the I2C bus, USCI module is configured as I2C master. One particular thing to observe is the <strong><em>I2C Slave Address<\/em><\/strong>. Here as shown in the screenshot below, it is 208. This is not an important figure. Same goes for the <strong><em>I2C Own Address<\/em><\/strong> part. No interrupts are to be used and so none of them are enabled.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Grace2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14180\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Grace2.png\" alt=\"Grace\" width=\"561\" height=\"522\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Out of the configuration set by Grace, I2C pins are set also in the I2C initialization function. This should be done manually before initializing the USCI hardware.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>I2C_USCI_init<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR &amp;= ~(BIT6 + BIT7);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT |= (BIT6 + BIT7);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1SEL2 |= (BIT6 | BIT7);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1SEL |= (BIT6 | BIT7);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= UCSWRST;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL0 = (UCMST | UCMODE_3 | UCSYNC);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 = (UCSSEL_2 | UCSWRST);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0BR0 = 20;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0I2CSA = address;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 &amp;= ~UCSWRST;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Off all the functions used in the HW_I2C files, the following are of high importance:<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>I2C_USCI_read_byte<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>I2C_USCI_read_word<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address,<strong>unsigned<\/strong> <strong>char<\/strong> *value, <strong>unsigned<\/strong> <strong>char<\/strong> length);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>I2C_USCI_write_byte<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address, <strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Their names suggest their functionality. The codes inside them are arranged as such that they take care of start-stop conditions generation, clock generation, etc. I2C communication needs device address along side read-write info. Based on read-write info, the host device writes or read I2C bus. The drawback of using I2C with these functions is the vulnerability to falling inside a loop since loops are used in these functions widely. This setback can be overcome with timeouts.<\/p>\n<h2 style=\"text-align: justify\">Demo<\/h2>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Lux.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14179 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Lux-580x475.jpg\" alt=\"Lux\" width=\"580\" height=\"475\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Lux-580x475.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Lux.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><br \/>\n<iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/RkTjCcCLEDg?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">USCI I2C \u2013 Interfacing DS1307 Real Time Clock (RTC)<\/h1>\n<p style=\"text-align: justify\">This part shows another example of I2C implementation using MSP430\u2019s USCI hardware. This time the I2C device that is connected with a MSP430 is the popular DS1307 real time clock (RTC). This is the last USCI hardware example.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS1307.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14176\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS1307.jpg\" alt=\"DS1307\" width=\"279\" height=\"290\" \/><\/a><\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<p><strong><em>DS1307.h<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"HW_I2C.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS1307_address<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x68<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>sec_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>min_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x01<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>hr_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x02<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>day_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x03<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>date_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x04<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>month_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x05<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>year_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x06<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>control_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x07<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DS1307_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>DS1307_read<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DS1307_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address, <strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>bcd_to_decimal<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>decimal_to_bcd<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>get_time<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>get_date<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>set_time<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>set_date<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<p><strong><em>DS1307.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"DS1307.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>struct<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> sec;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> min;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> hr;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> day;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> dt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> mt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> yr;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}rtc;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DS1307_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>I2C_USCI_init<\/strong>(DS1307_address);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(sec_reg, 0x00);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(control_reg, 0x90);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>DS1307_read<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> <strong>I2C_USCI_read_byte<\/strong>(address);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DS1307_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address, <strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_USCI_write_byte<\/strong>(address, value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>bcd_to_decimal<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> ((value &amp; 0x0F) + (((value &amp; 0xF0) &gt;&gt; 0x04) * 0x0A));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>decimal_to_bcd<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> (((value \/ 0x0A) &lt;&lt; 0x04) &amp; 0xF0) | ((value % 0x0A) &amp; 0x0F);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>get_time<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.sec = <strong>DS1307_read<\/strong>(sec_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.sec = <strong>bcd_to_decimal<\/strong>(rtc.sec);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.min = <strong>DS1307_read<\/strong>(min_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.min = <strong>bcd_to_decimal<\/strong>(rtc.min);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.hr = <strong>DS1307_read<\/strong>(hr_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.hr = <strong>bcd_to_decimal<\/strong>(rtc.hr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>get_date<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.day = <strong>DS1307_read<\/strong>(day_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.day = <strong>bcd_to_decimal<\/strong>(rtc.day);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.dt = <strong>DS1307_read<\/strong>(date_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.dt = <strong>bcd_to_decimal<\/strong>(rtc.dt);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.mt = <strong>DS1307_read<\/strong>(month_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.mt = <strong>bcd_to_decimal<\/strong>(rtc.mt);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.yr = <strong>DS1307_read<\/strong>(year_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.yr = <strong>bcd_to_decimal<\/strong>(rtc.yr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>set_time<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.sec = <strong>decimal_to_bcd<\/strong>(rtc.sec);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(sec_reg, rtc.sec);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.min = <strong>decimal_to_bcd<\/strong>(rtc.min);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0<strong>DS1307_write<\/strong>(min_reg, rtc.min);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.hr = <strong>decimal_to_bcd<\/strong>(rtc.hr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(hr_reg, rtc.hr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>set_date<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.day = <strong>decimal_to_bcd<\/strong>(rtc.day);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(day_reg, rtc.day);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.dt = <strong>decimal_to_bcd<\/strong>(rtc.dt);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(date_reg, rtc.dt);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.mt = <strong>decimal_to_bcd<\/strong>(rtc.mt);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(month_reg, rtc.mt);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.yr = <strong>decimal_to_bcd<\/strong>(rtc.yr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(year_reg, rtc.yr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em>main.c <\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"HW_I2C.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"DS1307.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>struct<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> sec;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> min;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> hr;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> day;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> dt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> mt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> yr;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}rtc;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>USCI_B0_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>show_value<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>display_time<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.sec = 30;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.min = 58;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 rtc.hr = 23;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 USCI_B0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>USCI_B0_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_clear_home<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"MSP430G USCI I2C\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>DS1307_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>set_time<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>get_time<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>display_time<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Port Select 2 Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1SEL2 = BIT6 | BIT7;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Port Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1SEL = BIT6 | BIT7;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 3 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P3OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 3 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P3DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_1MHZ != 0xFF)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 * apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_1MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 1MHz *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_1MHZ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_0 -- If XTS = 0, XT1 = 32768kHz Crystal ; If XTS = 1, XT1 = 0.4 - 1-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>USCI_B0_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: USCI_B0_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: USCI_B0_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Disable USCI *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 |= UCSWRST;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Control Register 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCA10 -- Own address is a 7-bit address<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCSLA10 -- Address slave with 7-bit address<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCMM -- Single master environment. There is no other master in the system. The address compare unit is disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCMST -- Master mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCMODE_3 -- I2C Mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCSYNC -- Synchronous Mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL0 = UCMST | UCMODE_3 | UCSYNC;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Control Register 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCSSEL_2 -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCTR -- Receiver<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCTXNACK -- Acknowledge normally<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCTXSTP -- No STOP generated<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~UCTXSTT -- Do not generate START condition<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * UCSWRST -- Enabled. USCI logic held in reset state<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 = UCSSEL_2 | UCSWRST;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* I2C Slave Address Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0I2CSA = DS1307_address;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Bit Rate Control Register 0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0BR0 = 20;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Enable USCI *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 UCB0CTL1 &amp;= ~UCSWRST;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: USCI_B0_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: USCI_B0_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~OSCOFF -- Oscillator On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0<strong>__bis_SR_register<\/strong>(GIE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTCTL, Watchdog Timer+ Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS1 -- Watchdog clock source bit1 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>show_value<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>char<\/strong> chr = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 chr = ((value \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 chr = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 1), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>display_time<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(6, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(' ');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(9, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(' ');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(450);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>show_value<\/strong>(7, 1, rtc.hr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>show_value<\/strong>(10, 1, rtc.min);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>show_value<\/strong>(4, 1, rtc.sec);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(6, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(':');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(9, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(':');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(450);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p>DS1307 simulation encountered some weird issues but it does work.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS1307-sim.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14175\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS1307-sim-580x316.png\" alt=\"DS1307 sim\" width=\"580\" height=\"316\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS1307-sim-580x316.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DS1307-sim.png 767w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify\">Explanation<\/h2>\n<p style=\"text-align: justify\">Since it uses the same ideas as in the previous example, there is hardly a thing to explain here.<\/p>\n<h2>Demo<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/RTC.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14178\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/RTC.jpg\" alt=\"RTC\" width=\"463\" height=\"590\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/bhwn6l5ztks?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">ADC10 with Direct Memory Access (DMA)<\/h1>\n<p style=\"text-align: justify\">The concept of Direct Memory Access (DMA) or Data Transfer Controller (DTC) is usually found in 32-bit ARM-Cortex-based micros and in some highly advanced DSP microcontrollers. In recent times, a few new generation 8-bit and 16-bit devices have emerged with DMA hardware feature. The DMA hardware may look a bit complicated for those who are new to it but it is practically very simple. Just consider what you have been doing all these times without DMA. Consider an ADC for an example. Without DMA, the ADC senses its channel(s) and saves sensed data on an ADC result register waiting to be read and continue the same operation over and over again. This process involves the CPU very often as sensing\/extracting analog data, storing it and starting ADC conversion all needs CPU\u2019s attention. Thus, the CPU bus is always busy with these engagements. With DMA the process becomes more automatic and intelligent. The DMA controller automatically transfers AD conversion data to specified memory location(s) using its separate data bus. In the whole process the CPU is not involved much. Conversions take place and the conversion results are immediately transferred. Thus, the process becomes both autonomous and fast.<\/p>\n<p style=\"text-align: justify\">Please note that the DMA bus is only available for ADC to memory or in other words peripheral to memory transfers. It cannot be used for other peripherals like USCI, USI, etc. or for memory-memory transfers. However, it is not a big issue for now.<\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_I2C.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"PCF8574.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>no_of_samples<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 16<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>int<\/strong> adc_pointer[no_of_samples];<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>ADC10_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_print<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> adc_avg = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 10-bit Analog to Digital Converter (ADC) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>ADC10_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_clear_home<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"MSP430 ADC + DMA:\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"A1:\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0adc_avg = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT |= BIT0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ADC10CTL0 &amp;= ~ENC;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong> (ADC10CTL1 &amp; BUSY);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ADC10CTL0 |= (ENC | ADC10SC);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; no_of_samples; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 adc_avg += adc_pointer[s];<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 adc_avg = (adc_avg \/ no_of_samples);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>lcd_print<\/strong>(12, 1, adc_avg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT &amp;= ~BIT0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = BIT0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_8MHZ != 0xFF)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Adjust this accordingly to your VCC rise time *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(100000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0BCSCTL1 = CALBC1_8MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 8MHz *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_8MHZ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_2 -- If XTS = 0, XT1 = VLOCLK ; If XTS = 1, XT1 = 3 - 16-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_2 | XCAP_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>ADC10_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: ADC10_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: ADC10_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* disable ADC10 during initialization *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10CTL0 &amp;= ~ENC;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Control Register 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10SC -- No conversion<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ENC -- Disable ADC<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10IFG -- Clear ADC interrupt flag<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10IE -- Disable ADC interrupt<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10ON -- Switch On ADC10<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~REFON -- Disable ADC reference generator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~REF2_5V -- Set reference voltage generator = 1.5V<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * MSC -- Enable multiple sample and conversion<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~REFBURST -- Reference buffer on continuously<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~REFOUT -- Reference output off<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10SR -- Reference buffer supports up to ~200 ksps<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10SHT_2 -- 16 x ADC10CLKs<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SREF_0 -- VR+ = VCC and VR- = VSS<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10CTL0 = ADC10ON | MSC | ADC10SHT_2 | SREF_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Control Register 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10BUSY -- No operation is active<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * CONSEQ_2 -- Repeat single channel<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10SSEL_0 -- ADC10OSC<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10DIV_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ISSH -- Input signal not inverted<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10DF -- ADC10 Data Format as binary<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SHS_0 -- ADC10SC<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * INCH_1 -- ADC Channel 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10CTL1 = CONSEQ_2 | ADC10SSEL_0 | ADC10DIV_0 | SHS_0 | INCH_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Analog (Input) Enable Control Register 0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10AE0 = 0x2;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Data Transfer Control Register 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10TB -- One-block transfer mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10CT -- Data is transferred continuously after every conversion<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~ADC10TB indicates that ADC10TB has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10DTC0 = ADC10CT;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Data Transfer Control Register 1 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10DTC1 = no_of_samples;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Data Transfer Start Address *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10SA = ((<strong>unsigned<\/strong> <strong>int<\/strong>)adc_pointer);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* enable ADC10 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10CTL0 |= ENC;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: ADC10_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: ADC10_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Clear oscillator fault flag with software delay *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>do<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Clear OSC fault flag<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 IFG1 &amp;= ~OFIFG;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ 50us delay<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(400);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 } <strong>while<\/strong> (IFG1 &amp; OFIFG);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~OSCOFF -- Oscillator On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTCTL, Watchdog Timer+ Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS1 -- Watchdog clock source bit1 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_print<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> chr = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = ((value \/ 1000) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = (((value \/ 100) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 1), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = (((value \/ 10) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 2), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 3), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/adc-dma.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14185\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/adc-dma-580x302.png\" alt=\"adc+dma\" width=\"580\" height=\"302\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/adc-dma-580x302.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/adc-dma.png 737w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify\">Explanation<\/h2>\n<p style=\"text-align: justify\">Use <strong><em>Power User<\/em><\/strong> setup screen of Grace to configure the DTC. Observe the setup as shown below:<\/p>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/dma.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14186 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/dma-580x511.png\" alt=\"dma\" width=\"580\" height=\"511\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/dma-580x511.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/dma.png 794w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Here only channel 1 was used. The setup is similar to the first ADC10 example setup. The main difference is the enabling of the DTC block. Note the starting memory address and the memory block size. The memory we are talking about here is no other than MSP430\u2019s RAM. Unless you want to assign a different pointer address, keep it untouched. So why is it pointed at RAM location 512 (0x200) by default? The answer is the fact that this is first RAM location for our target MSP430G2452 microcontroller. Check the memory map below:<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Memory-Address.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14187\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Memory-Address-580x181.png\" alt=\"Memory Address\" width=\"580\" height=\"181\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Memory-Address-580x181.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Memory-Address.png 674w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">The block size indicates that number of locations that we will need to store ADC10 data. MSP430s are 16-bit microcontrollers and since ADC10 gives 10-bit data, we need sixteen word-sized (16-bit) locations to store sixteen ADC samples. These 16 samples are to be averaged.<\/p>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>no_of_samples<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 16<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>....<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>unsigned<\/strong> <strong>int<\/strong> adc_pointer[no_of_samples];<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>....<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>....<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>ADC10DTC1 = no_of_samples;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>ADC10SA = ((<strong>unsigned<\/strong> <strong>int<\/strong>)adc_pointer);<\/em><\/span><\/pre>\n<p style=\"text-align: justify\">Grace generates the initialization code but the above lines must be edited by the coder.<\/p>\n<p style=\"text-align: justify\">In the main function, ADC10 is commanded to begin and store conversions. Once all sixteen ADC10 data are captured, they are summed up and averaged. The averaged data is shown on a LCD screen. Note that ADC10 interrupt is not used and not anywhere in the code the <em>ADC10MEM<\/em> register is directly read. The ADC is read and processed by the DMA, freeing up the CPU for other tasks. The process is repetitive, automomous and continuous.<\/p>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>adc_avg = 0;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>P1OUT |= BIT0;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>ADC10CTL0 &amp;= ~ENC;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>while<\/strong> (ADC10CTL1 &amp; BUSY);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>ADC10CTL0 |= (ENC | ADC10SC);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>for<\/strong>(s = 0; s &lt; no_of_samples; s++)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 adc_avg += adc_pointer[s];<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>adc_avg = (adc_avg \/ no_of_samples);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>lcd_print<\/strong>(12, 1, adc_avg);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>delay_ms<\/strong>(100);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>P1OUT &amp;= ~BIT0;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>delay_ms<\/strong>(100);<\/em><\/span><\/pre>\n<h2>Demo<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DMA.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14193\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DMA-580x368.jpg\" alt=\"DMA\" width=\"580\" height=\"368\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DMA-580x368.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/DMA.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/0V2zOTRwPKI?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">Sensing a Sequence of ADC10 Channels with DMA<\/h1>\n<p style=\"text-align: justify\">We have seen in the last segment that how we can compute the average value of an ADC10 channel without involving the CPU much and using the MSP430\u2019s DMA\/DTC controller. The DTC of MSP430s can be used in many innovative ways. One such way is to sense multiple channels in a row. In this method, the ADC is basically scanned in an orderly fashion from the coder-specified topmost channel to the bottommost (channel 0), saving the result of each ADC channel conversion in separate memory locations. Scanning a sequence of AD channels in this way has many potential applications. Consider the case of a solar charger controller. With one command you get both the input and output voltages, and currents quickly from your MSP430 micro. DMA-assisted ADC scanning is perhaps the most efficient and simple way to sense multiple ADC channels quickly.<\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_I2C.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"PCF8574.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>int<\/strong> ADC_value[2] = {0, 0};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>ADC10_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_print<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 10-bit Analog to Digital Converter (ADC) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>ADC10_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_clear_home<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"A0:\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"A1:\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ADC10CTL0 &amp;= ~ENC;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong> (ADC10CTL1 &amp; BUSY);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ADC10CTL0 |= (ENC | ADC10SC);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>lcd_print<\/strong>(12, 0, ADC_value[1]);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>lcd_print<\/strong>(12, 1, ADC_value[0]);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(400);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_8MHZ != 0xFF)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Adjust this accordingly to your VCC rise time *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(100000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_8MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 8MHz *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_8MHZ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_2 -- If XTS = 0, XT1 = VLOCLK ; If XTS = 1, XT1 = 3 - 16-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_2 | XCAP_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>ADC10_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: ADC10_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: ADC10_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* disable ADC10 during initialization *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10CTL0 &amp;= ~ENC;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Control Register 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10SC -- No conversion<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ENC -- Disable ADC<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10IFG -- Clear ADC interrupt flag<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10IE -- Disable ADC interrupt<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10ON -- Switch On ADC10<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~REFON -- Disable ADC reference generator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~REF2_5V -- Set reference voltage generator = 1.5V<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * MSC -- Enable multiple sample and conversion<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~REFBURST -- Reference buffer on continuously<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~REFOUT -- Reference output off<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10SR -- Reference buffer supports up to ~200 ksps<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10SHT_2 -- 16 x ADC10CLKs<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SREF_0 -- VR+ = VCC and VR- = VSS<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10CTL0 = ADC10ON | MSC | ADC10SHT_2 | SREF_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Control Register 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10BUSY -- No operation is active<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * CONSEQ_3 -- Repeat sequence of channels<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10SSEL_0 -- ADC10OSC<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10DIV_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ISSH -- Input signal not inverted<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10DF -- ADC10 Data Format as binary<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SHS_0 -- ADC10SC<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * INCH_1 -- ADC Channel 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10CTL1 = CONSEQ_3 | ADC10SSEL_0 | ADC10DIV_0 | SHS_0 | INCH_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Analog (Input) Enable Control Register 0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10AE0 = 0x3;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Data Transfer Control Register 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10TB -- One-block transfer mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10CT -- Data is transferred continuously after every conversion<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~ADC10TB indicates that ADC10TB has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10DTC0 = ADC10CT;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Data Transfer Control Register 1 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10DTC1 = 2;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Data Transfer Start Address *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10SA = ((<strong>unsigned<\/strong> <strong>int<\/strong>)ADC_value);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* enable ADC10 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10CTL0 |= ENC;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: ADC10_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: ADC10_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Clear oscillator fault flag with software delay *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>do<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Clear OSC fault flag<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 IFG1 &amp;= ~OFIFG;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ 50us delay<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(400);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 } <strong>while<\/strong> (IFG1 &amp; OFIFG);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~OSCOFF -- Oscillator On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTCTL, Watchdog Timer+ Register<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS1 -- Watchdog clock source bit1 disabled<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_print<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> chr = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = ((value \/ 1000) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = (((value \/ 100) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 1), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = (((value \/ 10) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 2), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0chr = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 3), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_adc.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14189 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_adc-580x332.png\" alt=\"multi_adc\" width=\"580\" height=\"332\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_adc-580x332.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_adc.png 784w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify\">Explanation<\/h2>\n<p style=\"text-align: justify\">Except some minor differences, the Grace setup here is same as the one used in the DMA example. The first difference is the <strong><em>Sequence of Channels<\/em><\/strong> selection, second is the number of ADC channels and finally the size of memory block.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/seq.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14191\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/seq-580x520.png\" alt=\"seq\" width=\"580\" height=\"520\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/seq-580x520.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/seq.png 788w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">In the main, most of the things are same as in the DMA example. Since two channels are read, two memory locations store individual ADC data. Scanning starts from topmost channel to the bottommost and so the bottommost memory location will hold the data of the topmost channel and vice versa. In short, the memory locations are flipped with respect to ADC channels.<\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">ADC10CTL0 &amp;= ~ENC;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>while<\/strong> (ADC10CTL1 &amp; BUSY);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">ADC10CTL0 |= (ENC | ADC10SC);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>lcd_print<\/strong>(12, 0, ADC_value[1]);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>lcd_print<\/strong>(12, 1, ADC_value[0]);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>delay_ms<\/strong>(400);<\/span><\/em><\/pre>\n<h2>Demo<\/h2>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/seq.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14192 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/seq-580x324.jpg\" alt=\"seq\" width=\"580\" height=\"324\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/seq-580x324.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/seq.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/ZSfkjQHgrKs?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">Sensing Multiple Out-of-Sequence ADC10 Channels with DMA<\/h1>\n<p style=\"text-align: justify\">Due to several obligations and design constraints, we may often fall in situations where we would not be able to enjoy the sequential DTC-assisted ADC scanning feature demonstrated in the previous section. ADC channels may not be in an orderly sequence. Still we can apply similar techniques as in ADC scanning but certain things are needed to be kept in mind in such cases.<\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"delay.h\"<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_I2C.h\"<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"PCF8574.h\"<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>no_of_channels<\/strong> 12<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>int<\/strong> ADC_value[no_of_channels];<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>ADC10_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_print<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Stop watchdog timer from timing out during initial start-up. *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 GPIO *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 2xx family clock systems (BCS) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 10-bit Analog to Digital Converter (ADC) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>ADC10_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 System Registers *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>System_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* initialize Config for the MSP430 WDT+ *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>WDTplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_init<\/strong>();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_clear_home<\/strong>();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ADC10CTL0 &amp;= ~ENC;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong> (ADC10CTL1 &amp; BUSY);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ADC10CTL0 |= (ENC | ADC10SC);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"A03:\");<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>lcd_print<\/strong>(12, 0, ADC_value[8]);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"A11:\");<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>lcd_print<\/strong>(12, 1, ADC_value[0]);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT ^= BIT0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(900);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ADC10CTL0 &amp;= ~ENC;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong> (ADC10CTL1 &amp; BUSY);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ADC10CTL0 |= (ENC | ADC10SC);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"A00:\");<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>lcd_print<\/strong>(12, 0, ADC_value[11]);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"A10:\");<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>lcd_print<\/strong>(12, 1, ADC_value[1]);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT ^= BIT0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(900);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = BIT0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IES = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Port Select Register *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2SEL &amp;= ~(BIT6 | BIT7);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0\/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_8MHZ != 0xFF)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Adjust this accordingly to your VCC rise time *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(100000);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_8MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 8MHz *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_8MHZ;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0\u00a0* Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_2 -- If XTS = 0, XT1 = VLOCLK ; If XTS = 1, XT1 = 3 - 16-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_2 | XCAP_1;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>ADC10_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: ADC10_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: ADC10_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* disable ADC10 during initialization *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10CTL0 &amp;= ~ENC;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Control Register 0<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10SC -- No conversion<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ENC -- Disable ADC<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10IFG -- Clear ADC interrupt flag<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10IE -- Disable ADC interrupt<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10ON -- Switch On ADC10<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~REFON -- Disable ADC reference generator<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~REF2_5V -- Set reference voltage generator = 1.5V<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * MSC -- Enable multiple sample and conversion<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~REFBURST -- Reference buffer on continuously<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~REFOUT -- Reference output off<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10SR -- Reference buffer supports up to ~200 ksps<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10SHT_2 -- 16 x ADC10CLKs<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SREF_0 -- VR+ = VCC and VR- = VSS<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10CTL0 = ADC10ON | MSC | ADC10SHT_2 | SREF_0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Control Register 1<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10BUSY -- No operation is active<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * CONSEQ_3 -- Repeat sequence of channels<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10SSEL_0 -- ADC10OSC<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10DIV_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ISSH -- Input signal not inverted<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10DF -- ADC10 Data Format as binary<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SHS_0 -- ADC10SC<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * INCH_11 -- ADC convert VCC<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10CTL1 = CONSEQ_3 | ADC10SSEL_0 | ADC10DIV_0 | SHS_0 | INCH_11;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Analog (Input) Enable Control Register 0 *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10AE0 = 0x8;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Data Transfer Control Register 0<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~ADC10TB -- One-block transfer mode<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ADC10CT -- Data is transferred continuously after every conversion<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~ADC10TB indicates that ADC10TB has value zero<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10DTC0 = ADC10CT;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Data Transfer Control Register 1 *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10DTC1 = 12;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Data Transfer Start Address *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10SA = ((<strong>unsigned<\/strong> <strong>int<\/strong>)ADC_value);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* enable ADC10 *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ADC10CTL0 |= ENC;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: ADC10_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: ADC10_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>System_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Clear oscillator fault flag with software delay *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>do<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Clear OSC fault flag<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 IFG1 &amp;= ~OFIFG;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ 50us delay<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(400);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 } <strong>while<\/strong> (IFG1 &amp; OFIFG);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SR, Status Register<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG1 -- Disable System clock generator 1<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SCG0 -- Disable System clock generator 0<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~OSCOFF -- Oscillator On<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~CPUOFF -- CPU On<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * GIE -- General interrupt enable<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(GIE);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: System_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>WDTplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTCTL, Watchdog Timer+ Register<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTPW -- Watchdog password<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * WDTHOLD -- Watchdog timer+ is stopped<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMIES -- NMI on rising edge<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTNMI -- Reset function<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTTMSEL -- Watchdog mode<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTCNTCL -- No action<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTSSEL -- SMCLK<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS0 -- Watchdog clock source bit0 disabled<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~WDTIS1 -- Watchdog clock source bit1 disabled<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 WDTCTL = WDTPW | WDTHOLD;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: RTC_B_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_print<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> chr = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = ((value \/ 1000) + 0x30);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = (((value \/ 100) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 1), y_pos);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = (((value \/ 10) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 2), y_pos);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 chr = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 3), y_pos);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_adc_out.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14190\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_adc_out-580x309.png\" alt=\"multi_adc_out\" width=\"580\" height=\"309\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_adc_out-580x309.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_adc_out.png 791w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify\">Explanation<\/h2>\n<p style=\"text-align: justify\">In the last example, the ADC channels that were scanned were in an order. Here, however, the story is different but the concept is the same.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14188\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi-580x514.png\" alt=\"multi\" width=\"580\" height=\"514\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi-580x514.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi.png 794w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Note that all channels are enabled since the topmost channel we have measured here is the <strong><em>Measure VCC<\/em><\/strong> channel but intentionally the memory block size is set 1 instead of 12 and only one external channel is enabled. Well, there are some proof-of-concepts to show. The first proof-of-concept is the fact that since we have to set memory block size and memory pointer on our own in the initialization code, it doesn\u2019t matter what these values are in Grace. Secondly, only external channel A3 is sensed since its external I\/O is enabled. The rest of the external channels are ignored. This is why A0 reads floating values when the code runs because its external I\/O to ADC is disconnected and furthermore it is used to blink the onboard Launchpad LED connected with it. Channel A10 (internal temperature sensor) and A11 (internal VCC sensor) are internal channels and so are not dependent on external I\/Os. These channels read as they should. Despite scanning all channels, we can decide which ones we need. Here I demoed sensing channels A0, A3, A10 and A11. Note that these channels are out of a regular or orderly sequence, hence the name of the topic <strong><em>Sensing Multiple Out-of-Sequence ADC10 Channels with DMA<\/em><\/strong>.<\/p>\n<h2>Demo<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_ADC-2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14195\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_ADC-2-580x350.jpg\" alt=\"multi_ADC (2)\" width=\"580\" height=\"350\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_ADC-2-580x350.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_ADC-2-1024x618.jpg 1024w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_ADC-2.jpg 1369w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a> <a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_ADC-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14194\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_ADC-1-580x350.jpg\" alt=\"multi_ADC (1)\" width=\"580\" height=\"350\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_ADC-1-580x350.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_ADC-1-1024x618.jpg 1024w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/multi_ADC-1.jpg 1369w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/75IyIXlVtrY?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm\">Capacitive Touch Overview<\/h1>\n<p style=\"text-align: justify\">Capacitive touch sensing technology is nothing new at present. Cell phones, smartwatches, tablets, portable music players, and even many home appliances that you can name no longer have mechanical touch keys\/switches\/buttons\/variables. All such switching elements have been replaced by more smart and elegant capacitive touch sensors. At present due to this trend even the tiniest new generation microcontroller has capacitive touch sensing capability. When it comes to TI micros, this trend seems to explode to a whole new level.<\/p>\n<p style=\"text-align: justify\">I haven\u2019t seen so far, any TI MCU without capacitive touch feature. Almost all digital I\/Os can be used for capacitive touch as there is no specific dedicated I\/Os for such implementations. This makes capacitive touch sensing easy in terms of hardware design. Designing capacitive touch sensors is another story.<\/p>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Block-Diagram.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14199 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Block-Diagram-580x289.png\" alt=\"Block Diagram\" width=\"580\" height=\"289\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Block-Diagram-580x289.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Block-Diagram.png 810w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">In MSP430s, capacitive touch sensing requires two separate timers. These timers create independent time bases and these time bases are compared against each other. One of these time bases is fixed while the other is dependent of the value of touch sensor\u2019s capacitance. When a touch is detected, capacitance changes. This creates a significant difference between the time bases which otherwise remains fairly constant. This is how a touch is detected. This is also a mean to measure capacitance other than touch sensing.<\/p>\n<p style=\"text-align: justify\">For making all these tasks simple and for rapid development, TI has provided a dedicated <strong><em>Hardware Abstraction Layer (HAL)<\/em><\/strong> library for capacitive touch sensing. Use TI\u2019s Resource Explorer to download code examples and library files. Programmer\u2019s Guide <a href=\"http:\/\/www.ti.com\/general\/docs\/litabsmultiplefilelist.tsp?literatureNumber=slaa490d\">SLAA490D<\/a> discusses implementation of capacitive touch sensing in terms of coding, hardware combinations and others. This <a href=\"http:\/\/processors.wiki.ti.com\/index.php\/MSP430_Low_Cost_PinOsc_Capacitive_Touch_Overview\">page<\/a> is also an equally important one. Apart from these, there are good literatures from TI that discuss tons of valuable info about capacitive touch sensing technology \u2013 from hardware designs to implementation methods.<\/p>\n<p style=\"text-align: justify\">TI discusses about three methods with which capacitive touch sensing can be achieved. These methods are as follows:<\/p>\n<p style=\"text-align: justify\"><strong><em><u>Relaxation Oscillator (RO)<\/u><\/em><\/strong><\/p>\n<p style=\"text-align: justify\">This method counts the number of relaxation oscillator cycles within a fixed period called gate time. Usually for the Value-Line Devices (VLD), the <a href=\"http:\/\/processors.wiki.ti.com\/index.php\/MSP430_Low_Cost_PinOsc_Capacitive_Touch_Overview\">PinOsc<\/a> feature is used in this method and the key thing to note here is the fact that no external components like external resistors or capacitors are needed to implement capacitive touch sensors. It is this method that we will be observing in this article as our target devices are VLDs.<\/p>\n<p style=\"text-align: justify\"><strong><em><u>Resistor Capacitor (RC)<\/u><\/em><\/strong><\/p>\n<p style=\"text-align: justify\">This method is just the opposite of RO method. In this method, the gate time is variable as it is the representation of capacitance while the oscillator time period is fixed. The fixed time base is connected to an internal MSP430 oscillator like the DCO. The variable time base is connected to a capacitor and resistor network. The time it takes to charge and discharge the capacitor through the resistor is now the gate time. The RC method can be realized with any MSP430.<\/p>\n<p style=\"text-align: justify\"><strong><em><u>Fast Relaxation Oscillator (fRO)<\/u><\/em><\/strong><\/p>\n<p style=\"text-align: justify\">This method is similar to the RC method except that the variable gate period is created with a relaxation oscillator instead of the charge and discharge time.<\/p>\n<p style=\"text-align: justify\">TI\u2019s capacitive touch library documentation also recommends which hardware combination to use for a given family of MSP430 microcontroller. Though these are not mandatory, following these recommended combinations reduces code development time and best performances.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/HAL_Recommendation.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14202\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/HAL_Recommendation-580x451.png\" alt=\"HAL_Recommendation\" width=\"580\" height=\"451\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/HAL_Recommendation-580x451.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/HAL_Recommendation.png 767w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: center\"><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">Single-Channel Capacitive Touch<\/h1>\n<p style=\"text-align: justify\">This is the very first capacitive touch example we will look at. Although a single capacitive touch button has very little use in real life, it is good for realizing the mechanism behind this capacitive touch technology. If this example is well understood then everything related to capacitive touch sensing will be realized without any confusion or doubt.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/single_multi_element.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14206\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/single_multi_element.png\" alt=\"single_multi_element\" width=\"400\" height=\"353\" \/><\/a><\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<p><strong><em>structure.h (top part only)<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#ifndef<\/strong> CTS_STRUCTURE_H_<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>CTS_STRUCTURE_H_<\/strong><\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"msp430.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;stdint.h&gt;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/* Public Globals *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Middle Element on the LaunchPad Capacitive Touch BoosterPack<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> middle_element;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ One Button Sensor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>const<\/strong> <strong>struct<\/strong> <strong>Sensor<\/strong> one_button;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/****** RAM ALLOCATION ********************************************************<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ TOTAL_NUMBER_OF_ELEMENTS represents the total number of elements used, even if<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ they are going to be segmented into seperate groups.\u00a0 This defines the<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ RAM allocation for the baseline tracking.\u00a0 If only the TI_CAPT_Raw function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ is used, then this definition should be removed to conserve RAM space.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TOTAL_NUMBER_OF_ELEMENTS<\/strong> 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ If the RAM_FOR_FLASH definition is removed, then the appropriate HEAP size<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ must be allocated. 2 bytes * MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR + 2 bytes<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ of overhead.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RAM_FOR_FLASH<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/****** Structure Array Definition ********************************************<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ This defines the array size in the sensor strucure.\u00a0 In the event that<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ RAM_FOR_FLASH is defined, then this also defines the amount of RAM space<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ allocated (global variable) for computations.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR<\/strong>\u00a0 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/****** Choosing a\u00a0 Measurement Method ****************************************<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ These variables are references to the definitions found in structure.c and<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ must be generated per the application.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ possible values for the method field<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ OSCILLATOR DEFINITIONS<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/#define RO_COMPAp_TA0_WDTp\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 64<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RO_PINOSC_TA0_WDTp<\/strong>\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 65<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">. . . .<\/span><\/em><\/pre>\n<p><strong><em>structure.c <\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"structure.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Middle Element (P2.5)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> middle_element =<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .inputPxselRegister = (<strong>uint8_t<\/strong> *)&amp;P2SEL,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .inputPxsel2Register = (<strong>uint8_t<\/strong> *)&amp;P2SEL2,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .inputBits = BIT4,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ When using an abstracted function to measure the element<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ the 100*(maxResponse - threshold) &lt; 0xFFFF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ ie maxResponse - threshold &lt; 655<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .maxResponse = (450 + 655),<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .threshold = 450<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ One Button Sensor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>struct<\/strong> <strong>Sensor<\/strong> one_button =<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .halDefinition = RO_PINOSC_TA0_WDTp,\u00a0 \/\/ Sensing Method<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .numElements = 1,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ # of Elements<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .baseOffset = 0,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ First element index = 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ Pointer to elements<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .arrayPtr[0] = &amp;middle_element,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ point to middle element<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ Timer Information<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .measGateSource= GATE_WDT_ACLK,\u00a0\u00a0\u00a0\u00a0 \/\/\u00a0 0-&gt;SMCLK, 1-&gt; ACLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .accumulationCycles= WDTp_GATE_64\u00a0\u00a0 \/\/64 - Default<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<p><strong><em>main.c <\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"CTS_Layer.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"CTS_HAL.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"structure.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DELAY<\/strong> 4000<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>sleep<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> time);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#pragma<\/strong> vector = TIMER0_A0_VECTOR<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>__interrupt<\/strong> <strong>void<\/strong> <strong>ISR_Timer0_A0<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 TA0CTL &amp;= ~MC_1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 TA0CCTL0 &amp;= ~(CCIE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>__bic_SR_register_on_exit<\/strong>(LPM3_bits + GIE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#pragma<\/strong> vector = PORT2_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 PORT1_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 TIMER0_A1_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 USI_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 NMI_VECTOR,COMPARATORA_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 ADC10_VECTOR<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>__interrupt<\/strong> <strong>void<\/strong> <strong>ISR_trap<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \/\/ the following will cause an access violation which results in a PUC reset<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 WDTCTL = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Main Function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 WDTCTL = WDTPW + WDTHOLD;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Stop watchdog timer<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>TI_CAPT_Init_Baseline<\/strong>(&amp;one_button);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>TI_CAPT_Update_Baseline<\/strong>(&amp;one_button, 6);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong> (1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(<strong>TI_CAPT_Button<\/strong>(&amp;one_button))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT ^= BIT0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT |= BIT6;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT &amp;= ~BIT6;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>sleep<\/strong>(DELAY);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">} \/\/ End Main<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = BIT0 | BIT6;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Port Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2SEL &amp;= ~(BIT6 | BIT7);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_3 -- Divide by 8<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_3;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_12MHZ != 0xFF) {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Adjust this accordingly to your VCC rise time *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(100000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 * apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_12MHZ;\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 12MHz *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_12MHZ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_2 -- If XTS = 0, XT1 = VLOCLK ; If XTS = 1, XT1 = 3 - 16-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_2 | XCAP_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>sleep<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> time)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CCR0 = time;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CTL = TASSEL_1 | ID_0 | MC_1 | TACLR;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CCTL0 &amp;= ~CCIFG;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CCTL0 |= CCIE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(LPM3_bits+GIE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__no_operation<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p>Capacitive touch sensing cannot be simulated in software like Proteus VSM.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Single-Sim.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14205\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Single-Sim-580x210.png\" alt=\"Single Sim\" width=\"580\" height=\"210\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Single-Sim-580x210.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Single-Sim.png 825w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify\">Explanation<\/h2>\n<p style=\"text-align: justify\">In Grace, there is no option to generate configuration for capacitive touch. However, MSP430Ware demos some examples for such. It is better to use the examples given there for project start up. I did the same. However, for a beginner it is must to which things to modify and why do so. Implementing capacitive touch requires three pairs of TI\u2019s HAL library files. These are as follows and are needed to be integrated with your project:<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Files.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14201\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Files.png\" alt=\"Files\" width=\"209\" height=\"255\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Of these files, the important files that are needed to be edited to set capacitive touch properties of capacitive touch sensor(s) are the <strong><em>structure<\/em><\/strong> header and source files. The rest two pairs of files should be left untouched.<\/p>\n<p style=\"text-align: justify\">In the structure header file, external constant structure named <strong><em>middle_element<\/em><\/strong> defines I\/O port(s) properties of capacitive sensor(s). Similarly, <strong><em>one_button<\/em><\/strong> defines timer\/watchdog properties. These two external structures have other functions too. We will see these properties when will discuss the source file. Next, we have to define how many capacitive touch sensors are there in our design. Finally, we have to set which hardware combination to use. In our case, Timer0_A, watchdog timer and digital I\/O\u2019s PinOsc functionality are used to implement capacitive touch. The rest of the file is not needed to be changed anywhere.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Middle Element on the LaunchPad Capacitive Touch BoosterPack<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> middle_element;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ One Button Sensor<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>const<\/strong> <strong>struct<\/strong> <strong>Sensor<\/strong> one_button;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/****** RAM ALLOCATION ********************************************************<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ TOTAL_NUMBER_OF_ELEMENTS represents the total number of elements used, even if<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ they are going to be segmented into seperate groups.\u00a0 This defines the<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ RAM allocation for the baseline tracking.\u00a0 If only the TI_CAPT_Raw function<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ is used, then this definition should be removed to conserve RAM space.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TOTAL_NUMBER_OF_ELEMENTS<\/strong> 1<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ If the RAM_FOR_FLASH definition is removed, then the appropriate HEAP size<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ must be allocated. 2 bytes * MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR + 2 bytes<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ of overhead.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RAM_FOR_FLASH<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/****** Structure Array Definition ********************************************<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ This defines the array size in the sensor strucure.\u00a0 In the event that<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ RAM_FOR_FLASH is defined, then this also defines the amount of RAM space<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ allocated (global variable) for computations.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR<\/strong>\u00a0 1<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/****** Choosing a\u00a0 Measurement Method ****************************************<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ These variables are references to the definitions found in structure.c and<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ must be generated per the application.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ possible values for the method field<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ OSCILLATOR DEFINITIONS<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/#define RO_COMPAp_TA0_WDTp\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 64<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RO_PINOSC_TA0_WDTp<\/strong>\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 65<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Now it is time to explain the structure source file.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> middle_element =<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .inputPxselRegister = (<strong>uint8_t<\/strong> *)&amp;P2SEL,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .inputPxsel2Register = (<strong>uint8_t<\/strong> *)&amp;P2SEL2,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .inputBits = BIT4,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ When using an abstracted function to measure the element<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ the 100*(maxResponse - threshold) &lt; 0xFFFF<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ ie maxResponse - threshold &lt; 655<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .maxResponse = (450 + 655),<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .threshold = 450<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<p style=\"text-align: justify\"><strong><em>PxSEL<\/em><\/strong> and <strong><em>PxSEL2<\/em><\/strong> bits internally set PinOsc feature. Since this example demonstrated one capacitive touch button only one element is connected to <strong><em>BIT4<\/em><\/strong> of port <strong><em>P2<\/em><\/strong>. Optionally, we can set the threshold limit on which we can positively identify a touch.<\/p>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\/\/ One Button Sensor<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>const<\/strong> <strong>struct<\/strong> <strong>Sensor<\/strong> one_button =<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 .halDefinition = RO_PINOSC_TA0_WDTp,\u00a0 \/\/ Sensing Method<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 .numElements = 1,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ # of Elements<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 .baseOffset = 0,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\/\/ First element index = 0<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/\/ Pointer to elements<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 .arrayPtr[0] = &amp;middle_element,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ point to middle element<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 \/\/ Timer Information<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 .measGateSource= GATE_WDT_ACLK,\u00a0\u00a0\u00a0\u00a0 \/\/\u00a0 0-&gt;SMCLK, 1-&gt; ACLK<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 .accumulationCycles= WDTp_GATE_64\u00a0\u00a0 \/\/64 - Default<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>};<\/em><\/span><\/pre>\n<p style=\"text-align: justify\">The second part of the source file details which method is used along with the name and number of element(s) to sense. Basically, here we have nothing to do other than to let this part know the structure name of our element(s) and the number of sensors.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#pragma<\/strong> vector = TIMER0_A0_VECTOR<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>__interrupt<\/strong> <strong>void<\/strong> <strong>ISR_Timer0_A0<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 TA0CTL &amp;= ~MC_1;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 TA0CCTL0 &amp;= ~(CCIE);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>__bic_SR_register_on_exit<\/strong>(LPM3_bits + GIE);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#pragma<\/strong> vector = PORT2_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 PORT1_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\\<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 TIMER0_A1_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 USI_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 NMI_VECTOR,COMPARATORA_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 ADC10_VECTOR<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>__interrupt<\/strong> <strong>void<\/strong> <strong>ISR_trap<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \/\/ the following will cause an access violation which results in a PUC reset<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 WDTCTL = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Two interrupts are needed to be called. The first is the Timer0_A ISR. This acts like a wakeup alarm. Once the capacitive sensing and other tasks in the main loop are completed, this timer is started and low power mode is entered. After timeout, this timer interrupts causing the main tasks to reoccur and leave low power mode momentarily.\u00a0 The second is a Trap ISR. Trap ISR ensures that if for some reason something happens that you didn\u2019t expect it will reset the MCU. The interrupt vectors assigned here are those vectors which we won\u2019t be using. If any of these pop-up, a reset will occur.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 WDTCTL = WDTPW + WDTHOLD;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Stop watchdog timer<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>TI_CAPT_Init_Baseline<\/strong>(&amp;one_button);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>TI_CAPT_Update_Baseline<\/strong>(&amp;one_button, 6);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong> (1)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(<strong>TI_CAPT_Button<\/strong>(&amp;one_button))<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT ^= BIT0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT |= BIT6;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT &amp;= ~BIT6;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>sleep<\/strong>(DELAY);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The main function is perhaps the smallest one here. Except for the other parts with which by now we are familiar, there are a few new lines of code. Just before the main loop, the two lines of code right above it, initialize the capacitive touch sensor. Number 6 in the function <strong><em>TI_CAPT_Update_Baseline<\/em><\/strong> states the number of samples to capture for accurately sensing a touch. If a valid touch is detected, the LEDs of Launchpad board are toggled.<\/p>\n<h2>Demo<\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/IMG_0656.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14207\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/IMG_0656-580x317.jpg\" alt=\"IMG_0656\" width=\"580\" height=\"317\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/IMG_0656-580x317.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/IMG_0656.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/sh8nkoI2XKw?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">Multi-Channel Capacitive Touch<\/h1>\n<p style=\"text-align: justify\">Unlike single capacitive touch buttons, multiple capacitive sensors have several potential uses. These include multi-touch buttons, sliders, wheels, rotary encoders, etc. Here we will have a look at multiple capacitive touch buttons and the example demonstrated here is basically the extension of the last one. However, for multi-touch capacitive touch sensors, there are twists in the software end apart from hardware design and considerations.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Capacitive-Touch-Booster.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14200\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Capacitive-Touch-Booster-580x332.jpeg\" alt=\"Capacitive Touch Booster\" width=\"580\" height=\"332\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Capacitive-Touch-Booster-580x332.jpeg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Capacitive-Touch-Booster.jpeg 937w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<p><strong><em>structure.h (top part only)<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#ifndef<\/strong> CTS_STRUCTURE_H_<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>CTS_STRUCTURE_H_<\/strong><\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"msp430.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;stdint.h&gt;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/* Public Globals *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> middle_element;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> up_element;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> down_element;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Identify all sensors defined in structure.c<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>const<\/strong> <strong>struct<\/strong> <strong>Sensor<\/strong> multi_buttons;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/****** RAM ALLOCATION ********************************************************<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ TOTAL_NUMBER_OF_ELEMENTS represents the total number of elements used, even if<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ they are going to be segmented into seperate groups.\u00a0 This defines the<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ RAM allocation for the baseline tracking.\u00a0 If only the TI_CAPT_Raw function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ is used, then this definition should be removed to conserve RAM space.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TOTAL_NUMBER_OF_ELEMENTS<\/strong> 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ If the RAM_FOR_FLASH definition is removed, then the appropriate HEAP size<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ must be allocated. 2 bytes * MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR + 2 bytes<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ of overhead.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RAM_FOR_FLASH<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/****** Structure Array Definition ********************************************<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ This defines the array size in the sensor strucure.\u00a0 In the event that<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ RAM_FOR_FLASH is defined, then this also defines the amount of RAM space<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ allocated (global variable) for computations.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR<\/strong>\u00a0 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/****** Choosing a\u00a0 Measurement Method ****************************************<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ These variables are references to the definitions found in structure.c and<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ must be generated per the application.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ possible values for the method field<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ OSCILLATOR DEFINITIONS<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/#define RO_COMPAp_TA0_WDTp\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 64<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RO_PINOSC_TA0_WDTp<\/strong>\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 65<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">. . . .<\/span><\/em><\/pre>\n<p><strong><em>structure.c<\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"structure.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Middle Element (P2.5)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> middle_element = {<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0.inputPxselRegister = (<strong>unsigned<\/strong> <strong>char<\/strong> *)&amp;P2SEL,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .inputPxsel2Register = (<strong>unsigned<\/strong> <strong>char<\/strong> *)&amp;P2SEL2,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .inputBits = BIT5,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ When using an abstracted function to measure the element<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ the 100*(maxResponse - threshold) &lt; 0xFFFF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ ie maxResponse - threshold &lt; 655<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .maxResponse = (100 + 655),<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .threshold = 100<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Up Element (P2.4)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> up_element = {<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .inputPxselRegister = (<strong>unsigned<\/strong> <strong>char<\/strong> *)&amp;P2SEL,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .inputPxsel2Register = (<strong>unsigned<\/strong> <strong>char<\/strong> *)&amp;P2SEL2,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .inputBits = BIT4,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ When using an abstracted function to measure the element<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ the 100*(maxResponse - threshold) &lt; 0xFFFF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\/\/ ie maxResponse - threshold &lt; 655<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .maxResponse = (100 + 655),<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .threshold = 100<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Down Element (P2.3)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> down_element =<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .inputPxselRegister = (<strong>unsigned<\/strong> <strong>char<\/strong> *)&amp;P2SEL,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .inputPxsel2Register = (<strong>unsigned<\/strong> <strong>char<\/strong> *)&amp;P2SEL2,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .inputBits = BIT3,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ When using an abstracted function to measure the element<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ the 100*(maxResponse - threshold) &lt; 0xFFFF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ ie maxResponse - threshold &lt; 655<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .maxResponse = (100 + 655),<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .threshold = 100<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/*** CAP TOUCH HANDLER *******************************************************\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ This defines the grouping of sensors, the method to measure change in<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ capacitance, and the function of the group<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>struct<\/strong> <strong>Sensor<\/strong> multi_buttons =<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .halDefinition = RO_PINOSC_TA0_WDTp,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .numElements = 3,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .baseOffset = 0,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ Pointer to elements<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .arrayPtr[0] = &amp;up_element,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ point to up element<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .arrayPtr[1] = &amp;down_element,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ point to down element<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .arrayPtr[2] = &amp;middle_element,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ point to middle element<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ Timer Information<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .measGateSource= GATE_WDT_ACLK,\u00a0\u00a0\u00a0\u00a0 \/\/\u00a0 0-&gt;SMCLK, 1-&gt; ACLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .accumulationCycles= WDTp_GATE_64\u00a0\u00a0 \/\/64 - Default<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<p><strong><em>main.c <\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> &lt;msp430.h&gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"CTS_Layer.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"CTS_HAL.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"structure.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DELAY<\/strong> 4000<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>struct<\/strong> <strong>Element<\/strong> * keyPressed;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>sleep<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> time);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#pragma<\/strong> vector = TIMER0_A0_VECTOR<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>__interrupt<\/strong> <strong>void<\/strong> <strong>ISR_Timer0_A0<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 TA0CTL &amp;= ~MC_1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 TA0CCTL0 &amp;= ~(CCIE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>__bic_SR_register_on_exit<\/strong>(LPM3_bits + GIE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#pragma<\/strong> vector = PORT2_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 PORT1_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 TIMER0_A1_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 USI_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 NMI_VECTOR,COMPARATORA_VECTOR,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \\<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 ADC10_VECTOR<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>__interrupt<\/strong> <strong>void<\/strong> <strong>ISR_trap<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \/\/ the following will cause an access violation which results in a PUC reset<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 WDTCTL = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Main Function<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 WDTCTL = WDTPW + WDTHOLD;\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Stop watchdog timer<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>GPIO_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>BCSplus_graceInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>TI_CAPT_Init_Baseline<\/strong>(&amp;multi_buttons);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>TI_CAPT_Update_Baseline<\/strong>(&amp;multi_buttons, 25);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \/\/ Main loop starts here<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong> (1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 keyPressed = (<strong>struct<\/strong> <strong>Element<\/strong> *)<strong>TI_CAPT_Buttons<\/strong>(&amp;multi_buttons);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(keyPressed)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Up Element<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(keyPressed == &amp;up_element)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT |= BIT0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Down Element<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(keyPressed == &amp;down_element)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT |= BIT6;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Middle Element<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(keyPressed == &amp;middle_element)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>sleep<\/strong>(DELAY);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">} \/\/ End Main<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1DIR = BIT0 | BIT6;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0P1IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 1 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P1IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Output Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2OUT = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Port Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2SEL &amp;= ~(BIT6 | BIT7);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Direction Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2DIR = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Edge Select Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IES = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* Port 2 Interrupt Flag Register *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 P2IFG = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: GPIO_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>BCSplus_graceInit<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User initialization code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_prologue) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * SELM_0 -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVM_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~SELS -- DCOCLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVS_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~DCOR -- DCO uses internal resistor<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~&lt;BIT&gt; indicates that &lt;BIT&gt; has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (CALBC1_8MHZ != 0xFF)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Adjust this accordingly to your VCC rise time *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>__delay_cycles<\/strong>(100000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Follow recommended flow. First, clear all DCOx and MODx bits. Then<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ apply new RSELx values. Finally, apply new DCOx and MODx bit values.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BCSCTL1 = CALBC1_8MHZ;\u00a0\u00a0\u00a0\u00a0\u00a0 \/* Set DCO to 8MHz *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DCOCTL = CALDCO_8MHZ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2OFF -- Disable XT2CLK<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * ~XTS -- Low Frequency<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * DIVA_0 -- Divide by 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Note: ~XTS indicates that XTS has value zero<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL1 |= XT2OFF | DIVA_0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/*<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * Basic Clock System Control 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XT2S_0 -- 0.4 - 1 MHz<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * LFXT1S_2 -- If XTS = 0, XT1 = VLOCLK ; If XTS = 1, XT1 = 3 - 16-MHz crystal or resonator<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 * XCAP_1 -- ~6 pF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 BCSCTL3 = XT2S_0 | LFXT1S_2 | XCAP_1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE START (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* User code *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/* USER CODE END (section: BCSplus_graceInit_epilogue) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>sleep<\/strong>(<strong>unsigned<\/strong> <strong>int<\/strong> time)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CCR0 = time;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CTL = TASSEL_1 | ID_0 | MC_1 | TACLR;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CCTL0 &amp;= ~CCIFG;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 TA0CCTL0 |= CCIE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__bis_SR_register<\/strong>(LPM3_bits + GIE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>__no_operation<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2 style=\"margin-top: 0cm\">Simulation<\/h2>\n<p>Capacitive touch sensing cannot be simulated in software like Proteus VSM.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Multi-Sim.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14204\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Multi-Sim-580x198.png\" alt=\"Multi Sim\" width=\"580\" height=\"198\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Multi-Sim-580x198.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Multi-Sim.png 845w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify\">Explanation<\/h2>\n<p style=\"text-align: justify\">This example uses the same ideas as in the previous example. The header file is slightly modified. Three sensor elements are used and so the number of sensor is set 3. The elements are named differently since each are independent of the other.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> middle_element;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> up_element;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> down_element;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Identify all sensors defined in structure.c<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>const<\/strong> <strong>struct<\/strong> <strong>Sensor<\/strong> multi_buttons;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/****** RAM ALLOCATION ********************************************************<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ TOTAL_NUMBER_OF_ELEMENTS represents the total number of elements used, even if<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ they are going to be segmented into seperate groups.\u00a0 This defines the<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ RAM allocation for the baseline tracking.\u00a0 If only the TI_CAPT_Raw function<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ is used, then this definition should be removed to conserve RAM space.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TOTAL_NUMBER_OF_ELEMENTS<\/strong> 3<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">....<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/****** Structure Array Definition ********************************************<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ This defines the array size in the sensor strucure.\u00a0 In the event that<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ RAM_FOR_FLASH is defined, then this also defines the amount of RAM space<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ allocated (global variable) for computations.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR<\/strong>\u00a0 3<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The main difference is present in the structure source file. The three different elements are declared independently despite being in the same port. This is so because we need to identify them when a touch is detected.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> middle_element = {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .inputPxselRegister = (<strong>unsigned<\/strong> <strong>char<\/strong> *)&amp;P2SEL,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .inputPxsel2Register = (<strong>unsigned<\/strong> <strong>char<\/strong> *)&amp;P2SEL2,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .inputBits = BIT5,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ When using an abstracted function to measure the element<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ the 100*(maxResponse - threshold) &lt; 0xFFFF<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ ie maxResponse - threshold &lt; 655<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .maxResponse = (100 + 655),<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .threshold = 100<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Up Element (P2.4)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> up_element = {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .inputPxselRegister = (<strong>unsigned<\/strong> <strong>char<\/strong> *)&amp;P2SEL,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .inputPxsel2Register = (<strong>unsigned<\/strong> <strong>char<\/strong> *)&amp;P2SEL2,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .inputBits = BIT4,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ When using an abstracted function to measure the element<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ the 100*(maxResponse - threshold) &lt; 0xFFFF<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ ie maxResponse - threshold &lt; 655<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .maxResponse = (100 + 655),<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .threshold = 100<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Down Element (P2.3)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>struct<\/strong> <strong>Element<\/strong> down_element =<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .inputPxselRegister = (<strong>unsigned<\/strong> <strong>char<\/strong> *)&amp;P2SEL,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .inputPxsel2Register = (<strong>unsigned<\/strong> <strong>char<\/strong> *)&amp;P2SEL2,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .inputBits = BIT3,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ When using an abstracted function to measure the element<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ the 100*(maxResponse - threshold) &lt; 0xFFFF<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ ie maxResponse - threshold &lt; 655<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .maxResponse = (100 + 655),<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .threshold = 100<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/*** CAP TOUCH HANDLER *******************************************************\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ This defines the grouping of sensors, the method to measure change in<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ capacitance, and the function of the group<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>struct<\/strong> <strong>Sensor<\/strong> multi_buttons =<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .halDefinition = RO_PINOSC_TA0_WDTp,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .numElements = 3,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .baseOffset = 0,<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ Pointer to elements<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .arrayPtr[0] = &amp;up_element,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ point to up element<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .arrayPtr[1] = &amp;down_element,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ point to down element<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .arrayPtr[2] = &amp;middle_element,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ point to middle element<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ Timer Information<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .measGateSource= GATE_WDT_ACLK,\u00a0\u00a0\u00a0\u00a0 \/\/\u00a0 0-&gt;SMCLK, 1-&gt; ACLK<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 .accumulationCycles= WDTp_GATE_64\u00a0\u00a0 \/\/64 - Default<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<p>Similarly, the sensor structure is also modified for these three elements. The main code is almost identical to the single sensor demo. However, the variable <strong><em>keyPressed<\/em><\/strong> is used to check which element was touched. According to touch on different element states of Launchpad board LEDs are altered.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">keyPressed = (<strong>struct<\/strong> <strong>Element<\/strong> *)<strong>TI_CAPT_Buttons<\/strong>(&amp;multi_buttons);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>if<\/strong>(keyPressed)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ Up Element<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(keyPressed == &amp;up_element)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT |= BIT0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ Down Element<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(keyPressed == &amp;down_element)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT |= BIT6;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0}<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \/\/ Middle Element<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(keyPressed == &amp;middle_element)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P1OUT = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2>Demo<\/h2>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/IMG_0644.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14208 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/IMG_0644-580x521.jpg\" alt=\"IMG_0644\" width=\"580\" height=\"521\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/IMG_0644-580x521.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/IMG_0644.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><br \/>\n<iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/uCgi11GNajI?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<h1 style=\"margin-top: 0cm;text-align: justify\">A Brief Intro of MSP430F5529LP Launchpad and TI\u2019s Driver Library<\/h1>\n<p>Up till now we have seen and used the power of Grace configuration tool, MSP430G2xxx devices and only mentioned the name <strong><em>Driver Library<\/em><\/strong>. At present for micros with too many hardware resources, it is really very difficult to go through their individual datasheet line-by-line and memorize register names and their purposes. However, we just need peripheral initialization once in a code and it should not take much of a project\u2019s development time. Likewise, when moving from one micro sub family to another or just interchanging devices within a given family, there should be some similarity in coding and hardware or else it be really very much difficult to keep track of everything. To overcome such issues and many others, mainstream embedded system solution manufacturers like TI offer different code development solutions ranging from graphical tools like Grace to code examples\/templates as in TI\u2019s Resource Explorer. The Peripheral Driver Library or simply <strong><em>DriverLib<\/em><\/strong> is one solution that somewhat resides between aforementioned two. It is a set of drivers for accessing the peripherals found on MSP430 micros and is similar to HAL libraries used for ARM micros. So far, we have not used this library pack as it doesn\u2019t support VLDs. Details of TI\u2019s driver library can be found <a href=\"http:\/\/www.ti.com\/tool\/MSPDRIVERLIB\">here<\/a>. Please have it downloaded as we will need it for the demo.<\/p>\n<p>As mentioned before, there are other more resourceful and powerful MSP430s and the driver library is intended for such robust devices. MSP430F5529LP is one such powerful device. It is a microcontroller mainly intended for USB application development and has 128kB of flash and 8kB RAM. There is an inexpensive Launchpad board dedicated for this awesome micro and it delivers the punch needed in complex big projects. Details of this Launchpad board can be found <a href=\"http:\/\/www.ti.com\/tool\/MSP-EXP430F5529LP\">here<\/a>.<\/p>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/55291.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14210 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/55291-580x452.png\" alt=\"5529\" width=\"580\" height=\"452\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/55291-580x452.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/55291.png 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">In this final section, we will briefly see the potential of combining TI\u2019s Driver Library with MSP430F5529LP.<\/p>\n<h2>How tos?<\/h2>\n<p>Google and download the Energia pinmap for MSP430F5529LP.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/MSP430F5529-Launchpad.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14209\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/MSP430F5529-Launchpad-580x286.jpeg\" alt=\"MSP430F5529 Launchpad\" width=\"580\" height=\"286\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/MSP430F5529-Launchpad-580x286.jpeg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/MSP430F5529-Launchpad-1024x505.jpeg 1024w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">I assume that by now you have downloaded the latest version of <strong><em>DriverLib<\/em><\/strong> and other documentations regarding this and the MSP430F5529LP Launchpad board.<\/p>\n<p style=\"text-align: justify\">Extract the DriverLib zip file and copy the correct DriverLib folder (MSP430F5xx_6xx folder in our case) to your project folder. In my case, I copied this folder and renamed it as <em>driverlib<\/em>. The process is same as what we did for our own-built library files.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Includes.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14212\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/Includes.png\" alt=\"Includes\" width=\"354\" height=\"186\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Let the compiler know the physical paths of this folder just like the custom library files. Rest of the works is same as before.<\/p>\n<h2 style=\"margin-top: 0cm\">Code Example<\/h2>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"driverlib.h\"<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"delay.h\"<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0x00;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>WDT_A_hold<\/strong>(WDT_A_BASE);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>GPIO_setAsOutputPin<\/strong> (GPIO_PORT_P1, GPIO_PIN0);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>GPIO_setDriveStrength<\/strong>(GPIO_PORT_P1, GPIO_PIN0, GPIO_FULL_OUTPUT_DRIVE_STRENGTH);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>GPIO_setAsOutputPin<\/strong> (GPIO_PORT_P4, GPIO_PIN7);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>GPIO_setDriveStrength<\/strong>(GPIO_PORT_P4, GPIO_PIN7, GPIO_FULL_OUTPUT_DRIVE_STRENGTH);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>GPIO_setAsInputPinWithPullUpResistor<\/strong>(GPIO_PORT_P2, GPIO_PIN1);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>GPIO_setAsPeripheralModuleFunctionInputPin<\/strong>(GPIO_PORT_P5, (GPIO_PIN2 | GPIO_PIN4));<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>GPIO_setAsPeripheralModuleFunctionOutputPin<\/strong>(GPIO_PORT_P5, (GPIO_PIN2 | GPIO_PIN4));<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>UCS_setExternalClockSource<\/strong>(32768, 4000000);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>UCS_turnOnXT2<\/strong>(UCS_XT2_DRIVE_4MHZ_8MHZ);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>UCS_turnOnLFXT1<\/strong>(UCS_XT1_DRIVE_0, UCS_XCAP_3);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>UCS_initClockSignal<\/strong>(UCS_MCLK, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_1);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>UCS_initClockSignal<\/strong>(UCS_SMCLK, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_1);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>UCS_initClockSignal<\/strong>(UCS_ACLK, UCS_XT1CLK_SELECT, UCS_CLOCK_DIVIDER_1);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(<strong>GPIO_getInputPinValue<\/strong>(GPIO_PORT_P2, GPIO_PIN1) == false)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>GPIO_getInputPinValue<\/strong>(GPIO_PORT_P2, GPIO_PIN1) == false);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_setOutputHighOnPin<\/strong>(GPIO_PORT_P1, GPIO_PIN0);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(100);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_setOutputLowOnPin<\/strong>(GPIO_PORT_P1, GPIO_PIN0);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 s = ~s;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P4OUT ^= BIT7;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>switch<\/strong>(s)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 0:<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(100);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>default<\/strong>:<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(600);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0}<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0 };<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<h2>Explanation<\/h2>\n<p style=\"text-align: justify\">To keep things simple, I demoed another LED blinking code. Notice that with inclusion of driverlib, everything has changed with meaningful functions. Take the setting of watchdog timer as an example.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">WDTCTL = WDTPW | WDTHOLD; \/\/Register-level access<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>WDT_A_hold<\/strong>(WDT_A_BASE);\u00a0\u00a0 \/\/DriverLib function call<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Instead of setting registers, driverlib functions are just taking some function argument(s) to set desired pin according to our wish. The functions and the arguments have meaningful names instead of magical numbers. This way of coding gives a fast overview of our code and the development time and efforts are greatly reduced. All register-level tasks are done under the hood of driverlib. This doesn\u2019t however restrict us from going the old-fashioned way of using register-based coding. Still it is possible:<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">P4OUT ^= BIT7;<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The code begins with GPIO settings as follows:<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>GPIO_setAsOutputPin<\/strong> (GPIO_PORT_P1, GPIO_PIN0);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>GPIO_setDriveStrength<\/strong>(GPIO_PORT_P1, GPIO_PIN0, GPIO_FULL_OUTPUT_DRIVE_STRENGTH);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>GPIO_setAsOutputPin<\/strong> (GPIO_PORT_P4, GPIO_PIN7);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>GPIO_setDriveStrength<\/strong>(GPIO_PORT_P4, GPIO_PIN7, GPIO_FULL_OUTPUT_DRIVE_STRENGTH);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>GPIO_setAsInputPinWithPullUpResistor<\/strong>(GPIO_PORT_P2, GPIO_PIN1);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>GPIO_setAsPeripheralModuleFunctionInputPin<\/strong>(GPIO_PORT_P5, (GPIO_PIN2 | GPIO_PIN4));<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>GPIO_setAsPeripheralModuleFunctionOutputPin<\/strong>(GPIO_PORT_P5, (GPIO_PIN2 | GPIO_PIN4));<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Two pins <strong><em>P1_0<\/em><\/strong> and <strong><em>P4_7<\/em><\/strong> are set as outputs with full drive strength since these pins have LEDs connected with them. <strong><em>P2_1<\/em><\/strong> is set as an input with pull-up as it is connected with an onboard push button. Some pins of <strong><em>P5 <\/em><\/strong>are set for peripheral modules because these pins are connected with external crystals.<\/p>\n<p style=\"text-align: justify\">Next, we set to configure the clock system. There are two onboard external crystals \u2013 one 32.768kHz clock crystal and one 4MHz crystal. <strong><em>UCS<\/em><\/strong> stands for <strong><em>Unified Clock System<\/em><\/strong>. Like the basic clock system in MSP430G2xxx devices, this a complex network of clock system with lot of options. There are several internal and external clock sources to clock the main clock, the sub-main clock and the auxiliary clock signals. Here, I used the external crystal clocks to clock MCLK, SMCLK and ACLK<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>UCS_setExternalClockSource<\/strong>(32768, 4000000);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>UCS_turnOnXT2<\/strong>(UCS_XT2_DRIVE_4MHZ_8MHZ);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>UCS_turnOnLFXT1<\/strong>(UCS_XT1_DRIVE_0, UCS_XCAP_3);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>UCS_initClockSignal<\/strong>(UCS_MCLK, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_1);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>UCS_initClockSignal<\/strong>(UCS_SMCLK, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_1);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>UCS_initClockSignal<\/strong>(UCS_ACLK, UCS_XT1CLK_SELECT, UCS_CLOCK_DIVIDER_1);<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">In the main loop, the Launchpad\u2019s green LED (<em>P4_7<\/em>) is toggled at a given flash rate. When the onboard user push button (<em>P2_1<\/em>) is pressed, the onboard red LED (<em>P1_0<\/em>) is briefly turned on and the rate of green LED\u2019s flashing is altered.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>if<\/strong>(<strong>GPIO_getInputPinValue<\/strong>(GPIO_PORT_P2, GPIO_PIN1) == false)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>GPIO_getInputPinValue<\/strong>(GPIO_PORT_P2, GPIO_PIN1) == false);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_setOutputHighOnPin<\/strong>(GPIO_PORT_P1, GPIO_PIN0);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(100);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>GPIO_setOutputLowOnPin<\/strong>(GPIO_PORT_P1, GPIO_PIN0);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 s = ~s;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">P4OUT ^= BIT7;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>switch<\/strong>(s)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>case<\/strong> 0:<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(100);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>default<\/strong>:<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(600);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h2>Demo<\/h2>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/IMG_0536.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14211 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/IMG_0536-580x528.jpg\" alt=\"IMG_0536\" width=\"580\" height=\"528\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/IMG_0536-580x528.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/03\/IMG_0536.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/ppgQP661JDw?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<p>All code examples and this documentation is available for download from <a href=\"https:\/\/github.com\/sshahryiar\/MSP430G2xxx-Tutorial\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>.<\/p>\n<p>Happy coding.<\/p>\n<p><em>Author: Shawon M. Shahryiar<\/em><\/p>\n<p><a href=\"https:\/\/www.facebook.com\/groups\/microarena\/\"><em>https:\/\/www.facebook.com\/groups\/microarena<\/em><\/a><\/p>\n<p><a href=\"https:\/\/www.facebook.com\/MicroArena?ref=hl\"><em>https:\/\/www.facebook.com\/MicroArena<\/em><\/a><em>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 31.03.2018<\/em><\/p>\n<p><em>\u00a0<\/em><\/p>\n<p><em>** Some images have been taken from the documents and webpages of Texas Instruments (TI) and Mikroelektronika. <\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post is a sequel of the first post on TI MSP430 micros here.<\/p>\n","protected":false},"author":5,"featured_media":14145,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[379,933,955,1466],"tags":[1719],"class_list":["post-14138","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-msp430-launchpad","category-texas-instruments","category-ti-2","category-tutorials","tag-ti-msp430-microcontrollers"],"_links":{"self":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/14138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/comments?post=14138"}],"version-history":[{"count":23,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/14138\/revisions"}],"predecessor-version":[{"id":15412,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/14138\/revisions\/15412"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media\/14145"}],"wp:attachment":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media?parent=14138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/categories?post=14138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/tags?post=14138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}