<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>8-bit MicrocontrollersのトピックDigital timer using HCS08 MC09S08GB60</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-timer-using-HCS08-MC09S08GB60/m-p/209747#M17923</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fimg37.picoodle.com%2Fimg%2Fimg37%2F4%2F3%2F28%2Ff_7segmentdism_4b5dfa5.png" rel="nofollow noopener noreferrer" target="_blank"&gt;&lt;SPAN style="color: #017BBA;"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;A href="http://img37.picoodle.com/img/img37/4/3/28/f_7segmentdism_4b5dfa5.png" rel="nofollow noopener noreferrer" target="test_blank"&gt;http://img37.picoodle.com/img/img37/4/3/28/f_7segmentdism_4b5dfa5.png&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Hi, thanks to allawtterb and bigmac who helped me get my last program working correctly. Now I need some more advice.&amp;nbsp;For another program I want to&amp;nbsp;use the last program and modify it for&amp;nbsp;a digital display timer. I have come up&amp;nbsp;the general form of the program but&amp;nbsp;I am&amp;nbsp;confused of how to approach this. Here is my current code.&lt;/DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#include &amp;lt;hidef.h&amp;gt; /* for EnableInterrupts macro */#include "derivative.h" /* include peripheral declarations */#define MASK_BITS1 0xF00 //Masks bits 11-8 on#define MASK_BITS2 0x0F0 //Masks bits 7-4 on#define MASK_BITS3 0x00F //Masks bits 3-0 on&amp;nbsp; #define DIGIT_PORT&amp;nbsp; PTFD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Port F used for digits//#define DIGIT_MASK&amp;nbsp; 0xF0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Used to mask bits 7,6 and 5 in Port F//#define SEG_PORT&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Port B used for segments //#define SEG_MASK&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x7F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Used to mask Port B for correct output//#define LED_DISPLAY PTAD_PTAD2#define Mask_Digits 0x03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //used to mask variable digits to 00000011#define SEVEN_SEG_0 0x3F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //digits 0 through 9 in display form#define SEVEN_SEG_1 0x06#define SEVEN_SEG_2 0x5B#define SEVEN_SEG_3 0x4F#define SEVEN_SEG_4 0x66#define SEVEN_SEG_5 0x6D#define SEVEN_SEG_6 0x7D#define SEVEN_SEG_7 0x07#define SEVEN_SEG_8 0x7F#define SEVEN_SEG_9 0x6F// Function Prototypes //void delay(long int);void Output_Seven_Segments(byte, byte);void main(void);int FixDigit2(int);EnableInterrupts; /* enable interrupts */&amp;nbsp; /* include your code here */&amp;nbsp;&amp;nbsp; void delay(long int n){ long int i; unsigned int j; for (i=0; i&amp;lt;n; i++)&amp;nbsp;&amp;nbsp; for (j=0; j&amp;lt;100; j++)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {}}&amp;nbsp; void Output_Seven_Segments (byte segments, byte digit){&amp;nbsp;&amp;nbsp; //Remember: segments variable is formed as: //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DP g f e d c b a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; digit &amp;amp;= Mask_Digits; //Mask variable digit to '00000011'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (digit==0)&amp;nbsp;&amp;nbsp; //This is the broken display&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; segments=FixDigit2(segments); //Call a subroutine to mangle all bits&amp;nbsp;&amp;nbsp; DIGIT_PORT &amp;amp;= ~DIGIT_MASK;&amp;nbsp; // Set all digits OFF //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEG_PORT = segments &amp;amp; SEG_MASK;&amp;nbsp; //Port B assigned vairable segments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIGIT_PORT |= (0x10 &amp;lt;&amp;lt; digit);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (digit)&amp;nbsp; {&amp;nbsp; case 0:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIGIT_PORT = 0x80;//Drive most significant digit on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp; case 1:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIGIT_PORT = 0x40;//Drive second digit on&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp; case 2:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIGIT_PORT = 0x20;//Drive least significant digit on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp;&amp;nbsp; case 3:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LED_DISPLAY = 1;//Drive LED display on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; }void main (void){&amp;nbsp; // Set DDRs for output ports&amp;nbsp;&amp;nbsp; SOPT_COPE = 0;//Disable watchdog timer&amp;nbsp;&amp;nbsp; PTADD = 0x02; // Replace XX with the hex value to set the PA2 and PA1 as outputs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTFDD = 0xE0; // Same here, setting the inputs/outputs for port F&amp;nbsp;&amp;nbsp; PTBDD = 0x7F; // Setting the input/outputs for Port B&amp;nbsp;&amp;nbsp;&amp;nbsp; time=0;&amp;nbsp; for (;;)&amp;nbsp; //Loop forever (as always!) {&amp;nbsp; time++; //increment variable time by one&amp;nbsp;&amp;nbsp;&amp;nbsp; //Convert to Segments and Output bits (11:8) of time&amp;nbsp; delay(1);&amp;nbsp; //Convert to Segments and Output bits (7:4) of time&amp;nbsp; delay(1);&amp;nbsp; //Convert ...&amp;nbsp; bits (3:0) of time&amp;nbsp; delay(1); }} int FixDigit2(int value) {&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char newval;&amp;nbsp; newval=0;&amp;nbsp;&amp;nbsp;&amp;nbsp; newval=newval|(value&amp;amp;0x01)&amp;lt;&amp;lt;6;&amp;nbsp;&amp;nbsp; //Bit 0 becomes 6&amp;nbsp; newval=newval|(value&amp;amp;0x02)&amp;gt;&amp;gt;1;&amp;nbsp;&amp;nbsp; //Bit 1 becomes 0&amp;nbsp; newval=newval|(value&amp;amp;0x04)&amp;lt;&amp;lt;5;&amp;nbsp; //Bit 2 becomes 7&amp;nbsp; newval=newval|(value&amp;amp;0x40)&amp;gt;&amp;gt;4;&amp;nbsp; //Bit 6 becomes 2&amp;nbsp; newval=newval|(value&amp;amp;0x80)&amp;gt;&amp;gt;6;&amp;nbsp; //Bit 7 becomes 1&amp;nbsp; newval=newval|(value&amp;amp;0x38);&amp;nbsp;&amp;nbsp;&amp;nbsp; //And bits 543 are copied undisturbed&amp;nbsp;&amp;nbsp;&amp;nbsp; return (newval);}&lt;/PRE&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;I need to get the variable time which is an unsigned int. I then need to mask bits 11-8 off then convert it into the digital display form and display it on the board.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;This will be the same for the other 2 digits but with bits 7-4 and bits 3-0 respectively.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I will need another delay routine for the incrementation of varaible time to get it to count every mili second. What is the best way to do this? Would a case statement be Ideal?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The part I get confused it after I mask the 12 bits into 3 seperate nibbles by ANDING them with the variables.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#define MASK_BITS1 0xF00 //Masks bits 11-8 on&lt;BR /&gt;#define MASK_BITS2 0x0F0 //Masks bits 7-4 on&lt;BR /&gt;#define MASK_BITS3 0x00F //Masks bits 3-0 on&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;bits&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;value&amp;nbsp; 2048&amp;nbsp;&amp;nbsp; 1024&amp;nbsp;&amp;nbsp; 512&amp;nbsp;&amp;nbsp; 256&amp;nbsp;&amp;nbsp; 128&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 64&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; after applying MASK_BITS1&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; after applying MASK_BITS2&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;after applying MASK_BITS3&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;What I want to do is to have the nibbles placed into a 10 way switch for assigning the digital output for digits 0-9. How do I go about this? Im really confused mainly because I'm a novice when it comes to C but I am getting better all the time. Any help would be greatly appreciated.&lt;BR /&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Message Edited by karmabobby on &lt;/SPAN&gt;&lt;SPAN class="date_text"&gt;2008-04-04&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class="time_text"&gt;06:04 PM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Message Edited by karmabobby on &lt;/SPAN&gt;&lt;SPAN class="date_text"&gt;2008-04-04&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class="time_text"&gt;06:05 PM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 05 Apr 2008 00:03:16 GMT</pubDate>
    <dc:creator>karmabobby</dc:creator>
    <dc:date>2008-04-05T00:03:16Z</dc:date>
    <item>
      <title>Digital timer using HCS08 MC09S08GB60</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-timer-using-HCS08-MC09S08GB60/m-p/209747#M17923</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fimg37.picoodle.com%2Fimg%2Fimg37%2F4%2F3%2F28%2Ff_7segmentdism_4b5dfa5.png" rel="nofollow noopener noreferrer" target="_blank"&gt;&lt;SPAN style="color: #017BBA;"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;A href="http://img37.picoodle.com/img/img37/4/3/28/f_7segmentdism_4b5dfa5.png" rel="nofollow noopener noreferrer" target="test_blank"&gt;http://img37.picoodle.com/img/img37/4/3/28/f_7segmentdism_4b5dfa5.png&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Hi, thanks to allawtterb and bigmac who helped me get my last program working correctly. Now I need some more advice.&amp;nbsp;For another program I want to&amp;nbsp;use the last program and modify it for&amp;nbsp;a digital display timer. I have come up&amp;nbsp;the general form of the program but&amp;nbsp;I am&amp;nbsp;confused of how to approach this. Here is my current code.&lt;/DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#include &amp;lt;hidef.h&amp;gt; /* for EnableInterrupts macro */#include "derivative.h" /* include peripheral declarations */#define MASK_BITS1 0xF00 //Masks bits 11-8 on#define MASK_BITS2 0x0F0 //Masks bits 7-4 on#define MASK_BITS3 0x00F //Masks bits 3-0 on&amp;nbsp; #define DIGIT_PORT&amp;nbsp; PTFD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Port F used for digits//#define DIGIT_MASK&amp;nbsp; 0xF0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Used to mask bits 7,6 and 5 in Port F//#define SEG_PORT&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Port B used for segments //#define SEG_MASK&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x7F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Used to mask Port B for correct output//#define LED_DISPLAY PTAD_PTAD2#define Mask_Digits 0x03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //used to mask variable digits to 00000011#define SEVEN_SEG_0 0x3F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //digits 0 through 9 in display form#define SEVEN_SEG_1 0x06#define SEVEN_SEG_2 0x5B#define SEVEN_SEG_3 0x4F#define SEVEN_SEG_4 0x66#define SEVEN_SEG_5 0x6D#define SEVEN_SEG_6 0x7D#define SEVEN_SEG_7 0x07#define SEVEN_SEG_8 0x7F#define SEVEN_SEG_9 0x6F// Function Prototypes //void delay(long int);void Output_Seven_Segments(byte, byte);void main(void);int FixDigit2(int);EnableInterrupts; /* enable interrupts */&amp;nbsp; /* include your code here */&amp;nbsp;&amp;nbsp; void delay(long int n){ long int i; unsigned int j; for (i=0; i&amp;lt;n; i++)&amp;nbsp;&amp;nbsp; for (j=0; j&amp;lt;100; j++)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {}}&amp;nbsp; void Output_Seven_Segments (byte segments, byte digit){&amp;nbsp;&amp;nbsp; //Remember: segments variable is formed as: //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DP g f e d c b a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; digit &amp;amp;= Mask_Digits; //Mask variable digit to '00000011'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (digit==0)&amp;nbsp;&amp;nbsp; //This is the broken display&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; segments=FixDigit2(segments); //Call a subroutine to mangle all bits&amp;nbsp;&amp;nbsp; DIGIT_PORT &amp;amp;= ~DIGIT_MASK;&amp;nbsp; // Set all digits OFF //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEG_PORT = segments &amp;amp; SEG_MASK;&amp;nbsp; //Port B assigned vairable segments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIGIT_PORT |= (0x10 &amp;lt;&amp;lt; digit);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (digit)&amp;nbsp; {&amp;nbsp; case 0:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIGIT_PORT = 0x80;//Drive most significant digit on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp; case 1:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIGIT_PORT = 0x40;//Drive second digit on&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp; case 2:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIGIT_PORT = 0x20;//Drive least significant digit on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp;&amp;nbsp; case 3:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LED_DISPLAY = 1;//Drive LED display on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; }void main (void){&amp;nbsp; // Set DDRs for output ports&amp;nbsp;&amp;nbsp; SOPT_COPE = 0;//Disable watchdog timer&amp;nbsp;&amp;nbsp; PTADD = 0x02; // Replace XX with the hex value to set the PA2 and PA1 as outputs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTFDD = 0xE0; // Same here, setting the inputs/outputs for port F&amp;nbsp;&amp;nbsp; PTBDD = 0x7F; // Setting the input/outputs for Port B&amp;nbsp;&amp;nbsp;&amp;nbsp; time=0;&amp;nbsp; for (;;)&amp;nbsp; //Loop forever (as always!) {&amp;nbsp; time++; //increment variable time by one&amp;nbsp;&amp;nbsp;&amp;nbsp; //Convert to Segments and Output bits (11:8) of time&amp;nbsp; delay(1);&amp;nbsp; //Convert to Segments and Output bits (7:4) of time&amp;nbsp; delay(1);&amp;nbsp; //Convert ...&amp;nbsp; bits (3:0) of time&amp;nbsp; delay(1); }} int FixDigit2(int value) {&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char newval;&amp;nbsp; newval=0;&amp;nbsp;&amp;nbsp;&amp;nbsp; newval=newval|(value&amp;amp;0x01)&amp;lt;&amp;lt;6;&amp;nbsp;&amp;nbsp; //Bit 0 becomes 6&amp;nbsp; newval=newval|(value&amp;amp;0x02)&amp;gt;&amp;gt;1;&amp;nbsp;&amp;nbsp; //Bit 1 becomes 0&amp;nbsp; newval=newval|(value&amp;amp;0x04)&amp;lt;&amp;lt;5;&amp;nbsp; //Bit 2 becomes 7&amp;nbsp; newval=newval|(value&amp;amp;0x40)&amp;gt;&amp;gt;4;&amp;nbsp; //Bit 6 becomes 2&amp;nbsp; newval=newval|(value&amp;amp;0x80)&amp;gt;&amp;gt;6;&amp;nbsp; //Bit 7 becomes 1&amp;nbsp; newval=newval|(value&amp;amp;0x38);&amp;nbsp;&amp;nbsp;&amp;nbsp; //And bits 543 are copied undisturbed&amp;nbsp;&amp;nbsp;&amp;nbsp; return (newval);}&lt;/PRE&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;I need to get the variable time which is an unsigned int. I then need to mask bits 11-8 off then convert it into the digital display form and display it on the board.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;This will be the same for the other 2 digits but with bits 7-4 and bits 3-0 respectively.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I will need another delay routine for the incrementation of varaible time to get it to count every mili second. What is the best way to do this? Would a case statement be Ideal?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The part I get confused it after I mask the 12 bits into 3 seperate nibbles by ANDING them with the variables.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#define MASK_BITS1 0xF00 //Masks bits 11-8 on&lt;BR /&gt;#define MASK_BITS2 0x0F0 //Masks bits 7-4 on&lt;BR /&gt;#define MASK_BITS3 0x00F //Masks bits 3-0 on&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;bits&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;value&amp;nbsp; 2048&amp;nbsp;&amp;nbsp; 1024&amp;nbsp;&amp;nbsp; 512&amp;nbsp;&amp;nbsp; 256&amp;nbsp;&amp;nbsp; 128&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 64&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; after applying MASK_BITS1&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; after applying MASK_BITS2&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;after applying MASK_BITS3&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;What I want to do is to have the nibbles placed into a 10 way switch for assigning the digital output for digits 0-9. How do I go about this? Im really confused mainly because I'm a novice when it comes to C but I am getting better all the time. Any help would be greatly appreciated.&lt;BR /&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Message Edited by karmabobby on &lt;/SPAN&gt;&lt;SPAN class="date_text"&gt;2008-04-04&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class="time_text"&gt;06:04 PM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Message Edited by karmabobby on &lt;/SPAN&gt;&lt;SPAN class="date_text"&gt;2008-04-04&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class="time_text"&gt;06:05 PM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 05 Apr 2008 00:03:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-timer-using-HCS08-MC09S08GB60/m-p/209747#M17923</guid>
      <dc:creator>karmabobby</dc:creator>
      <dc:date>2008-04-05T00:03:16Z</dc:date>
    </item>
    <item>
      <title>Re: Digital timer using HCS08 MC09S08GB60</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-timer-using-HCS08-MC09S08GB60/m-p/209748#M17924</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;First of all, it seems like you are doing some unnecessary things in your code.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;You are setting DIGIT_PORT 3 times in a row, this only needs to be done once.&amp;nbsp; There is no need to turn off the digits then turn on digits.&amp;nbsp; Just turning on is fine.&amp;nbsp; You then have 2 methods for turning digits, a switch and a shifting method.&amp;nbsp; I would get rid of the switch and just use the shifting method but change how you are doing it.&amp;nbsp; The OR with itself seems like it is not needed and the shifting method is broken.&amp;nbsp; I would change it to:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;if (digit == 0x03)   // If the LED display is to be used{   LED_DISPLAY = 1;  // Enable the LED display   DIGIT_PORT = 0x00; // Make sure the 7-segment displays are disabled}else                 // Otherwise, use a 7-segment display{   LED_DISPLAY = 0;  // Ensure the LED display is off   DIGIT_PORT = (0x80 &amp;gt;&amp;gt; digit);        // Turn on the proper digit}&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;It seems like you want to do 2 different things, one being display a 3 digit hex value on your 3 seven segment displays and two being create some sort of or counter.&amp;nbsp; I don't exactly understand what you are trying to do with counting miliseconds, do you have to do something after you reach the count? Update the display?&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;You have 10 defines of the format SEVEN_SEG_# where '#'&amp;nbsp;appears to the number&amp;nbsp;that should be displayed.&amp;nbsp; If you want to display hex you need A-F as well.&amp;nbsp; B will be a problem,&amp;nbsp;perhaps you can put it in lower case as otherwise it looks&amp;nbsp;just like 8.&amp;nbsp;&amp;nbsp; I would suggest you use a look up table to go from 0-F to turning on the proper segments.&amp;nbsp; &amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 05 Apr 2008 01:47:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-timer-using-HCS08-MC09S08GB60/m-p/209748#M17924</guid>
      <dc:creator>allawtterb</dc:creator>
      <dc:date>2008-04-05T01:47:10Z</dc:date>
    </item>
    <item>
      <title>Re: Digital timer using HCS08 MC09S08GB60</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-timer-using-HCS08-MC09S08GB60/m-p/209749#M17925</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I am trying to develop a reaction timer to show how long a button was depressed by the user.&amp;nbsp;The coding inconsitancies came&amp;nbsp;about when combining bigmac's and my existing code together I will sort that out.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;What I am wanting to do is to count in milliseconds how long PTA0 which is a push button has been pressed, eventually that is. I thought getting the counter/timer working correctly first would be the best approach as the "reaction timer" is simply a switch or an if, I would go with a switch for it.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;What would be the best way to extract the 3 nibbles and convert the three into&amp;nbsp;the hexadecimal seven segment display form? The source code I have posted is a slightly altered version of what I had with the seven segment display. Its just&amp;nbsp;my way of trying to get across what I am trying to do.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 05 Apr 2008 03:18:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-timer-using-HCS08-MC09S08GB60/m-p/209749#M17925</guid>
      <dc:creator>karmabobby</dc:creator>
      <dc:date>2008-04-05T03:18:25Z</dc:date>
    </item>
    <item>
      <title>Re: Digital timer using HCS08 MC09S08GB60</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-timer-using-HCS08-MC09S08GB60/m-p/209750#M17926</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;BLOCKQUOTE&gt;&lt;DIV&gt;&lt;HR /&gt;karmabobby wrote:&lt;BR /&gt;&lt;DIV&gt;What would be the best way to extract the 3 nibbles and convert the three into&amp;nbsp;the hexadecimal seven segment display form? The source code I have posted is a slightly altered version of what I had with the seven segment display. Its just&amp;nbsp;my way of trying to get across what I am trying to do.&lt;/DIV&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV&gt;I would mask the value,&amp;nbsp;use a lookup table then shift it&amp;nbsp;to get the seven segment value,&amp;nbsp; something like this:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;...&lt;/PRE&gt;&lt;PRE&gt;const byte Segment_Lookup[16] =   // Lookup table for hex numbers to segments on{   SEVEN_SEG_0, SEVEN_SEG_1, SEVEN_SEG_2, SEVEN_SEG_3,    SEVEN_SEG_4, SEVEN_SEG_5, SEVEN_SEG_6, SEVEN_SEG_7,    SEVEN_SEG_8, SEVEN_SEG_9, SEVEN_SEG_A, SEVEN_SEG_B,   SEVEN_SEG_C, SEVEN_SEG_D, SEVEN_SEG_E, SEVEN_SEG_F};...byte segment;   // Value to update the seven segment display withbyte i;         // Counter in for loopword value;     // Value you are wanting to convert and displayfor (i=0;i&amp;lt;3;i++){   segment = Segment_Lookup[((byte)value &amp;amp; 0x0F)]; // Mask value and find segment value in lookup table   Output_Seven_Segments(segment,i);               // Display on the digit   value &amp;gt;&amp;gt;= 4;                                    // shift for next nibble}&lt;/PRE&gt;...&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;You can add a delay at the end of the for loop if you want one inbetween displays.&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Edit: Typo in code&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by allawtterb on &lt;SPAN class="date_text"&gt;2008-04-04&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;03:59 PM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 05 Apr 2008 03:58:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-timer-using-HCS08-MC09S08GB60/m-p/209750#M17926</guid>
      <dc:creator>allawtterb</dc:creator>
      <dc:date>2008-04-05T03:58:05Z</dc:date>
    </item>
    <item>
      <title>Re: Digital timer using HCS08 MC09S08GB60</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-timer-using-HCS08-MC09S08GB60/m-p/209751#M17927</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#include &amp;lt;hidef.h&amp;gt; /* for EnableInterrupts macro */#include "derivative.h" /* include peripheral declarations */#define MASK_BITS1 0xF00 //Masks bits 11-8 on#define MASK_BITS2 0x0F0 //Masks bits 7-4 on#define MASK_BITS3 0x00F //Masks bits 3-0 on #define MASK_NIBBLE 0x0F // Masks buts 7-4 off #define DIGIT_PORT  PTFD     //Port F used for digits//#define DIGIT_MASK  0xF0     //Used to mask bits 7,6 and 5 in Port F//#define SEG_PORT    PTBD       // Port B used for segments //#define SEG_MASK    0x7F       //Used to mask Port B for correct output//#define Mask_Digits 0x03     //used to mask variable digits to 00000011// Function Prototypes //unsigned char NibbleToSegments(unsigned char);void delay(long int);void Output_Seven_Segments(unsigned char, unsigned char);void main(void);unsigned char NibbleToSegments (unsigned char nibble){  const byte Segment_Lookup[16] =   // Lookup table for hex numbers to segments on{    63,6,91,79,102,109,125,7,127,103,119,124,57,94,121,113}; nibble&amp;amp;=MASK_NIBBLE;  return Segment_Lookup[nibble];}   void delay(long int n){ long int i; unsigned int j; for (i=0; i&amp;lt;n; i++)   for (j=0; j&amp;lt;1000; j++)     {}}  void Output_Seven_Segments (unsigned char segments ,unsigned char digit){ //Remember: segments variable is formed as: //        DP g f e d c b a      digit &amp;amp;= Mask_Digits; //Mask variable digit to '00000011'      DIGIT_PORT &amp;amp;= ~DIGIT_MASK;  // Set all digits OFF //      SEG_PORT = segments &amp;amp; SEG_MASK;  //Port B assigned vairable segments      DIGIT_PORT = (0x80 &amp;gt;&amp;gt; digit);        // Turn on the proper digit}void main (void){   unsigned char segment;    unsigned int time;     EnableInterrupts; /* enable interrupts */  // Set DDRs for output ports   SOPT_COPE = 0;//Disable watchdog timer   PTADD = 0x02; // Replace XX with the hex value to set the PA2 and PA1 as outputs      PTFDD = 0xE0; // Same here, setting the inputs/outputs for port F   PTBDD = 0xFF; // Setting the input/outputs for Port B          time=0;        for (;;)  //Loop forever (as always!) {   time++;     segment=(time&amp;amp;MASK_BITS1);    NibbleToSegments(segment);    Output_Seven_Segments(segment,0);  //Convert to Segments and Output bits (11:8) of time  delay(1);        segment=(time&amp;amp;MASK_BITS2);    NibbleToSegments(segment);     Output_Seven_Segments(segment,1);  //Convert to Segments and Output bits (7:4) of time  delay(1);   segment=(time&amp;amp;MASK_BITS3);  NibbleToSegments(segment);    Output_Seven_Segments(segment,2);  //Convert ...  bits (3:0) of time  delay(1); }}&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;Hi, I didn't really understand how to implement your code so I tried something else. Its almost working! However its still just showing as a binary counter on the segment display, instead of picking the values from the lookup table(which is correct it was given to me). Any suggestions?!&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Apr 2008 22:20:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Digital-timer-using-HCS08-MC09S08GB60/m-p/209751#M17927</guid>
      <dc:creator>karmabobby</dc:creator>
      <dc:date>2008-04-23T22:20:07Z</dc:date>
    </item>
  </channel>
</rss>

