<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-2058</id>
	<title>Nabble - MicroControllers - hc12</title>
	<updated>2009-11-06T01:41:46Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/MicroControllers---hc12-f2058.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/MicroControllers---hc12-f2058.html" />
	<subtitle type="html">Freescale HC12 MicroController User Group.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26229197</id>
	<title>RE: HCS12 SCI Flash Programming Help</title>
	<published>2009-11-06T01:41:46Z</published>
	<updated>2009-11-06T01:41:46Z</updated>
	<author>
		<name>jpdi</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;Below, the vector interrupt table I use for DP256...
&lt;br&gt;Note the address I put it is 0xff80, not 0xef80...
&lt;br&gt;I use ICC12 too, and it run OK for interrupt.
&lt;br&gt;When I used DP256, I often write some functions in RAM, but I never change
&lt;br&gt;the vector table address, just switched RAM to 0xd000 with NoIce debugger.
&lt;br&gt;&lt;br&gt;Hope this helps.
&lt;br&gt;&lt;br&gt;Best regards.
&lt;br&gt;Joel
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;//*********************************************************
&lt;br&gt;// change the address if your vector starts elsewhere
&lt;br&gt;// Processeur 9S12DP256 : vecteurs interruptions en 0xff80
&lt;br&gt;#pragma abs_address:0xFF80
&lt;br&gt;&lt;br&gt;void (*interrupt_vectors[])(void) =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // to cast a constant, say 0xb600, use (void (*)())0xb600
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Tous les vecteurs interrupt occupent 2 octets consécutifs. Ainsi
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // l'adresse de la routine d'interruption RTI est définie aux
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // adresses $FFF0-$FFF1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// Reserved $FF80
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// Reserved $FF82
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// Reserved $FF84
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// Reserved $FF86
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// Reserved $FF88
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// Reserved $FF8A
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FF8C	 &amp;nbsp;PWM Emergency Shutdown
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FF8E	 &amp;nbsp;Port P Interrupt
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FF90	 &amp;nbsp;MSCAN 4 Transmit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FF92	 &amp;nbsp;MSCAN 4 Receive
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FF94	 &amp;nbsp;MSCAN 4 Error
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FF96	 &amp;nbsp;MSCAN 4 Wake-up
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FF98	 &amp;nbsp;MSCAN 3 Transmit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FF9A	 &amp;nbsp;MSCAN 3 Receive
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FF9C	 &amp;nbsp;MSCAN 3 Error
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FF9E	 &amp;nbsp;MSCAN 3 Wake-up
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFA0	 &amp;nbsp;MSCAN 2 Transmit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFA2	 &amp;nbsp;MSCAN 2 Receive
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFA4	 &amp;nbsp;MSCAN 2 Error
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFA6	 &amp;nbsp;MSCAN 2 Wake-up
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFA8	 &amp;nbsp;MSCAN 1 Transmit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFAA	 &amp;nbsp;MSCAN 1 Receive
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFAC	 &amp;nbsp;MSCAN 1 Error
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFAE	 &amp;nbsp;MSCAN 1 Wake-up
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFB0	 &amp;nbsp;MSCAN 0 Transmit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFB2	 &amp;nbsp;MSCAN 0 Receive
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFB4	 &amp;nbsp;MSCAN 0 Error
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFB6	 &amp;nbsp;MSCAN 0 Wake-up
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFB8	 &amp;nbsp;Flash
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFBA	 &amp;nbsp;EEPROM
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFBC	 &amp;nbsp;SPI2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFBE	 &amp;nbsp;SPI1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFC0	 &amp;nbsp;IIC Bus
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFC2	 &amp;nbsp;BDLC
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFC4	 &amp;nbsp;CRG Self Clock Mode
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFC6	 &amp;nbsp;CRG PLL Lock
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFC8	 &amp;nbsp;Pulse Acc B Overflow
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_TimerModulus,	 &amp;nbsp; &amp;nbsp; &amp;nbsp;// $FFCA	 &amp;nbsp;Modulus Down Counter
&lt;br&gt;Underflow
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFCC	 &amp;nbsp;Port H Interrupt
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFCE	 &amp;nbsp;Port J Interrupt
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFD0	 &amp;nbsp;ATD1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFD2	 &amp;nbsp;ATD0
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_Sci1, 		 &amp;nbsp; 	// $FFD4	 &amp;nbsp;SCI1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_Sci0, 		 &amp;nbsp; 	// $FFD6	 &amp;nbsp;SCI0
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFD8	 &amp;nbsp;SPI0
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFDA	 &amp;nbsp;Pulse Acc A Input Edge
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFDC	 &amp;nbsp;Pulse Acc A Overflow
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFDE	 &amp;nbsp;Timer Overflow
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_Timer7, 		// $FFE0	 &amp;nbsp;Timer Channel 7
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_Timer6, 		// $FFE2	 &amp;nbsp;Timer Channel 6
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_Timer5, 		// $FFE4	 &amp;nbsp;Timer Channel 5
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_Timer4, &amp;nbsp;		// $FFE6	 &amp;nbsp;Timer Channel 4
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_Timer3,			// $FFE8	 &amp;nbsp;Timer Channel 3
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_Timer2,			// $FFEA	 &amp;nbsp;Timer Channel 2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_Timer1,			// $FFEC	 &amp;nbsp;Timer Channel 1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_Timer0,			// $FFEE	 &amp;nbsp;Timer Channel 0
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_Rti, 		 &amp;nbsp; 	// $FFF0	 &amp;nbsp;Real Time
&lt;br&gt;Interrupt
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFF2	 &amp;nbsp;IRQ
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFF4	 &amp;nbsp;XIRQ
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFF6	 &amp;nbsp;SWI
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFF8	 &amp;nbsp;Unimplement Instr. Trap
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe, 	// $FFFA	 &amp;nbsp;COP failure reset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ISR_NonDeveloppe,	 &amp;nbsp; &amp;nbsp; &amp;nbsp;// $FFFC	 &amp;nbsp;Clock monitor fail reset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _start,			// $FFFE	 &amp;nbsp;Reset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };
&lt;br&gt;&lt;br&gt;-----Message d'origine-----
&lt;br&gt;De : &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26229197&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt; [mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26229197&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;] De la part de
&lt;br&gt;jssimbe
&lt;br&gt;Envoyé : vendredi 6 novembre 2009 02:29
&lt;br&gt;À : &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26229197&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;
&lt;br&gt;Objet : [68HC12] HCS12 SCI Flash Programming Help
&lt;br&gt;&lt;br&gt;I'm using and HCS12 with icc12 compiler. &amp;nbsp;I'm using SCI1 to communicate to a
&lt;br&gt;touch screen LCD. &amp;nbsp;This program loads the LCD GUI. &amp;nbsp;When I try loading the
&lt;br&gt;program into flash, it doesn't work. &amp;nbsp;When I'm not using flash, the program
&lt;br&gt;works fine and GUI is loaded on the screen. &amp;nbsp;When I flash the board, I
&lt;br&gt;include the vectors_dp256 file and set the abs_address to 0xef80. &amp;nbsp;Any help
&lt;br&gt;would be greatly appreciated. &amp;nbsp;Thanks.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/HCS12-SCI-Flash-Programming-Help-tp26225430p26229197.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26225430</id>
	<title>HCS12 SCI Flash Programming Help</title>
	<published>2009-11-05T17:28:40Z</published>
	<updated>2009-11-05T17:28:40Z</updated>
	<author>
		<name>jssimbe</name>
	</author>
	<content type="html">I'm using and HCS12 with icc12 compiler. &amp;nbsp;I'm using SCI1 to communicate to a touch screen LCD. &amp;nbsp;This program loads the LCD GUI. &amp;nbsp;When I try loading the program into flash, it doesn't work. &amp;nbsp;When I'm not using flash, the program works fine and GUI is loaded on the screen. &amp;nbsp;When I flash the board, I include the vectors_dp256 file and set the abs_address to 0xef80. &amp;nbsp;Any help would be greatly appreciated. &amp;nbsp;Thanks.
&lt;br&gt;&lt;br&gt;#include &amp;lt;mc9s12dp256.h&amp;gt;
&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;
&lt;br&gt;&lt;br&gt;#ifndef TDRE
&lt;br&gt;#define TDRE	0x80
&lt;br&gt;#endif
&lt;br&gt;#ifndef RDRF
&lt;br&gt;#define RDRF	0x20
&lt;br&gt;#endif
&lt;br&gt;#ifndef OR
&lt;br&gt;#define OR		0x08
&lt;br&gt;#endif
&lt;br&gt;&lt;br&gt;void main (){
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sc_init(); 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; loadscreen();			
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void sc_init(){
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI1BDL = 0x4E;	 // 19200 Baud Rate
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI1BDH = 0x00;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI1CR1 = 0x00;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI1CR2 = 0x2C;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI1SR1 = 0xA8;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;void outchar(data1){ &amp;nbsp;// Function to send commands
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while(!(SCI1SR1 &amp; TDRE)){};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI1DRL = data1; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;void loadscreen (){		//loads GUI
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outchar(0x10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outchar(0x02);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outchar(0x3E);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outchar(0x00);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outchar(0x50);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/HCS12-SCI-Flash-Programming-Help-tp26225430p26225430.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26152664</id>
	<title>Re: Re: Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-11-01T08:51:35Z</published>
	<updated>2009-11-01T08:51:35Z</updated>
	<author>
		<name>Bill_CT</name>
	</author>
	<content type="html">&amp;nbsp;&amp;gt; Tom Almy writes on 10:57 AM 10/31/2009
&lt;br&gt;&amp;gt;This struck me as particularly strange since I've been mixing pointers
&lt;br&gt;&amp;gt;and arrays since 1980 (when I first used C) and have never caused any
&lt;br&gt;&amp;gt;kind of damage! In fact you really need to mix the two to get maximum
&lt;br&gt;&amp;gt;leverage from the language.
&lt;br&gt;&lt;br&gt;Technically &amp;quot;Hello World&amp;quot; mixes an array used with printf which takes 
&lt;br&gt;a pointer.
&lt;br&gt;&lt;br&gt;&amp;gt;1. You have to declare arrays to allocate memory since I think most of
&lt;br&gt;&amp;gt;us can agree that malloc has no
&lt;br&gt;&amp;gt;business in embedded programming of small microcontrollers.
&lt;br&gt;&lt;br&gt;Agree.
&lt;br&gt;&lt;br&gt;&amp;gt;2. It is generally more efficient to walk through an array using
&lt;br&gt;&amp;gt;pointers rather than indexing.
&lt;br&gt;&lt;br&gt;Yes. &amp;nbsp;I might not be wrong to say it's always more efficient.
&lt;br&gt;&lt;br&gt;&amp;gt;3. Array and pointer parameters are basically identical since the
&lt;br&gt;&amp;gt;array is passed by reference and the pointer is passed by value. They
&lt;br&gt;&amp;gt;can be used interchangeably.
&lt;br&gt;&lt;br&gt;Yes. &amp;nbsp;The one place that can burn you because of this is sizeof used 
&lt;br&gt;on an argument to a function with an array type:
&lt;br&gt;&lt;br&gt;void function(char buffer[32])
&lt;br&gt;{
&lt;br&gt;int i = sizeof buffer; &amp;nbsp;// This is NOT 32 but sizeof (char *)
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;However, this isn't going to cause &amp;quot;damage&amp;quot; because this error would 
&lt;br&gt;fall out quickly in testing.
&lt;br&gt;&lt;br&gt;&amp;gt;4. The comment &amp;quot;the only time a problem will occur is when a pointer
&lt;br&gt;&amp;gt;and array are used in different modules (one public and the other
&lt;br&gt;&amp;gt;externed)&amp;quot; isn't an issue if using header files with extern
&lt;br&gt;&amp;gt;declarations for all global variables is practiced. This will catch
&lt;br&gt;&amp;gt;the definition being different than the declaration.
&lt;br&gt;&lt;br&gt;I agree. &amp;nbsp;It shouldn't be an issue, but since it can be done, it is a 
&lt;br&gt;problem when it is. &amp;nbsp;I've seen a lot of programmer's code over the 
&lt;br&gt;years and there's a lot of &amp;quot;quick extern&amp;quot; declarations that are 
&lt;br&gt;included in the C file and not a header file. &amp;nbsp;It's not a good 
&lt;br&gt;practice but it's still pretty common.
&lt;br&gt;&lt;br&gt;&lt;br&gt;Bill 
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26152664.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26145831</id>
	<title>Re: Counting 1's in 16 bit word</title>
	<published>2009-10-31T13:56:01Z</published>
	<updated>2009-10-31T13:56:01Z</updated>
	<author>
		<name>Tom Almy</name>
	</author>
	<content type="html">Hmm, for some reason I'm not getting about half of the posts here in my inbox, including this one I discovered by going to the yahoo site.
&lt;br&gt;&lt;br&gt;--- In &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26145831&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;, Andrei Chichak &amp;lt;groups@...&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Ah, clever, I like the != 0 trick. You must be from Oregon.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Did you notice the bug in the Spanish code?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; A
&lt;br&gt;&lt;br&gt;His program:
&lt;br&gt;ldx #00
&lt;br&gt;ldy #08
&lt;br&gt;ciclo lsrd
&lt;br&gt;bcc cero
&lt;br&gt;inx
&lt;br&gt;cero dey
&lt;br&gt;bne ciclo
&lt;br&gt;&lt;br&gt;The count, 8, should of course be 16. However it does run faster that way. :-)
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Counting-1%27s-in-16-bit-word-tp25983912p26145831.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26143590</id>
	<title>Re: Re: Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-10-31T08:57:45Z</published>
	<updated>2009-10-31T08:57:45Z</updated>
	<author>
		<name>Tom Almy</name>
	</author>
	<content type="html">&lt;br&gt;On Oct 31, 2009, at 7:54 AM, Bill_CT wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; --- In &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26143590&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;, Andrei Chichak &amp;lt;groups@...&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On 2009-October-28, at 11:06 PM, Bill Auerbach wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Andrei Chichak writes on 02:20 AM 10/28/2009
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; In the definition of encode - either use pointers or arrays, don't
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; intermix. Use void encode( char out[]) instead. What you have &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; would
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; probably cause all kinds of damage.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; You say &amp;quot;probably cause all kinds of damage&amp;quot;. &amp;nbsp;Before anyone here &amp;nbsp;
&lt;br&gt;&amp;gt; thinks that's a really bad thing and it means they are doing &amp;nbsp;
&lt;br&gt;&amp;gt; something wrong, perhaps you should back this statement with &amp;nbsp;
&lt;br&gt;&amp;gt; something concrete. &amp;nbsp;Show us a case that causes &amp;quot;all kinds of &amp;nbsp;
&lt;br&gt;&amp;gt; damage&amp;quot;. If you can't, please don't put your gloom and doom &amp;nbsp;
&lt;br&gt;&amp;gt; programming rules out on a public forum where beginners may be &amp;nbsp;
&lt;br&gt;&amp;gt; trying to learn correct programming practices.
&lt;/div&gt;&lt;br&gt;This struck me as particularly strange since I've been mixing pointers &amp;nbsp;
&lt;br&gt;and arrays since 1980 (when I first used C) and have never caused any &amp;nbsp;
&lt;br&gt;kind of damage! In fact you really need to mix the two to get maximum &amp;nbsp;
&lt;br&gt;leverage from the language.
&lt;br&gt;&lt;br&gt;1. You have to declare arrays to allocate memory since I think most of &amp;nbsp;
&lt;br&gt;us can agree that malloc has no
&lt;br&gt;business in embedded programming of small microcontrollers.
&lt;br&gt;2. It is generally more efficient to walk through an array using &amp;nbsp;
&lt;br&gt;pointers rather than indexing.
&lt;br&gt;3. Array and pointer parameters are basically identical since the &amp;nbsp;
&lt;br&gt;array is passed by reference and the pointer is passed by value. They &amp;nbsp;
&lt;br&gt;can be used interchangeably.
&lt;br&gt;4. The comment &amp;quot;the only time a problem will occur is when a pointer &amp;nbsp;
&lt;br&gt;and array are used in different modules (one public and the other &amp;nbsp;
&lt;br&gt;externed)&amp;quot; isn't an issue if using header files with extern &amp;nbsp;
&lt;br&gt;declarations for all global variables is practiced. This will catch &amp;nbsp;
&lt;br&gt;the definition being different than the declaration.
&lt;br&gt;&lt;br&gt;Tom Almy
&lt;br&gt;Tualatin, Oregon USA
&lt;br&gt;Internet: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26143590&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt;
&lt;br&gt;Website: almy.us
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26143590.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26143001</id>
	<title>Re: Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-10-31T07:54:36Z</published>
	<updated>2009-10-31T07:54:36Z</updated>
	<author>
		<name>Bill_CT</name>
	</author>
	<content type="html">&lt;br&gt;&lt;br&gt;--- In &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26143001&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;, Andrei Chichak &amp;lt;groups@...&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; On 2009-October-28, at 11:06 PM, Bill Auerbach wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Andrei Chichak writes on 02:20 AM 10/28/2009
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;In the definition of encode - either use pointers or arrays, don't
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;intermix. Use void encode( char out[]) instead. What you have would
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;probably cause all kinds of damage.
&lt;br&gt;&lt;br&gt;You say &amp;quot;probably cause all kinds of damage&amp;quot;. &amp;nbsp;Before anyone here thinks that's a really bad thing and it means they are doing something wrong, perhaps you should back this statement with something concrete. &amp;nbsp;Show us a case that causes &amp;quot;all kinds of damage&amp;quot;. &amp;nbsp;If you can't, please don't put your gloom and doom programming rules out on a public forum where beginners may be trying to learn correct programming practices.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; There is no harm to use pointers and arrays and no damage results
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; from doing so. They are equivalent - the only time a problem will
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; occur is when a pointer and array are used in different modules (one
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; public and the other externed).
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Bill
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Remember, the program will only be read twice after you write it, &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; once by the compiler (and it doesn't care what you do), and the poor &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; sod that has to maintain it.
&lt;/div&gt;&lt;br&gt;It's a much larger concern and problem if the maintainer doesn't know the fundamental properties and semantics of the language.
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26143001.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26124079</id>
	<title>Re: Re: Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-10-29T19:23:32Z</published>
	<updated>2009-10-29T19:23:32Z</updated>
	<author>
		<name>Andrei Chichak-2</name>
	</author>
	<content type="html">&lt;br&gt;On 2009-October-28, at 11:06 PM, Bill Auerbach wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Andrei Chichak writes on 02:20 AM 10/28/2009
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;In the definition of encode - either use pointers or arrays, don't
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;intermix. Use void encode( char out[]) instead. What you have would
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;probably cause all kinds of damage.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; There is no harm to use pointers and arrays and no damage results
&lt;br&gt;&amp;gt;&amp;gt; from doing so. They are equivalent - the only time a problem will
&lt;br&gt;&amp;gt;&amp;gt; occur is when a pointer and array are used in different modules (one
&lt;br&gt;&amp;gt;&amp;gt; public and the other externed).
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Bill
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Remember, the program will only be read twice after you write it, &amp;nbsp;
&lt;br&gt;&amp;gt; once by the compiler (and it doesn't care what you do), and the poor &amp;nbsp;
&lt;br&gt;&amp;gt; sod that has to maintain it.
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;[Non-text portions of this message have been removed]
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26124079.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26123889</id>
	<title>Re: Re: Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-10-28T22:06:40Z</published>
	<updated>2009-10-28T22:06:40Z</updated>
	<author>
		<name>Bill_CT</name>
	</author>
	<content type="html">&amp;nbsp;&amp;gt; Andrei Chichak writes on 02:20 AM 10/28/2009
&lt;br&gt;&amp;gt;In the definition of encode - either use pointers or arrays, don't
&lt;br&gt;&amp;gt;intermix. Use void encode( char out[]) instead. What you have would
&lt;br&gt;&amp;gt;probably cause all kinds of damage.
&lt;br&gt;&lt;br&gt;There is no harm to use pointers and arrays and no damage results 
&lt;br&gt;from doing so. &amp;nbsp;They are equivalent - the only time a problem will 
&lt;br&gt;occur is when a pointer and array are used in different modules (one 
&lt;br&gt;public and the other externed).
&lt;br&gt;&lt;br&gt;&lt;br&gt;Bill 
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26123889.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26095302</id>
	<title>Re: Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-10-28T07:10:20Z</published>
	<updated>2009-10-28T07:10:20Z</updated>
	<author>
		<name>Robert-327</name>
	</author>
	<content type="html">As stated by others it is folly to use malloc/free in simple embedded systems. &amp;nbsp;The best solution is to implement asynchronous static ring buffers for rx/tx with timeout error reporting (see &lt;a href=&quot;http://www.seattlerobotics.org/encoder/200009/sciint11.c&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.seattlerobotics.org/encoder/200009/sciint11.c&lt;/a&gt;&amp;nbsp;for an asynch example without timeouts). &amp;nbsp;In the case where the output is fixed I wouldn't even bother with a buffer.
&lt;br&gt;&lt;br&gt;#ifndef bit
&lt;br&gt;#define bit(x)	(1 &amp;lt;&amp;lt; (x))
&lt;br&gt;#endif
&lt;br&gt;&lt;br&gt;void put_char(char c) {
&lt;br&gt;&amp;nbsp; while((SCI0SR1 &amp; bit(7)) == 0);
&lt;br&gt;&amp;nbsp; SCI0DRL = c;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void put_s(char* s) {
&lt;br&gt;&amp;nbsp; // Assumes char pointer is a zero terminated array (string)
&lt;br&gt;&amp;nbsp; while(*s)
&lt;br&gt;&amp;nbsp; &amp;nbsp; put_char(*s++);
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;const char *message = &amp;quot;Hello World&amp;quot;;
&lt;br&gt;const char *test_str = &amp;quot;tes0&amp;quot;; 
&lt;br&gt;&lt;br&gt;void main(void) {
&lt;br&gt;&amp;nbsp; sci_init(); // usual sci setup for baudrate, etc.
&lt;br&gt;&amp;nbsp; put_s(message);
&lt;br&gt;&amp;nbsp; while(1) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; put_s(test_str);
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;If the output is variable, the addition of the something like the following can be useful. &amp;nbsp;The obvious danger of using this function is the ease of overflowing the buffer. &amp;nbsp;Beware also that compiler implementations of this are typically not re-entrant so don't call it from inside an ISR or thread.
&lt;br&gt;&amp;nbsp;
&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;
&lt;br&gt;&lt;br&gt;void myPrintf(char *format, ...) {
&lt;br&gt;&amp;nbsp; char &amp;nbsp; &amp;nbsp;buffer[BUF_SIZE];
&lt;br&gt;&amp;nbsp; va_list stArgList;
&lt;br&gt;&lt;br&gt;&amp;nbsp; va_start(stArgList, format);
&lt;br&gt;&amp;nbsp; vsprintf(buffer, format, stArgList);
&lt;br&gt;&amp;nbsp; va_end(stArgList);
&lt;br&gt;&amp;nbsp; put_s(buffer);
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;-rob
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; #include &amp;quot;sci.h&amp;quot;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; int main(void);
&lt;br&gt;&amp;gt; void encode(char *out);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; int main(void)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp;char* head = &amp;quot;Hello World&amp;quot;; // declare first print statement
&lt;br&gt;&amp;gt; &amp;nbsp;char* outData =(char*) malloc (sizeof (char*)* 5); // make room for 5 char
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp;SCI_Init(9600,0); //Startup serial port 0(under LCD) at 9600 BAUD
&lt;br&gt;&amp;gt; &amp;nbsp;SCI_OutStatus(1); // Is it clear to send (buffer empty)
&lt;br&gt;&amp;gt; &amp;nbsp;SCI_OutString(head,0); // print &amp;quot;Hello World&amp;quot; to serial port (WORKS !!)
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp;while(1)
&lt;br&gt;&amp;gt; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(SCI_OutStatus(0))// Is it clear to send (buffer empty)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; 	encode(outData);//,out.throt,out.heading); // build output
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SCI_OutString(outData,0); // print out put to serial port
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;} 
&lt;br&gt;&amp;gt; &amp;nbsp;} &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;nbsp;return 0;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; void encode(char *out) // take in pointer and fill with chars
&lt;br&gt;&amp;gt; { 
&lt;br&gt;&amp;gt; 	out[0] = 't';
&lt;br&gt;&amp;gt; 	out[1] = 'e';
&lt;br&gt;&amp;gt; 	out[2] = 's';
&lt;br&gt;&amp;gt; 	out[3] = 0;
&lt;br&gt;&amp;gt; }
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26095302.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26089895</id>
	<title>Re: Re: Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-10-27T23:20:54Z</published>
	<updated>2009-10-27T23:20:54Z</updated>
	<author>
		<name>Andrei Chichak-2</name>
	</author>
	<content type="html">Okay, let's take a look at the output and the evidence and make some &amp;nbsp;
&lt;br&gt;wild ass guesses.
&lt;br&gt;&lt;br&gt;You can assume that SCI_OutString is okay since 1) the &amp;quot;Hello World&amp;quot; &amp;nbsp;
&lt;br&gt;comes out okay and 2) it is what is known as gospel code - written by &amp;nbsp;
&lt;br&gt;a god like being and written in a book.
&lt;br&gt;&lt;br&gt;Next, in your message you say &amp;quot;then print tes repeatedly&amp;quot;. Well, it &amp;nbsp;
&lt;br&gt;isn't printing tes (plural of T??) it is printing double quotes. &amp;nbsp;
&lt;br&gt;Nowhere in your code do you have a buffer that should be holding a &amp;quot;. &amp;nbsp;
&lt;br&gt;So we can assume that either encode() isn't working properly (but by &amp;nbsp;
&lt;br&gt;inspection it is pretty simple), or when you call SCI_OutString, you &amp;nbsp;
&lt;br&gt;are using a garbage pointer and it is printing random stuff.
&lt;br&gt;&lt;br&gt;In the definition of encode - either use pointers or arrays, don't &amp;nbsp;
&lt;br&gt;intermix. Use void encode( char out[]) instead. What you have would &amp;nbsp;
&lt;br&gt;probably cause all kinds of damage.
&lt;br&gt;&lt;br&gt;&lt;br&gt;Now, the character &amp;quot; has the hex value 0x22, so what you are printing &amp;nbsp;
&lt;br&gt;looks like 22222222222222222... in hex, with no 0x00 to terminate the &amp;nbsp;
&lt;br&gt;string, so it's going to print a whole bunch of it. It is quite hard &amp;nbsp;
&lt;br&gt;to determine what you are printing since you are in an infinite loop. &amp;nbsp;
&lt;br&gt;The data could be 0x2200, which would print out a single &amp;quot;, but since &amp;nbsp;
&lt;br&gt;it is in an infinite loop you would get &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;.
&lt;br&gt;&lt;br&gt;Running your code through lint showed that if malloc failed you would &amp;nbsp;
&lt;br&gt;have outData getting set to NULL. This would be a pointer to location &amp;nbsp;
&lt;br&gt;0. Encode would try and alter locations 0, 1, 2 and 3. Then you print &amp;nbsp;
&lt;br&gt;the string at location 0. The zero page of an HC12 is internal &amp;nbsp;
&lt;br&gt;registers. So you would set PORTA to 0x74, PORTB to 0x65, DDRA to &amp;nbsp;
&lt;br&gt;0x73, DDRB to 0x00, then print them out as a string.
&lt;br&gt;&lt;br&gt;If you are running some sort of a bootloader/monitor/debugger it is &amp;nbsp;
&lt;br&gt;possible to move the registers and possibly put FLASH down in the zero &amp;nbsp;
&lt;br&gt;page, or uninitialized RAM. It's really hard to predict what is going &amp;nbsp;
&lt;br&gt;to get printed.
&lt;br&gt;&lt;br&gt;Either way, you are printing a location that IS a long string of hex &amp;nbsp;
&lt;br&gt;0x22. We can see that from the output.
&lt;br&gt;&lt;br&gt;First, alter your code to have:
&lt;br&gt;&lt;br&gt;No infinite loop until you get a bit of control.
&lt;br&gt;&lt;br&gt;Fix encode as above.
&lt;br&gt;&lt;br&gt;char outData[5];
&lt;br&gt;Then, use SCI_OutChar(outData[0]); and make sure that you are getting &amp;nbsp;
&lt;br&gt;a 't'. This would make sure that encode is working properly.
&lt;br&gt;&lt;br&gt;Fix the malloc call so that the syntax is expressing what you actually &amp;nbsp;
&lt;br&gt;want and check the return code. Use SCI_OutString to print an error &amp;nbsp;
&lt;br&gt;message if malloc returns NULL.
&lt;br&gt;&lt;br&gt;If you really want to use malloc, use SCI_OutUHex((int)outData) and &amp;nbsp;
&lt;br&gt;take a look at where outData is pointing. I'm pretty sure that you &amp;nbsp;
&lt;br&gt;will find a whole bunch of 0x22 at that location.
&lt;br&gt;&lt;br&gt;&amp;nbsp;From the 10 commandments: &amp;nbsp;Thou shalt run lint frequently and study &amp;nbsp;
&lt;br&gt;its pronouncements with care, for verily its perception and judgement &amp;nbsp;
&lt;br&gt;oft exceed thine.
&lt;br&gt;&amp;nbsp;From the MISRA guidelines: Don't use pointers.
&lt;br&gt;&lt;br&gt;Andrei
&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------
&lt;br&gt;Andrei Chichak
&lt;br&gt;&lt;br&gt;Systems Developer
&lt;br&gt;CBF Systems Inc.
&lt;br&gt;4-038 NINT Innovation Centre
&lt;br&gt;11421 Saskatchewan Drive
&lt;br&gt;Edmonton, Alberta
&lt;br&gt;Canada
&lt;br&gt;T6G 2M9
&lt;br&gt;&lt;br&gt;Phone: 780-628-2072
&lt;br&gt;Skype: andrei.chichak
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;[Non-text portions of this message have been removed]
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26089895.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26088467</id>
	<title>Re: Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-10-27T19:39:33Z</published>
	<updated>2009-10-27T19:39:33Z</updated>
	<author>
		<name>Bill_CT</name>
	</author>
	<content type="html">Zach,
&lt;br&gt;&lt;br&gt;The code for the serial port looks OK, although for production code it would benefit from a code review.
&lt;br&gt;&lt;br&gt;SCI_OutStatus(1); // Is it clear to send (buffer empty)
&lt;br&gt;&lt;br&gt;This returns the status, so as is in main does nothing. &amp;nbsp;Since SCI_OutString checks the SCI status for each character, testing the status before the call isn't needed anyway.
&lt;br&gt;&lt;br&gt;The following might work (I don't have a running system or I would run it).
&lt;br&gt;&lt;br&gt;Bill
&lt;br&gt;-------------
&lt;br&gt;int main(void)
&lt;br&gt;{
&lt;br&gt;char* head = &amp;quot;Hello World&amp;quot;; // declare first print statement
&lt;br&gt;char outData[5]; // make room for 5 char
&lt;br&gt;&lt;br&gt;SCI_Init(9600,0); //Startup serial port 0(under LCD) at 9600 BAUD
&lt;br&gt;SCI_OutStatus(1); // Is it clear to send (buffer empty)
&lt;br&gt;SCI_OutString(head,0); // print &amp;quot;Hello World&amp;quot; to serial port (WORKS !!)
&lt;br&gt;&lt;br&gt;while(1)
&lt;br&gt;{
&lt;br&gt;if(SCI_OutStatus(0))// Is it clear to send (buffer empty)
&lt;br&gt;{
&lt;br&gt;encode(outData);//,out.throt,out.heading); // build output
&lt;br&gt;SCI_OutString(outData,0); // print out put to serial port
&lt;br&gt;}
&lt;br&gt;}
&lt;br&gt;return 0;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void encode(char *out) // take in pointer and fill with chars
&lt;br&gt;{
&lt;br&gt;out[0] = 't';
&lt;br&gt;out[1] = 'e';
&lt;br&gt;out[2] = 's';
&lt;br&gt;out[3] = 0;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;--- In &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26088467&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;, zach.r.long@... wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks everyone, your comments on not using malloc make sense for this system, however I am still left with the issue of incorrect output, and the thought of how that pointer works if it is never assigned to memory. Not to get side tracked, if anyone has any working examples of printing variable data to the serial port I would be very interested in seeing it, since this is the goal of this series of post. 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Thank You, 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Zach
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26088467.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26087985</id>
	<title>Re: Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-10-27T18:39:06Z</published>
	<updated>2009-10-27T18:39:06Z</updated>
	<author>
		<name>zach.r.long</name>
	</author>
	<content type="html">Thanks everyone, your comments on not using malloc make sense for this system, however I am still left with the issue of incorrect output, and the thought of how that pointer works if it is never assigned to memory. Not to get side tracked, if anyone has any working examples of printing variable data to the serial port I would be very interested in seeing it, since this is the goal of this series of post. 
&lt;br&gt;&lt;br&gt;&lt;br&gt;Thank You, 
&lt;br&gt;&lt;br&gt;Zach
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26087985.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26072691</id>
	<title>Re: Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-10-26T23:25:59Z</published>
	<updated>2009-10-26T23:25:59Z</updated>
	<author>
		<name>Andrei Chichak-2</name>
	</author>
	<content type="html">I agree that malloc failed and it is passing back 0 to indicate that &amp;nbsp;
&lt;br&gt;it failed, and you are using that as an address of your string.
&lt;br&gt;&lt;br&gt;Please have some empathy for the programmer that has to figure out &amp;nbsp;
&lt;br&gt;your bugs. Check your return codes, don't use malloc, calloc, realloc, &amp;nbsp;
&lt;br&gt;global variables, GOTOs, or &amp;quot;magic numbers&amp;quot;.
&lt;br&gt;&lt;br&gt;A
&lt;br&gt;&lt;br&gt;&lt;br&gt;On 2009-October-26, at 11:01 PM, Bill Auerbach wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Furthermore, for this series of processors or smaller and generally
&lt;br&gt;&amp;gt; in embedded systems, avoid malloc and free.
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;[Non-text portions of this message have been removed]
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26072691.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26072184</id>
	<title>Re: Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-10-26T22:01:58Z</published>
	<updated>2009-10-26T22:01:58Z</updated>
	<author>
		<name>Bill_CT</name>
	</author>
	<content type="html">&amp;nbsp;&amp;gt; Edward Karpicz writes on 12:51 AM 10/27/2009
&lt;br&gt;&amp;gt;Probably malloc didn't succeed
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;char* outData =(char*) malloc (sizeof (char*)* 5); // make room for 5 char
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;BTW comment is wrong, should be make room for 5 pointers to char
&lt;br&gt;&lt;br&gt;Both points are good.
&lt;br&gt;&lt;br&gt;Furthermore, for this series of processors or smaller and generally 
&lt;br&gt;in embedded systems, avoid malloc and free. &amp;nbsp;These smaller processors 
&lt;br&gt;are just not that good at supporting dynamic memory. &amp;nbsp;For a Freescale 
&lt;br&gt;PowerPC with 100's of MB of memory - fine, dynamic memory using 
&lt;br&gt;malloc and free can be used. &amp;nbsp;But you must always consider that 
&lt;br&gt;memory can fragment and requests for memory can fail over long runs 
&lt;br&gt;of the program (malloc returns NULL on error).
&lt;br&gt;&lt;br&gt;I'm not looking for a big debate on malloc/free in an embedded 
&lt;br&gt;system. &amp;nbsp;On a system with less than 32MB of RAM, I just don't do it - ever.
&lt;br&gt;&lt;br&gt;Bill
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;Edward
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;----- Original Message -----
&lt;br&gt;&amp;gt;From: &amp;lt;&amp;lt;mailto:zach.r.long%40gmail.com&amp;gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26072184&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zach.r.long@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;To: &amp;lt;&amp;lt;mailto:68hc12%40yahoogroups.com&amp;gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26072184&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68hc12@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;Sent: Monday, October 26, 2009 10:26 PM
&lt;br&gt;&amp;gt;Subject: [68HC12] Dragon Board 12 Serial Communication C code Help
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Hello all, I am hoping someone has some incite as to what I am doing wrong
&lt;br&gt;&amp;gt; &amp;gt; here, I figure it is a small problem but I am out of ideas. This is just a
&lt;br&gt;&amp;gt; &amp;gt; test to figure out how to pass char * through methods. The code should
&lt;br&gt;&amp;gt; &amp;gt; print Hello World to the serial port which it does, then print tes
&lt;br&gt;&amp;gt; &amp;gt; repeatedly, which it does not, rather the output is as follows:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Hello World&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; &amp;gt; &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Here is the code, also below is the sci.c and sci.h that do the actually
&lt;br&gt;&amp;gt; &amp;gt; serial communication.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Thank You in advanced !
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Zach Long
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; MAIN:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; #include &amp;quot;sci.h&amp;quot;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; int main(void);
&lt;br&gt;&amp;gt; &amp;gt; void encode(char *out);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; int main(void)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; char* head = &amp;quot;Hello World&amp;quot;; // declare first print statement
&lt;br&gt;&amp;gt; &amp;gt; char* outData =(char*) malloc (sizeof (char*)* 5); // make room for 5 char
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; SCI_Init(9600,0); //Startup serial port 0(under LCD) at 9600 BAUD
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutStatus(1); // Is it clear to send (buffer empty)
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutString(head,0); // print &amp;quot;Hello World&amp;quot; to serial port (WORKS !!)
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; while(1)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; if(SCI_OutStatus(0))// Is it clear to send (buffer empty)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; encode(outData);//,out.throt,out.heading); // build output
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutString(outData,0); // print out put to serial port
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; return 0;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; void encode(char *out) // take in pointer and fill with chars
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; out[0] = 't';
&lt;br&gt;&amp;gt; &amp;gt; out[1] = 'e';
&lt;br&gt;&amp;gt; &amp;gt; out[2] = 's';
&lt;br&gt;&amp;gt; &amp;gt; out[3] = 0;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; SCI include:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; // filename ******************* SCI.H **************************
&lt;br&gt;&amp;gt; &amp;gt; // Jonathan W. Valvano 1/29/04
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; // This example accompanies the books
&lt;br&gt;&amp;gt; &amp;gt; // &amp;quot;Embedded Microcomputer Systems: Real Time Interfacing&amp;quot;,
&lt;br&gt;&amp;gt; &amp;gt; // Brooks-Cole, copyright (c) 2000,
&lt;br&gt;&amp;gt; &amp;gt; // &amp;quot;Introduction to Embedded Microcomputer Systems:
&lt;br&gt;&amp;gt; &amp;gt; // Motorola 6811 and 6812 Simulation&amp;quot;, Brooks-Cole, copyright (c) 2002
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; // Copyright 2004 by Jonathan W. Valvano, 
&lt;br&gt;&amp;gt; &amp;lt;mailto:valvano%40mail.utexas.edu&amp;gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26072184&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;valvano@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt; // You may use, edit, run or distribute this file
&lt;br&gt;&amp;gt; &amp;gt; // as long as the above copyright notice remains
&lt;br&gt;&amp;gt; &amp;gt; // Modified by EE345L students Charlie Gough &amp;&amp; Matt Hawk
&lt;br&gt;&amp;gt; &amp;gt; // Modified by EE345M students Agustinus Darmawan + Mingjie Qiu
&lt;br&gt;&amp;gt; &amp;gt; // Modified by Zachary Long Oct 16, 2009 (setup for Dragon Board 12 9600
&lt;br&gt;&amp;gt; &amp;gt; BAUD, use of both serial ports enabled)
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //How To
&lt;br&gt;&amp;gt; &amp;gt; /*
&lt;br&gt;&amp;gt; &amp;gt; Each method has an unsigned int port parameter, this specifices the
&lt;br&gt;&amp;gt; &amp;gt; serial port
&lt;br&gt;&amp;gt; &amp;gt; the method will act on. Dragon Board 12: Serial port under LCD (top) =
&lt;br&gt;&amp;gt; &amp;gt; 0, Serial port near power plug (bottom) = 1
&lt;br&gt;&amp;gt; &amp;gt; */
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; // standard ASCII symbols
&lt;br&gt;&amp;gt; &amp;gt; #define CR 0x0D
&lt;br&gt;&amp;gt; &amp;gt; #define LF 0x0A
&lt;br&gt;&amp;gt; &amp;gt; #define BS 0x08
&lt;br&gt;&amp;gt; &amp;gt; #define ESC 0x1B
&lt;br&gt;&amp;gt; &amp;gt; #define SP 0x20
&lt;br&gt;&amp;gt; &amp;gt; #define DEL 0x7F
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-------------------------SCI_Init------------------------
&lt;br&gt;&amp;gt; &amp;gt; //-------------------------SCI_Init------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Initialize Serial port SCI
&lt;br&gt;&amp;gt; &amp;gt; // Input: baudRate is tha baud rate in bits/sec
&lt;br&gt;&amp;gt; &amp;gt; // Output: none
&lt;br&gt;&amp;gt; &amp;gt; // SCIBDL = 24000000/(16 x BR)
&lt;br&gt;&amp;gt; &amp;gt; // baudRate = 2400 bits/sec SCIBDL=625
&lt;br&gt;&amp;gt; &amp;gt; // baudRate = 4800 bits/sec SCIBDL=313
&lt;br&gt;&amp;gt; &amp;gt; // baudRate = 9600 bits/sec SCIBDL=156
&lt;br&gt;&amp;gt; &amp;gt; // baudRate = 19200 bits/sec SCIBDL=78
&lt;br&gt;&amp;gt; &amp;gt; // assumes a module clock frequency of 4 MHz
&lt;br&gt;&amp;gt; &amp;gt; // sets baudRate to 9600
&lt;br&gt;&amp;gt; &amp;gt; void SCI_Init(unsigned short baudRate,unsigned int port);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-------------------------SCI_InStatus--------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Checks if new input is ready, TRUE if new input is ready
&lt;br&gt;&amp;gt; &amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: TRUE if a call to InChar will return right away with data
&lt;br&gt;&amp;gt; &amp;gt; // FALSE if a call to InChar will wait for input
&lt;br&gt;&amp;gt; &amp;gt; char SCI_InStatus(unsigned int port);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-------------------------SCI_InChar------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Wait for new serial port input, busy-waiting synchronization
&lt;br&gt;&amp;gt; &amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: ASCII code for key typed
&lt;br&gt;&amp;gt; &amp;gt; char SCI_InChar(unsigned int port);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; void SCI_InString(char* string,unsigned short max,unsigned int port); //
&lt;br&gt;&amp;gt; &amp;gt; Reads in a String of max length
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //----------------------SCI_InUDec-------------------------------
&lt;br&gt;&amp;gt; &amp;gt; // InUDec accepts ASCII input in unsigned decimal format
&lt;br&gt;&amp;gt; &amp;gt; // and converts to a 16 bit unsigned number
&lt;br&gt;&amp;gt; &amp;gt; // valid range is 0 to 65535
&lt;br&gt;&amp;gt; &amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: 16-bit unsigned number
&lt;br&gt;&amp;gt; &amp;gt; // If you enter a number above 65535, it will truncate without an error
&lt;br&gt;&amp;gt; &amp;gt; // Backspace will remove last digit typed
&lt;br&gt;&amp;gt; &amp;gt; unsigned short SCI_InUDec(unsigned int port);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //---------------------SCI_InUHex----------------------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Accepts ASCII input in unsigned hexadecimal (base 16) format
&lt;br&gt;&amp;gt; &amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: 16-bit unsigned number
&lt;br&gt;&amp;gt; &amp;gt; // No '$' or '0x' need be entered, just the 1 to 4 hex digits
&lt;br&gt;&amp;gt; &amp;gt; // It will convert lower case a-f to uppercase A-F
&lt;br&gt;&amp;gt; &amp;gt; // and converts to a 16 bit unsigned number
&lt;br&gt;&amp;gt; &amp;gt; // value range is 0 to FFFF
&lt;br&gt;&amp;gt; &amp;gt; // If you enter a number above FFFF, it will truncate without an error
&lt;br&gt;&amp;gt; &amp;gt; // Backspace will remove last digit typed
&lt;br&gt;&amp;gt; &amp;gt; unsigned short SCI_InUHex(unsigned int port);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-----------------------SCI_OutStatus----------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Checks if output data buffer is empty, TRUE if empty
&lt;br&gt;&amp;gt; &amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: TRUE if a call to OutChar will output and return right away
&lt;br&gt;&amp;gt; &amp;gt; // FALSE if a call to OutChar will wait for output to be ready
&lt;br&gt;&amp;gt; &amp;gt; char SCI_OutStatus(unsigned int port);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-------------------------SCI_OutChar------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Wait for buffer to be empty, output 8-bit to serial port
&lt;br&gt;&amp;gt; &amp;gt; // busy-waiting synchronization
&lt;br&gt;&amp;gt; &amp;gt; // Input: 8-bit data to be transferred, unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: none
&lt;br&gt;&amp;gt; &amp;gt; void SCI_OutChar(char data,unsigned int port);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-----------------------SCI_OutUDec-----------------------
&lt;br&gt;&amp;gt; &amp;gt; // Output a 16-bit number in unsigned decimal format
&lt;br&gt;&amp;gt; &amp;gt; // Input: 16-bit number to be transferred, unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: none
&lt;br&gt;&amp;gt; &amp;gt; // Variable format 1-5 digits with no space before or after
&lt;br&gt;&amp;gt; &amp;gt; void SCI_OutUDec(unsigned short,unsigned int port);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-------------------------SCI_OutString------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Output String (NULL termination), busy-waiting synchronization
&lt;br&gt;&amp;gt; &amp;gt; // Input: pointer to a NULL-terminated string to be transferred, unsigned
&lt;br&gt;&amp;gt; &amp;gt; int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: none
&lt;br&gt;&amp;gt; &amp;gt; void SCI_OutString(char *pt,unsigned int port);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //--------------------------SCI_OutUHex----------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Output a 16 bit number in unsigned hexadecimal format
&lt;br&gt;&amp;gt; &amp;gt; // Input: 16-bit number to be transferred, unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: none
&lt;br&gt;&amp;gt; &amp;gt; // Variable format 1 to 4 digits with no space before or after
&lt;br&gt;&amp;gt; &amp;gt; void SCI_OutUHex(unsigned short,unsigned int port);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; // filename *************** SCI.C ******************************
&lt;br&gt;&amp;gt; &amp;gt; // Simple I/O routines to 9S12C32 serial port
&lt;br&gt;&amp;gt; &amp;gt; // Jonathan W. Valvano 1/29/04
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; // This example accompanies the books
&lt;br&gt;&amp;gt; &amp;gt; // &amp;quot;Embedded Microcomputer Systems: Real Time Interfacing&amp;quot;,
&lt;br&gt;&amp;gt; &amp;gt; // Brooks-Cole, copyright (c) 2000,
&lt;br&gt;&amp;gt; &amp;gt; // &amp;quot;Introduction to Embedded Microcomputer Systems:
&lt;br&gt;&amp;gt; &amp;gt; // Motorola 6811 and 6812 Simulation&amp;quot;, Brooks-Cole, copyright (c) 2002
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; // Copyright 2004 by Jonathan W. Valvano, 
&lt;br&gt;&amp;gt; &amp;lt;mailto:valvano%40mail.utexas.edu&amp;gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26072184&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;valvano@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt; // You may use, edit, run or distribute this file
&lt;br&gt;&amp;gt; &amp;gt; // as long as the above copyright notice remains
&lt;br&gt;&amp;gt; &amp;gt; // Modified by EE345L students Charlie Gough &amp;&amp; Matt Hawk
&lt;br&gt;&amp;gt; &amp;gt; // Modified by EE345M students Agustinus Darmawan + Mingjie Qiu
&lt;br&gt;&amp;gt; &amp;gt; // Modified by Steven Lamb April 28, 2004 (minor changes for g++)
&lt;br&gt;&amp;gt; &amp;gt; // Modified by Zachary Long Oct 16, 2009 (serial init (9600)updated, use
&lt;br&gt;&amp;gt; &amp;gt; of both serial ports enabled)
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //How To
&lt;br&gt;&amp;gt; &amp;gt; /*
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; */
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; #include &amp;quot;hcs12.h&amp;quot; // io register map
&lt;br&gt;&amp;gt; &amp;gt; #include &amp;quot;SCI.h&amp;quot;
&lt;br&gt;&amp;gt; &amp;gt; #define RDRF 0x20 // Receive Data Register Full Bit
&lt;br&gt;&amp;gt; &amp;gt; #define TDRE 0x80 // Transmit Data Register Empty Bit
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-------------------------SCI_Init------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Initialize Serial port SCI
&lt;br&gt;&amp;gt; &amp;gt; // Input: baudRate is tha baud rate in bits/sec
&lt;br&gt;&amp;gt; &amp;gt; // Output: none
&lt;br&gt;&amp;gt; &amp;gt; // SCIBDL = 24000000/(16 x BR)
&lt;br&gt;&amp;gt; &amp;gt; // baudRate = 2400 bits/sec SCIBDL=625
&lt;br&gt;&amp;gt; &amp;gt; // baudRate = 4800 bits/sec SCIBDL=313
&lt;br&gt;&amp;gt; &amp;gt; // baudRate = 9600 bits/sec SCIBDL=156
&lt;br&gt;&amp;gt; &amp;gt; // baudRate = 19200 bits/sec SCIBDL=78
&lt;br&gt;&amp;gt; &amp;gt; // assumes a module clock frequency of 4 MHz
&lt;br&gt;&amp;gt; &amp;gt; // sets baudRate to 9600
&lt;br&gt;&amp;gt; &amp;gt; void SCI_Init(unsigned short baudRate, unsigned int port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; switch(port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; case 0:
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; SCI0BDH = 0;
&lt;br&gt;&amp;gt; &amp;gt; switch(baudRate)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; case 2400: SCI0BDL=625; break;
&lt;br&gt;&amp;gt; &amp;gt; case 4800: SCI0BDL=313; break;
&lt;br&gt;&amp;gt; &amp;gt; case 9600: SCI0BDL=156; break;
&lt;br&gt;&amp;gt; &amp;gt; case 19200: SCI0BDL=78; break;
&lt;br&gt;&amp;gt; &amp;gt; default: SCI0BDL = 156 ; // 9600
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; break;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; SCI0CR1 = 0;
&lt;br&gt;&amp;gt; &amp;gt; /* bit value meaning
&lt;br&gt;&amp;gt; &amp;gt; 7 0 LOOPS, no looping, normal
&lt;br&gt;&amp;gt; &amp;gt; 6 0 WOMS, normal high/low outputs
&lt;br&gt;&amp;gt; &amp;gt; 5 0 RSRC, not appliable with LOOPS=0
&lt;br&gt;&amp;gt; &amp;gt; 4 0 M, 1 start, 8 data, 1 stop
&lt;br&gt;&amp;gt; &amp;gt; 3 0 WAKE, wake by idle (not applicable)
&lt;br&gt;&amp;gt; &amp;gt; 2 0 ILT, short idle time (not applicable)
&lt;br&gt;&amp;gt; &amp;gt; 1 0 PE, no parity
&lt;br&gt;&amp;gt; &amp;gt; 0 0 PT, parity type (not applicable with PE=0)
&lt;br&gt;&amp;gt; &amp;gt; */
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; SCI0CR2 = 0x0C;
&lt;br&gt;&amp;gt; &amp;gt; /* bit value meaning
&lt;br&gt;&amp;gt; &amp;gt; 7 0 TIE, no transmit interrupts on TDRE
&lt;br&gt;&amp;gt; &amp;gt; 6 0 TCIE, no transmit interrupts on TC
&lt;br&gt;&amp;gt; &amp;gt; 5 0 RIE, no receive interrupts on RDRF
&lt;br&gt;&amp;gt; &amp;gt; 4 0 ILIE, no interrupts on idle
&lt;br&gt;&amp;gt; &amp;gt; 3 1 TE, enable transmitter
&lt;br&gt;&amp;gt; &amp;gt; 2 1 RE, enable receiver
&lt;br&gt;&amp;gt; &amp;gt; 1 0 RWU, no receiver wakeup
&lt;br&gt;&amp;gt; &amp;gt; 0 0 SBK, no send break
&lt;br&gt;&amp;gt; &amp;gt; */
&lt;br&gt;&amp;gt; &amp;gt; break;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; case 1:
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; SCI1BDH = 0;
&lt;br&gt;&amp;gt; &amp;gt; switch(baudRate)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; case 2400: SCI1BDL=625; break;
&lt;br&gt;&amp;gt; &amp;gt; case 4800: SCI1BDL=313; break;
&lt;br&gt;&amp;gt; &amp;gt; case 9600: SCI1BDL=156; break;
&lt;br&gt;&amp;gt; &amp;gt; case 19200: SCI1BDL=78; break;
&lt;br&gt;&amp;gt; &amp;gt; default: SCI1BDL = 156 ; // 9600
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; break;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; SCI1CR1 = 0;
&lt;br&gt;&amp;gt; &amp;gt; /* bit value meaning
&lt;br&gt;&amp;gt; &amp;gt; 7 0 LOOPS, no looping, normal
&lt;br&gt;&amp;gt; &amp;gt; 6 0 WOMS, normal high/low outputs
&lt;br&gt;&amp;gt; &amp;gt; 5 0 RSRC, not appliable with LOOPS=0
&lt;br&gt;&amp;gt; &amp;gt; 4 0 M, 1 start, 8 data, 1 stop
&lt;br&gt;&amp;gt; &amp;gt; 3 0 WAKE, wake by idle (not applicable)
&lt;br&gt;&amp;gt; &amp;gt; 2 0 ILT, short idle time (not applicable)
&lt;br&gt;&amp;gt; &amp;gt; 1 0 PE, no parity
&lt;br&gt;&amp;gt; &amp;gt; 0 0 PT, parity type (not applicable with PE=0)
&lt;br&gt;&amp;gt; &amp;gt; */
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; SCI1CR2 = 0x0C;
&lt;br&gt;&amp;gt; &amp;gt; /* bit value meaning
&lt;br&gt;&amp;gt; &amp;gt; 7 0 TIE, no transmit interrupts on TDRE
&lt;br&gt;&amp;gt; &amp;gt; 6 0 TCIE, no transmit interrupts on TC
&lt;br&gt;&amp;gt; &amp;gt; 5 0 RIE, no receive interrupts on RDRF
&lt;br&gt;&amp;gt; &amp;gt; 4 0 ILIE, no interrupts on idle
&lt;br&gt;&amp;gt; &amp;gt; 3 1 TE, enable transmitter
&lt;br&gt;&amp;gt; &amp;gt; 2 1 RE, enable receiver
&lt;br&gt;&amp;gt; &amp;gt; 1 0 RWU, no receiver wakeup
&lt;br&gt;&amp;gt; &amp;gt; 0 0 SBK, no send break
&lt;br&gt;&amp;gt; &amp;gt; */
&lt;br&gt;&amp;gt; &amp;gt; break;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-------------------------SCI_InChar------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Wait for new serial port input, busy-waiting synchronization
&lt;br&gt;&amp;gt; &amp;gt; // Input: int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: ASCII code for key typed
&lt;br&gt;&amp;gt; &amp;gt; char SCI_InChar(unsigned int port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; switch(port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; case 0:
&lt;br&gt;&amp;gt; &amp;gt; while((SCI0SR1 &amp; RDRF) == 0){};
&lt;br&gt;&amp;gt; &amp;gt; return(SCI0DRL);
&lt;br&gt;&amp;gt; &amp;gt; break;
&lt;br&gt;&amp;gt; &amp;gt; case 1:
&lt;br&gt;&amp;gt; &amp;gt; while((SCI1SR1 &amp; RDRF) == 0){};
&lt;br&gt;&amp;gt; &amp;gt; return(SCI1DRL);
&lt;br&gt;&amp;gt; &amp;gt; break;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-------------------------SCI_OutChar------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Wait for buffer to be empty, output 8-bit to serial port
&lt;br&gt;&amp;gt; &amp;gt; // busy-waiting synchronization
&lt;br&gt;&amp;gt; &amp;gt; // Input: 8-bit data to be transferred
&lt;br&gt;&amp;gt; &amp;gt; // Output: none
&lt;br&gt;&amp;gt; &amp;gt; void SCI_OutChar(char data,unsigned int port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; switch(port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; case 0:
&lt;br&gt;&amp;gt; &amp;gt; while((SCI0SR1 &amp; TDRE) == 0){};
&lt;br&gt;&amp;gt; &amp;gt; SCI0DRL = data;
&lt;br&gt;&amp;gt; &amp;gt; break;
&lt;br&gt;&amp;gt; &amp;gt; case 1:
&lt;br&gt;&amp;gt; &amp;gt; while((SCI1SR1 &amp; TDRE) == 0){};
&lt;br&gt;&amp;gt; &amp;gt; SCI1DRL = data;
&lt;br&gt;&amp;gt; &amp;gt; break;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-------------------------SCI_InStatus--------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Checks if new input is ready, TRUE if new input is ready
&lt;br&gt;&amp;gt; &amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: TRUE if a call to InChar will return right away with data
&lt;br&gt;&amp;gt; &amp;gt; // FALSE if a call to InChar will wait for input
&lt;br&gt;&amp;gt; &amp;gt; char SCI_InStatus(unsigned int port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; switch(port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; case 0:
&lt;br&gt;&amp;gt; &amp;gt; return(SCI0SR1 &amp; RDRF);break;
&lt;br&gt;&amp;gt; &amp;gt; case 1:
&lt;br&gt;&amp;gt; &amp;gt; return(SCI1SR1 &amp; RDRF);break;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; //-----------------------SCI_OutStatus----------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Checks if output data buffer is empty, TRUE if empty
&lt;br&gt;&amp;gt; &amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: TRUE if a call to OutChar will output and return right away
&lt;br&gt;&amp;gt; &amp;gt; // FALSE if a call to OutChar will wait for output to be ready
&lt;br&gt;&amp;gt; &amp;gt; char SCI_OutStatus(unsigned int port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; switch(port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; case 0:
&lt;br&gt;&amp;gt; &amp;gt; return(SCI0SR1 &amp; TDRE);
&lt;br&gt;&amp;gt; &amp;gt; break;
&lt;br&gt;&amp;gt; &amp;gt; case 1:
&lt;br&gt;&amp;gt; &amp;gt; return(SCI1SR1 &amp; TDRE);
&lt;br&gt;&amp;gt; &amp;gt; break;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-------------------------SCI_OutString------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Output String (NULL termination), busy-waiting synchronization
&lt;br&gt;&amp;gt; &amp;gt; // Input: pointer to a NULL-terminated string to be transferred, unsigned
&lt;br&gt;&amp;gt; &amp;gt; int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: none
&lt;br&gt;&amp;gt; &amp;gt; void SCI_OutString(char *pt,unsigned int port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; while(*pt){
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutChar(*pt,port);
&lt;br&gt;&amp;gt; &amp;gt; pt++;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //----------------------SCI_InUDec-------------------------------
&lt;br&gt;&amp;gt; &amp;gt; // InUDec accepts ASCII input in unsigned decimal format
&lt;br&gt;&amp;gt; &amp;gt; // and converts to a 16 bit unsigned number
&lt;br&gt;&amp;gt; &amp;gt; // valid range is 0 to 65535
&lt;br&gt;&amp;gt; &amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: 16-bit unsigned number
&lt;br&gt;&amp;gt; &amp;gt; // If you enter a number above 65535, it will truncate without an error
&lt;br&gt;&amp;gt; &amp;gt; // Backspace will remove last digit typed
&lt;br&gt;&amp;gt; &amp;gt; unsigned short SCI_InUDec(unsigned int port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; unsigned short number=0, length=0;
&lt;br&gt;&amp;gt; &amp;gt; char character;
&lt;br&gt;&amp;gt; &amp;gt; character = SCI_InChar(port);
&lt;br&gt;&amp;gt; &amp;gt; while(character!=CR) // accepts until carriage return input
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; // The next line checks that the input is a digit, 0-9.
&lt;br&gt;&amp;gt; &amp;gt; // If the character is not 0-9, it is ignored and not echoed
&lt;br&gt;&amp;gt; &amp;gt; if((character&amp;gt;='0') &amp;&amp; (character&amp;lt;='9'))
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; number = 10*number+(character-'0'); // this line overflows if
&lt;br&gt;&amp;gt; &amp;gt; above 65535
&lt;br&gt;&amp;gt; &amp;gt; length++;
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutChar(character,port);
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; // If the input is a backspace, then the return number is
&lt;br&gt;&amp;gt; &amp;gt; // changed and a backspace is outputted to the screen
&lt;br&gt;&amp;gt; &amp;gt; else if((character==BS) &amp;&amp; length)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; number /= 10;
&lt;br&gt;&amp;gt; &amp;gt; length--;
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutChar(character,port);
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; character = SCI_InChar(port);
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; return number;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //-----------------------SCI_OutUDec-----------------------
&lt;br&gt;&amp;gt; &amp;gt; // Output a 16-bit number in unsigned decimal format
&lt;br&gt;&amp;gt; &amp;gt; // Input: 16-bit number to be transferred, unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: none
&lt;br&gt;&amp;gt; &amp;gt; // Variable format 1-5 digits with no space before or after
&lt;br&gt;&amp;gt; &amp;gt; void SCI_OutUDec(unsigned short n,unsigned int port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; // This function uses recursion to convert decimal number
&lt;br&gt;&amp;gt; &amp;gt; // of unspecified length as an ASCII string
&lt;br&gt;&amp;gt; &amp;gt; if(n &amp;gt;= 10){
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutUDec(n/10,port);
&lt;br&gt;&amp;gt; &amp;gt; n = n%10;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutChar(n+'0',port); /* n is between 0 and 9 */
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //---------------------SCI_InUHex----------------------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Accepts ASCII input in unsigned hexadecimal (base 16) format
&lt;br&gt;&amp;gt; &amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: 16-bit unsigned number
&lt;br&gt;&amp;gt; &amp;gt; // No '$' or '0x' need be entered, just the 1 to 4 hex digits
&lt;br&gt;&amp;gt; &amp;gt; // It will convert lower case a-f to uppercase A-F
&lt;br&gt;&amp;gt; &amp;gt; // and converts to a 16 bit unsigned number
&lt;br&gt;&amp;gt; &amp;gt; // value range is 0 to FFFF
&lt;br&gt;&amp;gt; &amp;gt; // If you enter a number above FFFF, it will truncate without an error
&lt;br&gt;&amp;gt; &amp;gt; // Backspace will remove last digit typed
&lt;br&gt;&amp;gt; &amp;gt; unsigned short SCI_InUHex(unsigned int port){
&lt;br&gt;&amp;gt; &amp;gt; unsigned short number=0, digit, length=0;
&lt;br&gt;&amp;gt; &amp;gt; char character;
&lt;br&gt;&amp;gt; &amp;gt; character = SCI_InChar(port);
&lt;br&gt;&amp;gt; &amp;gt; while(character!=CR){
&lt;br&gt;&amp;gt; &amp;gt; digit = 0x10; // assume bad
&lt;br&gt;&amp;gt; &amp;gt; if((character&amp;gt;='0') &amp;&amp; (character&amp;lt;='9')){
&lt;br&gt;&amp;gt; &amp;gt; digit = character-'0';
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; else if((character&amp;gt;='A') &amp;&amp; (character&amp;lt;='F')){
&lt;br&gt;&amp;gt; &amp;gt; digit = (character-'A')+0xA;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; else if((character&amp;gt;='a') &amp;&amp; (character&amp;lt;='f')){
&lt;br&gt;&amp;gt; &amp;gt; digit = (character-'a')+0xA;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; // If the character is not 0-9 or A-F, it is ignored and not echoed
&lt;br&gt;&amp;gt; &amp;gt; if(digit&amp;lt;=0xF ){
&lt;br&gt;&amp;gt; &amp;gt; number = number*0x10+digit;
&lt;br&gt;&amp;gt; &amp;gt; length++;
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutChar(character,port);
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; // Backspace outputted and return value changed if a backspace is inputted
&lt;br&gt;&amp;gt; &amp;gt; else if(character==BS &amp;&amp; length){
&lt;br&gt;&amp;gt; &amp;gt; number /=0x10;
&lt;br&gt;&amp;gt; &amp;gt; length--;
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutChar(character,port);
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; character = SCI_InChar(port);
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; return number;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //--------------------------SCI_OutUHex----------------------------
&lt;br&gt;&amp;gt; &amp;gt; // Output a 16 bit number in unsigned hexadecimal format
&lt;br&gt;&amp;gt; &amp;gt; // Input: 16-bit number to be transferred, unsigned int port
&lt;br&gt;&amp;gt; &amp;gt; // Output: none
&lt;br&gt;&amp;gt; &amp;gt; // Variable format 1 to 4 digits with no space before or after
&lt;br&gt;&amp;gt; &amp;gt; void SCI_OutUHex(unsigned short number,unsigned int port){
&lt;br&gt;&amp;gt; &amp;gt; // This function uses recursion to convert the number of
&lt;br&gt;&amp;gt; &amp;gt; // unspecified length as an ASCII string
&lt;br&gt;&amp;gt; &amp;gt; if(number&amp;gt;=0x10) {
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutUHex(number/0x10,port);
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutUHex(number%0x10,port);
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; else if(number&amp;lt;0xA){
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutChar(number+'0',port);
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; else{
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutChar((number-0x0A)+'A',port);
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //------------------------SCI_InString------------------------
&lt;br&gt;&amp;gt; &amp;gt; // This function accepts ASCII characters from the serial port
&lt;br&gt;&amp;gt; &amp;gt; // and adds them to a string until a carriage return is inputted
&lt;br&gt;&amp;gt; &amp;gt; // or until max length of the string is reached.
&lt;br&gt;&amp;gt; &amp;gt; // It echoes each character as it is inputted.
&lt;br&gt;&amp;gt; &amp;gt; // If a backspace is inputted, the string is modified
&lt;br&gt;&amp;gt; &amp;gt; // and the backspace is echoed
&lt;br&gt;&amp;gt; &amp;gt; // InString terminates the string with a null character
&lt;br&gt;&amp;gt; &amp;gt; // -- Modified by Agustinus Darmawan + Mingjie Qiu --
&lt;br&gt;&amp;gt; &amp;gt; void SCI_InString(char *string,unsigned short max,unsigned int port)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; int length=0;
&lt;br&gt;&amp;gt; &amp;gt; char character;
&lt;br&gt;&amp;gt; &amp;gt; character = SCI_InChar(port);
&lt;br&gt;&amp;gt; &amp;gt; while(character!=CR)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; if(character==BS)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; if(length)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; string--;
&lt;br&gt;&amp;gt; &amp;gt; length--;
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutChar(BS,port);
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; else if(length&amp;lt;max)
&lt;br&gt;&amp;gt; &amp;gt; {
&lt;br&gt;&amp;gt; &amp;gt; *string++=character;
&lt;br&gt;&amp;gt; &amp;gt; length++;
&lt;br&gt;&amp;gt; &amp;gt; SCI_OutChar(character,port);
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; character = SCI_InChar(port);
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; *string = 0;
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; ------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;[Non-text portions of this message have been removed]
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26072184.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26072139</id>
	<title>Re: Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-10-26T21:51:58Z</published>
	<updated>2009-10-26T21:51:58Z</updated>
	<author>
		<name>Edward Karpicz</name>
	</author>
	<content type="html">Probably malloc didn't succeed
&lt;br&gt;&lt;br&gt;char* outData =(char*) malloc (sizeof (char*)* 5); // make room for 5 char
&lt;br&gt;&lt;br&gt;BTW comment is wrong, should be make room for 5 pointers to char
&lt;br&gt;&lt;br&gt;Edward
&lt;br&gt;&lt;br&gt;----- Original Message ----- 
&lt;br&gt;From: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26072139&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zach.r.long@...&lt;/a&gt;&amp;gt;
&lt;br&gt;To: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26072139&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68hc12@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Sent: Monday, October 26, 2009 10:26 PM
&lt;br&gt;Subject: [68HC12] Dragon Board 12 Serial Communication C code Help
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hello all, I am hoping someone has some incite as to what I am doing wrong 
&lt;br&gt;&amp;gt; here, I figure it is a small problem but I am out of ideas. This is just a 
&lt;br&gt;&amp;gt; test to figure out how to pass char * through methods. The code should 
&lt;br&gt;&amp;gt; print Hello World to the serial port which it does, then print tes 
&lt;br&gt;&amp;gt; repeatedly, which it does not, rather the output is as follows:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hello World&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Here is the code, also below is the sci.c and sci.h that do the actually 
&lt;br&gt;&amp;gt; serial communication.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thank You in advanced !
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Zach Long
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; MAIN:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; #include &amp;quot;sci.h&amp;quot;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; int main(void);
&lt;br&gt;&amp;gt; void encode(char *out);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; int main(void)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; char* head = &amp;quot;Hello World&amp;quot;; // declare first print statement
&lt;br&gt;&amp;gt; char* outData =(char*) malloc (sizeof (char*)* 5); // make room for 5 char
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; SCI_Init(9600,0); //Startup serial port 0(under LCD) at 9600 BAUD
&lt;br&gt;&amp;gt; SCI_OutStatus(1); // Is it clear to send (buffer empty)
&lt;br&gt;&amp;gt; SCI_OutString(head,0); // print &amp;quot;Hello World&amp;quot; to serial port (WORKS !!)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; while(1)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; if(SCI_OutStatus(0))// Is it clear to send (buffer empty)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt; encode(outData);//,out.throt,out.heading); // build output
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI_OutString(outData,0); // print out put to serial port
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; return 0;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; void encode(char *out) // take in pointer and fill with chars
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; out[0] = 't';
&lt;br&gt;&amp;gt; out[1] = 'e';
&lt;br&gt;&amp;gt; out[2] = 's';
&lt;br&gt;&amp;gt; out[3] = 0;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; SCI include:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // filename &amp;nbsp;******************* SCI.H **************************
&lt;br&gt;&amp;gt; // Jonathan W. Valvano 1/29/04
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // &amp;nbsp;This example accompanies the books
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;quot;Embedded Microcomputer Systems: Real Time Interfacing&amp;quot;,
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Brooks-Cole, copyright (c) 2000,
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;quot;Introduction to Embedded Microcomputer Systems:
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp;Motorola 6811 and 6812 Simulation&amp;quot;, Brooks-Cole, copyright (c) 2002
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // Copyright 2004 by Jonathan W. Valvano, &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26072139&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;valvano@...&lt;/a&gt;
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp;You may use, edit, run or distribute this file
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp;as long as the above copyright notice remains
&lt;br&gt;&amp;gt; // Modified by EE345L students Charlie Gough &amp;&amp; Matt Hawk
&lt;br&gt;&amp;gt; // Modified by EE345M students Agustinus Darmawan + Mingjie Qiu
&lt;br&gt;&amp;gt; // Modified by Zachary Long Oct 16, 2009 (setup for Dragon Board 12 9600 
&lt;br&gt;&amp;gt; BAUD, use of both serial ports enabled)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //How To
&lt;br&gt;&amp;gt; /*
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Each method has an unsigned int port parameter, this specifices the 
&lt;br&gt;&amp;gt; serial port
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;the method will act on. Dragon Board 12: Serial port under LCD (top) = 
&lt;br&gt;&amp;gt; 0, Serial port near power plug (bottom) = 1
&lt;br&gt;&amp;gt; */
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // standard ASCII symbols
&lt;br&gt;&amp;gt; #define CR &amp;nbsp; 0x0D
&lt;br&gt;&amp;gt; #define LF &amp;nbsp; 0x0A
&lt;br&gt;&amp;gt; #define BS &amp;nbsp; 0x08
&lt;br&gt;&amp;gt; #define ESC &amp;nbsp;0x1B
&lt;br&gt;&amp;gt; #define SP &amp;nbsp; 0x20
&lt;br&gt;&amp;gt; #define DEL &amp;nbsp;0x7F
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-------------------------SCI_Init------------------------
&lt;br&gt;&amp;gt; //-------------------------SCI_Init------------------------
&lt;br&gt;&amp;gt; // Initialize Serial port SCI
&lt;br&gt;&amp;gt; // Input: baudRate is tha baud rate in bits/sec
&lt;br&gt;&amp;gt; // Output: none
&lt;br&gt;&amp;gt; // SCIBDL = 24000000/(16 x BR)
&lt;br&gt;&amp;gt; // baudRate = &amp;nbsp;2400 bits/sec &amp;nbsp; SCIBDL=625
&lt;br&gt;&amp;gt; // baudRate = &amp;nbsp;4800 bits/sec &amp;nbsp; SCIBDL=313
&lt;br&gt;&amp;gt; // baudRate = &amp;nbsp;9600 bits/sec &amp;nbsp; SCIBDL=156
&lt;br&gt;&amp;gt; // baudRate = &amp;nbsp;19200 bits/sec &amp;nbsp;SCIBDL=78
&lt;br&gt;&amp;gt; // assumes a module clock frequency of 4 MHz
&lt;br&gt;&amp;gt; // sets baudRate to 9600
&lt;br&gt;&amp;gt; void SCI_Init(unsigned short baudRate,unsigned int port);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-------------------------SCI_InStatus--------------------------
&lt;br&gt;&amp;gt; // Checks if new input is ready, TRUE if new input is ready
&lt;br&gt;&amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; // Output: TRUE if a call to InChar will return right away with data
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FALSE if a call to InChar will wait for input
&lt;br&gt;&amp;gt; char SCI_InStatus(unsigned int port);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-------------------------SCI_InChar------------------------
&lt;br&gt;&amp;gt; // Wait for new serial port input, busy-waiting synchronization
&lt;br&gt;&amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; // Output: ASCII code for key typed
&lt;br&gt;&amp;gt; char SCI_InChar(unsigned int port);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; void SCI_InString(char* string,unsigned short max,unsigned int port); // 
&lt;br&gt;&amp;gt; Reads in a String of max length
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //----------------------SCI_InUDec-------------------------------
&lt;br&gt;&amp;gt; // InUDec accepts ASCII input in unsigned decimal format
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; and converts to a 16 bit unsigned number
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; valid range is 0 to 65535
&lt;br&gt;&amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; // Output: 16-bit unsigned number
&lt;br&gt;&amp;gt; // If you enter a number above 65535, it will truncate without an error
&lt;br&gt;&amp;gt; // Backspace will remove last digit typed
&lt;br&gt;&amp;gt; unsigned short SCI_InUDec(unsigned int port);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //---------------------SCI_InUHex----------------------------------------
&lt;br&gt;&amp;gt; // Accepts ASCII input in unsigned hexadecimal (base 16) format
&lt;br&gt;&amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; // Output: 16-bit unsigned number
&lt;br&gt;&amp;gt; // No '$' or '0x' need be entered, just the 1 to 4 hex digits
&lt;br&gt;&amp;gt; // It will convert lower case a-f to uppercase A-F
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; and converts to a 16 bit unsigned number
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; value range is 0 to FFFF
&lt;br&gt;&amp;gt; // If you enter a number above FFFF, it will truncate without an error
&lt;br&gt;&amp;gt; // Backspace will remove last digit typed
&lt;br&gt;&amp;gt; unsigned short SCI_InUHex(unsigned int port);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-----------------------SCI_OutStatus----------------------------
&lt;br&gt;&amp;gt; // Checks if output data buffer is empty, TRUE if empty
&lt;br&gt;&amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; // Output: TRUE if a call to OutChar will output and return right away
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FALSE if a call to OutChar will wait for output to be ready
&lt;br&gt;&amp;gt; char SCI_OutStatus(unsigned int port);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-------------------------SCI_OutChar------------------------
&lt;br&gt;&amp;gt; // Wait for buffer to be empty, output 8-bit to serial port
&lt;br&gt;&amp;gt; // busy-waiting synchronization
&lt;br&gt;&amp;gt; // Input: 8-bit data to be transferred, unsigned int port
&lt;br&gt;&amp;gt; // Output: none
&lt;br&gt;&amp;gt; void SCI_OutChar(char data,unsigned int port);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-----------------------SCI_OutUDec-----------------------
&lt;br&gt;&amp;gt; // Output a 16-bit number in unsigned decimal format
&lt;br&gt;&amp;gt; // Input: 16-bit number to be transferred, unsigned int port
&lt;br&gt;&amp;gt; // Output: none
&lt;br&gt;&amp;gt; // Variable format 1-5 digits with no space before or after
&lt;br&gt;&amp;gt; void SCI_OutUDec(unsigned short,unsigned int port);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-------------------------SCI_OutString------------------------
&lt;br&gt;&amp;gt; // Output String (NULL termination), busy-waiting synchronization
&lt;br&gt;&amp;gt; // Input: pointer to a NULL-terminated string to be transferred, unsigned 
&lt;br&gt;&amp;gt; int port
&lt;br&gt;&amp;gt; // Output: none
&lt;br&gt;&amp;gt; void SCI_OutString(char *pt,unsigned int port);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //--------------------------SCI_OutUHex----------------------------
&lt;br&gt;&amp;gt; // Output a 16 bit number in unsigned hexadecimal format
&lt;br&gt;&amp;gt; // Input: 16-bit number to be transferred, unsigned int port
&lt;br&gt;&amp;gt; // Output: none
&lt;br&gt;&amp;gt; // Variable format 1 to 4 digits with no space before or after
&lt;br&gt;&amp;gt; void SCI_OutUHex(unsigned short,unsigned int port);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // filename &amp;nbsp;*************** &amp;nbsp;SCI.C ******************************
&lt;br&gt;&amp;gt; // Simple I/O routines to 9S12C32 serial port
&lt;br&gt;&amp;gt; // Jonathan W. Valvano 1/29/04
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // &amp;nbsp;This example accompanies the books
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;quot;Embedded Microcomputer Systems: Real Time Interfacing&amp;quot;,
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Brooks-Cole, copyright (c) 2000,
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;quot;Introduction to Embedded Microcomputer Systems:
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp;Motorola 6811 and 6812 Simulation&amp;quot;, Brooks-Cole, copyright (c) 2002
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; // Copyright 2004 by Jonathan W. Valvano, &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26072139&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;valvano@...&lt;/a&gt;
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp;You may use, edit, run or distribute this file
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp;as long as the above copyright notice remains
&lt;br&gt;&amp;gt; // Modified by EE345L students Charlie Gough &amp;&amp; Matt Hawk
&lt;br&gt;&amp;gt; // Modified by EE345M students Agustinus Darmawan + Mingjie Qiu
&lt;br&gt;&amp;gt; // Modified by Steven Lamb April 28, 2004 (minor changes for g++)
&lt;br&gt;&amp;gt; // Modified by Zachary Long Oct 16, 2009 (serial init (9600)updated, use 
&lt;br&gt;&amp;gt; of both serial ports enabled)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //How To
&lt;br&gt;&amp;gt; /*
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; */
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; #include &amp;quot;hcs12.h&amp;quot; &amp;nbsp; &amp;nbsp; // io register map
&lt;br&gt;&amp;gt; #include &amp;quot;SCI.h&amp;quot;
&lt;br&gt;&amp;gt; #define RDRF 0x20 &amp;nbsp; // Receive Data Register Full Bit
&lt;br&gt;&amp;gt; #define TDRE 0x80 &amp;nbsp; // Transmit Data Register Empty Bit
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-------------------------SCI_Init------------------------
&lt;br&gt;&amp;gt; // Initialize Serial port SCI
&lt;br&gt;&amp;gt; // Input: baudRate is tha baud rate in bits/sec
&lt;br&gt;&amp;gt; // Output: none
&lt;br&gt;&amp;gt; // SCIBDL = 24000000/(16 x BR)
&lt;br&gt;&amp;gt; // baudRate = &amp;nbsp;2400 bits/sec &amp;nbsp; SCIBDL=625
&lt;br&gt;&amp;gt; // baudRate = &amp;nbsp;4800 bits/sec &amp;nbsp; SCIBDL=313
&lt;br&gt;&amp;gt; // baudRate = &amp;nbsp;9600 bits/sec &amp;nbsp; SCIBDL=156
&lt;br&gt;&amp;gt; // baudRate = &amp;nbsp;19200 bits/sec &amp;nbsp;SCIBDL=78
&lt;br&gt;&amp;gt; // assumes a module clock frequency of 4 MHz
&lt;br&gt;&amp;gt; // sets baudRate to 9600
&lt;br&gt;&amp;gt; void SCI_Init(unsigned short baudRate, unsigned int port)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp;switch(port)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; case 0:
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; SCI0BDH = 0;
&lt;br&gt;&amp;gt; switch(baudRate)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;case 2400: &amp;nbsp;SCI0BDL=625; break;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;case 4800: &amp;nbsp;SCI0BDL=313; &amp;nbsp;break;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;case 9600: &amp;nbsp;SCI0BDL=156; &amp;nbsp;break;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;case 19200: SCI0BDL=78; &amp;nbsp;break;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;default: &amp;nbsp; &amp;nbsp;SCI0BDL = 156 ; &amp;nbsp;// 9600
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; break;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; SCI0CR1 = 0;
&lt;br&gt;&amp;gt; /* bit value meaning
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;7 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;LOOPS, no looping, normal
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;6 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;WOMS, normal high/low outputs
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;5 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;RSRC, not appliable with LOOPS=0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;4 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;M, 1 start, 8 data, 1 stop
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;3 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;WAKE, wake by idle (not applicable)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;2 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;ILT, short idle time (not applicable)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;1 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;PE, no parity
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;PT, parity type (not applicable with PE=0)
&lt;br&gt;&amp;gt; */
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;SCI0CR2 = 0x0C;
&lt;br&gt;&amp;gt; /* bit value meaning
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;7 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;TIE, no transmit interrupts on TDRE
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;6 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;TCIE, no transmit interrupts on TC
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;5 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;RIE, no receive interrupts on RDRF
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;4 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;ILIE, no interrupts on idle
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;3 &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;TE, enable transmitter
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;2 &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;RE, enable receiver
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;1 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;RWU, no receiver wakeup
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;SBK, no send break
&lt;br&gt;&amp;gt; */
&lt;br&gt;&amp;gt; break;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; case 1:
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; SCI1BDH = 0;
&lt;br&gt;&amp;gt; switch(baudRate)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;case 2400: &amp;nbsp;SCI1BDL=625; break;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;case 4800: &amp;nbsp;SCI1BDL=313; &amp;nbsp;break;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;case 9600: &amp;nbsp;SCI1BDL=156; &amp;nbsp;break;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;case 19200: SCI1BDL=78; &amp;nbsp;break;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;default: &amp;nbsp; &amp;nbsp;SCI1BDL = 156 ; &amp;nbsp;// 9600
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; break;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; SCI1CR1 = 0;
&lt;br&gt;&amp;gt; /* bit value meaning
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;7 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;LOOPS, no looping, normal
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;6 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;WOMS, normal high/low outputs
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;5 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;RSRC, not appliable with LOOPS=0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;4 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;M, 1 start, 8 data, 1 stop
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;3 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;WAKE, wake by idle (not applicable)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;2 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;ILT, short idle time (not applicable)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;1 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;PE, no parity
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;PT, parity type (not applicable with PE=0)
&lt;br&gt;&amp;gt; */
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;SCI1CR2 = 0x0C;
&lt;br&gt;&amp;gt; /* bit value meaning
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;7 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;TIE, no transmit interrupts on TDRE
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;6 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;TCIE, no transmit interrupts on TC
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;5 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;RIE, no receive interrupts on RDRF
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;4 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;ILIE, no interrupts on idle
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;3 &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;TE, enable transmitter
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;2 &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;RE, enable receiver
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;1 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;RWU, no receiver wakeup
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;SBK, no send break
&lt;br&gt;&amp;gt; */
&lt;br&gt;&amp;gt; break;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-------------------------SCI_InChar------------------------
&lt;br&gt;&amp;gt; // Wait for new serial port input, busy-waiting synchronization
&lt;br&gt;&amp;gt; // Input: int port
&lt;br&gt;&amp;gt; // Output: ASCII code for key typed
&lt;br&gt;&amp;gt; char SCI_InChar(unsigned int port)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp;switch(port)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; case 0:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;while((SCI0SR1 &amp; RDRF) == 0){};
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;return(SCI0DRL);
&lt;br&gt;&amp;gt; &amp;nbsp; break;
&lt;br&gt;&amp;gt; case 1:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;while((SCI1SR1 &amp; RDRF) == 0){};
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;return(SCI1DRL);
&lt;br&gt;&amp;gt; &amp;nbsp; break;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-------------------------SCI_OutChar------------------------
&lt;br&gt;&amp;gt; // Wait for buffer to be empty, output 8-bit to serial port
&lt;br&gt;&amp;gt; // busy-waiting synchronization
&lt;br&gt;&amp;gt; // Input: 8-bit data to be transferred
&lt;br&gt;&amp;gt; // Output: none
&lt;br&gt;&amp;gt; void SCI_OutChar(char data,unsigned int port)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; switch(port)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; case 0:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;while((SCI0SR1 &amp; TDRE) == 0){};
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;SCI0DRL = data;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; &amp;nbsp; case 1:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;while((SCI1SR1 &amp; TDRE) == 0){};
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;SCI1DRL = data;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-------------------------SCI_InStatus--------------------------
&lt;br&gt;&amp;gt; // Checks if new input is ready, TRUE if new input is ready
&lt;br&gt;&amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; // Output: TRUE if a call to InChar will return right away with data
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FALSE if a call to InChar will wait for input
&lt;br&gt;&amp;gt; char SCI_InStatus(unsigned int port)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp;switch(port)
&lt;br&gt;&amp;gt; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;case 0:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return(SCI0SR1 &amp; RDRF);break;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;case 1:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return(SCI1SR1 &amp; RDRF);break;
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; //-----------------------SCI_OutStatus----------------------------
&lt;br&gt;&amp;gt; // Checks if output data buffer is empty, TRUE if empty
&lt;br&gt;&amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; // Output: TRUE if a call to OutChar will output and return right away
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FALSE if a call to OutChar will wait for output to be ready
&lt;br&gt;&amp;gt; char SCI_OutStatus(unsigned int port)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp;switch(port)
&lt;br&gt;&amp;gt; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;case 0:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return(SCI0SR1 &amp; TDRE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;case 1:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return(SCI1SR1 &amp; TDRE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-------------------------SCI_OutString------------------------
&lt;br&gt;&amp;gt; // Output String (NULL termination), busy-waiting synchronization
&lt;br&gt;&amp;gt; // Input: pointer to a NULL-terminated string to be transferred, unsigned 
&lt;br&gt;&amp;gt; int port
&lt;br&gt;&amp;gt; // Output: none
&lt;br&gt;&amp;gt; void SCI_OutString(char *pt,unsigned int port)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp;while(*pt){
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;SCI_OutChar(*pt,port);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;pt++;
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //----------------------SCI_InUDec-------------------------------
&lt;br&gt;&amp;gt; // InUDec accepts ASCII input in unsigned decimal format
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; and converts to a 16 bit unsigned number
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; valid range is 0 to 65535
&lt;br&gt;&amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; // Output: 16-bit unsigned number
&lt;br&gt;&amp;gt; // If you enter a number above 65535, it will truncate without an error
&lt;br&gt;&amp;gt; // Backspace will remove last digit typed
&lt;br&gt;&amp;gt; unsigned short SCI_InUDec(unsigned int port)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;unsigned short number=0, length=0;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;char character;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;character = SCI_InChar(port);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;while(character!=CR) // accepts until carriage return input
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// The next line checks that the input is a digit, 0-9.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// If the character is not 0-9, it is ignored and not echoed
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((character&amp;gt;='0') &amp;&amp; (character&amp;lt;='9'))
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;number = 10*number+(character-'0'); &amp;nbsp; // this line overflows if 
&lt;br&gt;&amp;gt; above 65535
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;length++;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI_OutChar(character,port);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;// If the input is a backspace, then the return number is
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;// changed and a backspace is outputted to the screen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else if((character==BS) &amp;&amp; length)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;number /= 10;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;length--;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI_OutChar(character,port);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;character = SCI_InChar(port);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;return number;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //-----------------------SCI_OutUDec-----------------------
&lt;br&gt;&amp;gt; // Output a 16-bit number in unsigned decimal format
&lt;br&gt;&amp;gt; // Input: 16-bit number to be transferred, unsigned int port
&lt;br&gt;&amp;gt; // Output: none
&lt;br&gt;&amp;gt; // Variable format 1-5 digits with no space before or after
&lt;br&gt;&amp;gt; void SCI_OutUDec(unsigned short n,unsigned int port)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; // This function uses recursion to convert decimal number
&lt;br&gt;&amp;gt; // &amp;nbsp; of unspecified length as an ASCII string
&lt;br&gt;&amp;gt; &amp;nbsp;if(n &amp;gt;= 10){
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;SCI_OutUDec(n/10,port);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;n = n%10;
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp;SCI_OutChar(n+'0',port); /* n is between 0 and 9 */
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //---------------------SCI_InUHex----------------------------------------
&lt;br&gt;&amp;gt; // Accepts ASCII input in unsigned hexadecimal (base 16) format
&lt;br&gt;&amp;gt; // Input: unsigned int port
&lt;br&gt;&amp;gt; // Output: 16-bit unsigned number
&lt;br&gt;&amp;gt; // No '$' or '0x' need be entered, just the 1 to 4 hex digits
&lt;br&gt;&amp;gt; // It will convert lower case a-f to uppercase A-F
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; and converts to a 16 bit unsigned number
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; value range is 0 to FFFF
&lt;br&gt;&amp;gt; // If you enter a number above FFFF, it will truncate without an error
&lt;br&gt;&amp;gt; // Backspace will remove last digit typed
&lt;br&gt;&amp;gt; unsigned short SCI_InUHex(unsigned int port){
&lt;br&gt;&amp;gt; unsigned short number=0, digit, length=0;
&lt;br&gt;&amp;gt; char character;
&lt;br&gt;&amp;gt; &amp;nbsp;character = SCI_InChar(port);
&lt;br&gt;&amp;gt; &amp;nbsp;while(character!=CR){
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;digit = 0x10; // assume bad
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;if((character&amp;gt;='0') &amp;&amp; (character&amp;lt;='9')){
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;digit = character-'0';
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;else if((character&amp;gt;='A') &amp;&amp; (character&amp;lt;='F')){
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;digit = (character-'A')+0xA;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;else if((character&amp;gt;='a') &amp;&amp; (character&amp;lt;='f')){
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;digit = (character-'a')+0xA;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; // If the character is not 0-9 or A-F, it is ignored and not echoed
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;if(digit&amp;lt;=0xF ){
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;number = number*0x10+digit;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;length++;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI_OutChar(character,port);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; // Backspace outputted and return value changed if a backspace is inputted
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;else if(character==BS &amp;&amp; length){
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;number /=0x10;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;length--;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI_OutChar(character,port);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;character = SCI_InChar(port);
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp;return number;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //--------------------------SCI_OutUHex----------------------------
&lt;br&gt;&amp;gt; // Output a 16 bit number in unsigned hexadecimal format
&lt;br&gt;&amp;gt; // Input: 16-bit number to be transferred, unsigned int port
&lt;br&gt;&amp;gt; // Output: none
&lt;br&gt;&amp;gt; // Variable format 1 to 4 digits with no space before or after
&lt;br&gt;&amp;gt; void SCI_OutUHex(unsigned short number,unsigned int port){
&lt;br&gt;&amp;gt; // This function uses recursion to convert the number of
&lt;br&gt;&amp;gt; // &amp;nbsp; unspecified length as an ASCII string
&lt;br&gt;&amp;gt; &amp;nbsp;if(number&amp;gt;=0x10) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;SCI_OutUHex(number/0x10,port);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;SCI_OutUHex(number%0x10,port);
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp;else if(number&amp;lt;0xA){
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;SCI_OutChar(number+'0',port);
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp;else{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;SCI_OutChar((number-0x0A)+'A',port);
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; //------------------------SCI_InString------------------------
&lt;br&gt;&amp;gt; // This function accepts ASCII characters from the serial port
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp;and adds them to a string until a carriage return is inputted
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp;or until max length of the string is reached.
&lt;br&gt;&amp;gt; // It echoes each character as it is inputted.
&lt;br&gt;&amp;gt; // If a backspace is inputted, the string is modified
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp;and the backspace is echoed
&lt;br&gt;&amp;gt; // InString terminates the string with a null character
&lt;br&gt;&amp;gt; // -- Modified by Agustinus Darmawan + Mingjie Qiu --
&lt;br&gt;&amp;gt; void SCI_InString(char *string,unsigned short max,unsigned int port)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; int length=0;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;char character;
&lt;br&gt;&amp;gt; &amp;nbsp;character = SCI_InChar(port);
&lt;br&gt;&amp;gt; &amp;nbsp;while(character!=CR)
&lt;br&gt;&amp;gt; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;if(character==BS)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(length)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;string--;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;length--;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI_OutChar(BS,port);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;else if(length&amp;lt;max)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;*string++=character;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;length++;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;SCI_OutChar(character,port);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;character = SCI_InChar(port);
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp;*string = 0;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26072139.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26066955</id>
	<title>Dragon Board 12 Serial Communication C code Help</title>
	<published>2009-10-26T13:26:49Z</published>
	<updated>2009-10-26T13:26:49Z</updated>
	<author>
		<name>zach.r.long</name>
	</author>
	<content type="html">Hello all, I am hoping someone has some incite as to what I am doing wrong here, I figure it is a small problem but I am out of ideas. This is just a test to figure out how to pass char * through methods. The code should print Hello World to the serial port which it does, then print tes repeatedly, which it does not, rather the output is as follows: 
&lt;br&gt;&lt;br&gt;Hello World&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&lt;br&gt;Here is the code, also below is the sci.c and sci.h that do the actually serial communication. 
&lt;br&gt;&lt;br&gt;Thank You in advanced ! 
&lt;br&gt;&lt;br&gt;Zach Long
&lt;br&gt;&lt;br&gt;MAIN:
&lt;br&gt;&lt;br&gt;#include &amp;quot;sci.h&amp;quot;
&lt;br&gt;&lt;br&gt;int main(void);
&lt;br&gt;void encode(char *out);
&lt;br&gt;&lt;br&gt;int main(void)
&lt;br&gt;{
&lt;br&gt;&amp;nbsp;char* head = &amp;quot;Hello World&amp;quot;; // declare first print statement
&lt;br&gt;&amp;nbsp;char* outData =(char*) malloc (sizeof (char*)* 5); // make room for 5 char
&lt;br&gt;&lt;br&gt;&amp;nbsp;SCI_Init(9600,0); //Startup serial port 0(under LCD) at 9600 BAUD
&lt;br&gt;&amp;nbsp;SCI_OutStatus(1); // Is it clear to send (buffer empty)
&lt;br&gt;&amp;nbsp;SCI_OutString(head,0); // print &amp;quot;Hello World&amp;quot; to serial port (WORKS !!)
&lt;br&gt;&lt;br&gt;&amp;nbsp;while(1)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(SCI_OutStatus(0))// Is it clear to send (buffer empty)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; encode(outData);//,out.throt,out.heading); // build output
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SCI_OutString(outData,0); // print out put to serial port
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} 
&lt;br&gt;&amp;nbsp;} &amp;nbsp;
&lt;br&gt;&amp;nbsp;return 0;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;void encode(char *out) // take in pointer and fill with chars
&lt;br&gt;{ 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; out[0] = 't';
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; out[1] = 'e';
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; out[2] = 's';
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; out[3] = 0;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;SCI include:
&lt;br&gt;&lt;br&gt;// filename &amp;nbsp;******************* SCI.H **************************
&lt;br&gt;// Jonathan W. Valvano 1/29/04
&lt;br&gt;&lt;br&gt;// &amp;nbsp;This example accompanies the books
&lt;br&gt;// &amp;nbsp; &amp;quot;Embedded Microcomputer Systems: Real Time Interfacing&amp;quot;,
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Brooks-Cole, copyright (c) 2000,
&lt;br&gt;// &amp;nbsp; &amp;quot;Introduction to Embedded Microcomputer Systems: 
&lt;br&gt;// &amp;nbsp; &amp;nbsp;Motorola 6811 and 6812 Simulation&amp;quot;, Brooks-Cole, copyright (c) 2002
&lt;br&gt;&lt;br&gt;// Copyright 2004 by Jonathan W. Valvano, &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26066955&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;valvano@...&lt;/a&gt; 
&lt;br&gt;// &amp;nbsp; &amp;nbsp;You may use, edit, run or distribute this file 
&lt;br&gt;// &amp;nbsp; &amp;nbsp;as long as the above copyright notice remains 
&lt;br&gt;// Modified by EE345L students Charlie Gough &amp;&amp; Matt Hawk
&lt;br&gt;// Modified by EE345M students Agustinus Darmawan + Mingjie Qiu
&lt;br&gt;// Modified by Zachary Long Oct 16, 2009 (setup for Dragon Board 12 9600 BAUD, use of both serial ports enabled)
&lt;br&gt;&lt;br&gt;//How To
&lt;br&gt;/*
&lt;br&gt;&amp;nbsp; &amp;nbsp; Each method has an unsigned int port parameter, this specifices the serial port
&lt;br&gt;&amp;nbsp; &amp;nbsp; the method will act on. Dragon Board 12: Serial port under LCD (top) = 0, Serial port near power plug (bottom) = 1
&lt;br&gt;*/
&lt;br&gt;&amp;nbsp;
&lt;br&gt;// standard ASCII symbols
&lt;br&gt;#define CR &amp;nbsp; 0x0D
&lt;br&gt;#define LF &amp;nbsp; 0x0A
&lt;br&gt;#define BS &amp;nbsp; 0x08
&lt;br&gt;#define ESC &amp;nbsp;0x1B
&lt;br&gt;#define SP &amp;nbsp; 0x20
&lt;br&gt;#define DEL &amp;nbsp;0x7F
&lt;br&gt;&amp;nbsp;
&lt;br&gt;//-------------------------SCI_Init------------------------
&lt;br&gt;//-------------------------SCI_Init------------------------
&lt;br&gt;// Initialize Serial port SCI
&lt;br&gt;// Input: baudRate is tha baud rate in bits/sec
&lt;br&gt;// Output: none
&lt;br&gt;// SCIBDL = 24000000/(16 x BR)
&lt;br&gt;// baudRate = &amp;nbsp;2400 bits/sec &amp;nbsp; SCIBDL=625
&lt;br&gt;// baudRate = &amp;nbsp;4800 bits/sec &amp;nbsp; SCIBDL=313
&lt;br&gt;// baudRate = &amp;nbsp;9600 bits/sec &amp;nbsp; SCIBDL=156
&lt;br&gt;// baudRate = &amp;nbsp;19200 bits/sec &amp;nbsp;SCIBDL=78
&lt;br&gt;// assumes a module clock frequency of 4 MHz
&lt;br&gt;// sets baudRate to 9600
&lt;br&gt;void SCI_Init(unsigned short baudRate,unsigned int port);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;//-------------------------SCI_InStatus--------------------------
&lt;br&gt;// Checks if new input is ready, TRUE if new input is ready
&lt;br&gt;// Input: unsigned int port
&lt;br&gt;// Output: TRUE if a call to InChar will return right away with data
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FALSE if a call to InChar will wait for input
&lt;br&gt;char SCI_InStatus(unsigned int port); &amp;nbsp;
&lt;br&gt;&lt;br&gt;//-------------------------SCI_InChar------------------------
&lt;br&gt;// Wait for new serial port input, busy-waiting synchronization
&lt;br&gt;// Input: unsigned int port
&lt;br&gt;// Output: ASCII code for key typed
&lt;br&gt;char SCI_InChar(unsigned int port);
&lt;br&gt;&lt;br&gt;void SCI_InString(char* string,unsigned short max,unsigned int port); // Reads in a String of max length
&lt;br&gt;&lt;br&gt;//----------------------SCI_InUDec-------------------------------
&lt;br&gt;// InUDec accepts ASCII input in unsigned decimal format
&lt;br&gt;// &amp;nbsp; &amp;nbsp; and converts to a 16 bit unsigned number
&lt;br&gt;// &amp;nbsp; &amp;nbsp; valid range is 0 to 65535
&lt;br&gt;// Input: unsigned int port
&lt;br&gt;// Output: 16-bit unsigned number
&lt;br&gt;// If you enter a number above 65535, it will truncate without an error
&lt;br&gt;// Backspace will remove last digit typed
&lt;br&gt;unsigned short SCI_InUDec(unsigned int port); &amp;nbsp; 
&lt;br&gt;&lt;br&gt;//---------------------SCI_InUHex----------------------------------------
&lt;br&gt;// Accepts ASCII input in unsigned hexadecimal (base 16) format
&lt;br&gt;// Input: unsigned int port
&lt;br&gt;// Output: 16-bit unsigned number
&lt;br&gt;// No '$' or '0x' need be entered, just the 1 to 4 hex digits
&lt;br&gt;// It will convert lower case a-f to uppercase A-F
&lt;br&gt;// &amp;nbsp; &amp;nbsp; and converts to a 16 bit unsigned number
&lt;br&gt;// &amp;nbsp; &amp;nbsp; value range is 0 to FFFF
&lt;br&gt;// If you enter a number above FFFF, it will truncate without an error
&lt;br&gt;// Backspace will remove last digit typed
&lt;br&gt;unsigned short SCI_InUHex(unsigned int port); &amp;nbsp;
&lt;br&gt;&lt;br&gt;//-----------------------SCI_OutStatus----------------------------
&lt;br&gt;// Checks if output data buffer is empty, TRUE if empty
&lt;br&gt;// Input: unsigned int port
&lt;br&gt;// Output: TRUE if a call to OutChar will output and return right away
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FALSE if a call to OutChar will wait for output to be ready
&lt;br&gt;char SCI_OutStatus(unsigned int port); &amp;nbsp; 
&lt;br&gt;&lt;br&gt;//-------------------------SCI_OutChar------------------------
&lt;br&gt;// Wait for buffer to be empty, output 8-bit to serial port
&lt;br&gt;// busy-waiting synchronization
&lt;br&gt;// Input: 8-bit data to be transferred, unsigned int port
&lt;br&gt;// Output: none
&lt;br&gt;void SCI_OutChar(char data,unsigned int port); &amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;//-----------------------SCI_OutUDec-----------------------
&lt;br&gt;// Output a 16-bit number in unsigned decimal format
&lt;br&gt;// Input: 16-bit number to be transferred, unsigned int port
&lt;br&gt;// Output: none
&lt;br&gt;// Variable format 1-5 digits with no space before or after
&lt;br&gt;void SCI_OutUDec(unsigned short,unsigned int port); &amp;nbsp; &amp;nbsp;
&lt;br&gt;&lt;br&gt;//-------------------------SCI_OutString------------------------
&lt;br&gt;// Output String (NULL termination), busy-waiting synchronization
&lt;br&gt;// Input: pointer to a NULL-terminated string to be transferred, unsigned int port
&lt;br&gt;// Output: none
&lt;br&gt;void SCI_OutString(char *pt,unsigned int port); 
&lt;br&gt;&amp;nbsp;
&lt;br&gt;//--------------------------SCI_OutUHex----------------------------
&lt;br&gt;// Output a 16 bit number in unsigned hexadecimal format
&lt;br&gt;// Input: 16-bit number to be transferred, unsigned int port
&lt;br&gt;// Output: none
&lt;br&gt;// Variable format 1 to 4 digits with no space before or after
&lt;br&gt;void SCI_OutUHex(unsigned short,unsigned int port); 
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;// filename &amp;nbsp;*************** &amp;nbsp;SCI.C ****************************** 
&lt;br&gt;// Simple I/O routines to 9S12C32 serial port &amp;nbsp; 
&lt;br&gt;// Jonathan W. Valvano 1/29/04
&lt;br&gt;&lt;br&gt;// &amp;nbsp;This example accompanies the books
&lt;br&gt;// &amp;nbsp; &amp;quot;Embedded Microcomputer Systems: Real Time Interfacing&amp;quot;,
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Brooks-Cole, copyright (c) 2000,
&lt;br&gt;// &amp;nbsp; &amp;quot;Introduction to Embedded Microcomputer Systems: 
&lt;br&gt;// &amp;nbsp; &amp;nbsp;Motorola 6811 and 6812 Simulation&amp;quot;, Brooks-Cole, copyright (c) 2002
&lt;br&gt;&lt;br&gt;// Copyright 2004 by Jonathan W. Valvano, &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26066955&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;valvano@...&lt;/a&gt; 
&lt;br&gt;// &amp;nbsp; &amp;nbsp;You may use, edit, run or distribute this file 
&lt;br&gt;// &amp;nbsp; &amp;nbsp;as long as the above copyright notice remains 
&lt;br&gt;// Modified by EE345L students Charlie Gough &amp;&amp; Matt Hawk
&lt;br&gt;// Modified by EE345M students Agustinus Darmawan + Mingjie Qiu
&lt;br&gt;// Modified by Steven Lamb April 28, 2004 (minor changes for g++)
&lt;br&gt;// Modified by Zachary Long Oct 16, 2009 (serial init (9600)updated, use of both serial ports enabled)
&lt;br&gt;&lt;br&gt;&lt;br&gt;//How To
&lt;br&gt;/*
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;*/
&lt;br&gt;&lt;br&gt;#include &amp;quot;hcs12.h&amp;quot; &amp;nbsp; &amp;nbsp; // io register map
&lt;br&gt;#include &amp;quot;SCI.h&amp;quot;
&lt;br&gt;#define RDRF 0x20 &amp;nbsp; // Receive Data Register Full Bit
&lt;br&gt;#define TDRE 0x80 &amp;nbsp; // Transmit Data Register Empty Bit
&lt;br&gt;&lt;br&gt;&lt;br&gt;//-------------------------SCI_Init------------------------
&lt;br&gt;// Initialize Serial port SCI
&lt;br&gt;// Input: baudRate is tha baud rate in bits/sec
&lt;br&gt;// Output: none
&lt;br&gt;// SCIBDL = 24000000/(16 x BR)
&lt;br&gt;// baudRate = &amp;nbsp;2400 bits/sec &amp;nbsp; SCIBDL=625
&lt;br&gt;// baudRate = &amp;nbsp;4800 bits/sec &amp;nbsp; SCIBDL=313
&lt;br&gt;// baudRate = &amp;nbsp;9600 bits/sec &amp;nbsp; SCIBDL=156
&lt;br&gt;// baudRate = &amp;nbsp;19200 bits/sec &amp;nbsp;SCIBDL=78
&lt;br&gt;// assumes a module clock frequency of 4 MHz
&lt;br&gt;// sets baudRate to 9600
&lt;br&gt;void SCI_Init(unsigned short baudRate, unsigned int port)
&lt;br&gt;{	
&lt;br&gt;&amp;nbsp; switch(port)
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 0:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SCI0BDH = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch(baudRate)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			case 2400: &amp;nbsp;SCI0BDL=625; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			case 4800: &amp;nbsp;SCI0BDL=313; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			case 9600: &amp;nbsp;SCI0BDL=156; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			case 19200: SCI0BDL=78; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			default: &amp;nbsp; &amp;nbsp;SCI0BDL = 156 ; &amp;nbsp;// 9600
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SCI0CR1 = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* bit value meaning
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			7 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;LOOPS, no looping, normal
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			6 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;WOMS, normal high/low outputs
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			5 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;RSRC, not appliable with LOOPS=0
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			4 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;M, 1 start, 8 data, 1 stop
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			3 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;WAKE, wake by idle (not applicable)
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			2 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;ILT, short idle time (not applicable)
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			1 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;PE, no parity
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			0 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;PT, parity type (not applicable with PE=0) 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; */ 
&lt;br&gt;&lt;br&gt;&amp;nbsp; 		SCI0CR2 = 0x0C; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* bit value meaning
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			7 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;TIE, no transmit interrupts on TDRE
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			6 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;TCIE, no transmit interrupts on TC
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			5 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;RIE, no receive interrupts on RDRF
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			4 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;ILIE, no interrupts on idle
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			3 &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;TE, enable transmitter
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			2 &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;RE, enable receiver
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			1 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;RWU, no receiver wakeup
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			0 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;SBK, no send break 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; */ 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 1:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SCI1BDH = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch(baudRate)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			case 2400: &amp;nbsp;SCI1BDL=625; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			case 4800: &amp;nbsp;SCI1BDL=313; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			case 9600: &amp;nbsp;SCI1BDL=156; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			case 19200: SCI1BDL=78; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			default: &amp;nbsp; &amp;nbsp;SCI1BDL = 156 ; &amp;nbsp;// 9600
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SCI1CR1 = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* bit value meaning
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			7 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;LOOPS, no looping, normal
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			6 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;WOMS, normal high/low outputs
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			5 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;RSRC, not appliable with LOOPS=0
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			4 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;M, 1 start, 8 data, 1 stop
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			3 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;WAKE, wake by idle (not applicable)
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			2 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;ILT, short idle time (not applicable)
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			1 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;PE, no parity
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			0 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;PT, parity type (not applicable with PE=0) 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; */ 
&lt;br&gt;&lt;br&gt;&amp;nbsp; 		SCI1CR2 = 0x0C; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* bit value meaning
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			7 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;TIE, no transmit interrupts on TDRE
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			6 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;TCIE, no transmit interrupts on TC
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			5 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;RIE, no receive interrupts on RDRF
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			4 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;ILIE, no interrupts on idle
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			3 &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;TE, enable transmitter
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			2 &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;RE, enable receiver
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			1 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;RWU, no receiver wakeup
&lt;br&gt;&amp;nbsp; &amp;nbsp; 			0 &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;SBK, no send break 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; */ 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; } 
&lt;br&gt;}
&lt;br&gt;&amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;//-------------------------SCI_InChar------------------------
&lt;br&gt;// Wait for new serial port input, busy-waiting synchronization
&lt;br&gt;// Input: int port
&lt;br&gt;// Output: ASCII code for key typed
&lt;br&gt;char SCI_InChar(unsigned int port)
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; switch(port)
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 0:
&lt;br&gt;&amp;nbsp; 	 &amp;nbsp;while((SCI0SR1 &amp; RDRF) == 0){};
&lt;br&gt;&amp;nbsp; 	 &amp;nbsp;return(SCI0DRL);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;	
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 1:
&lt;br&gt;&amp;nbsp; 	 &amp;nbsp;while((SCI1SR1 &amp; RDRF) == 0){};
&lt;br&gt;&amp;nbsp; 	 &amp;nbsp;return(SCI1DRL);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;//-------------------------SCI_OutChar------------------------
&lt;br&gt;// Wait for buffer to be empty, output 8-bit to serial port
&lt;br&gt;// busy-waiting synchronization
&lt;br&gt;// Input: 8-bit data to be transferred
&lt;br&gt;// Output: none
&lt;br&gt;void SCI_OutChar(char data,unsigned int port)
&lt;br&gt;{
&lt;br&gt;&amp;nbsp;switch(port)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;case 0:
&lt;br&gt;&amp;nbsp; &amp;nbsp; while((SCI0SR1 &amp; TDRE) == 0){};
&lt;br&gt;&amp;nbsp; &amp;nbsp; SCI0DRL = data; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp;case 1:
&lt;br&gt;&amp;nbsp; &amp;nbsp; while((SCI1SR1 &amp; TDRE) == 0){};
&lt;br&gt;&amp;nbsp; &amp;nbsp; SCI1DRL = data; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp;} &amp;nbsp;
&lt;br&gt;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;
&lt;br&gt;//-------------------------SCI_InStatus--------------------------
&lt;br&gt;// Checks if new input is ready, TRUE if new input is ready
&lt;br&gt;// Input: unsigned int port
&lt;br&gt;// Output: TRUE if a call to InChar will return right away with data
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FALSE if a call to InChar will wait for input
&lt;br&gt;char SCI_InStatus(unsigned int port)
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; switch(port)
&lt;br&gt;&amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; case 0:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return(SCI0SR1 &amp; RDRF);break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; case 1:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return(SCI1SR1 &amp; RDRF);break;
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;//-----------------------SCI_OutStatus----------------------------
&lt;br&gt;// Checks if output data buffer is empty, TRUE if empty
&lt;br&gt;// Input: unsigned int port
&lt;br&gt;// Output: TRUE if a call to OutChar will output and return right away
&lt;br&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FALSE if a call to OutChar will wait for output to be ready
&lt;br&gt;char SCI_OutStatus(unsigned int port)
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; switch(port)
&lt;br&gt;&amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; case 0:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return(SCI0SR1 &amp; TDRE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; case 1:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return(SCI1SR1 &amp; TDRE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;//-------------------------SCI_OutString------------------------
&lt;br&gt;// Output String (NULL termination), busy-waiting synchronization
&lt;br&gt;// Input: pointer to a NULL-terminated string to be transferred, unsigned int port
&lt;br&gt;// Output: none
&lt;br&gt;void SCI_OutString(char *pt,unsigned int port)
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; while(*pt){
&lt;br&gt;&amp;nbsp; &amp;nbsp; SCI_OutChar(*pt,port);
&lt;br&gt;&amp;nbsp; &amp;nbsp; pt++;
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;//----------------------SCI_InUDec-------------------------------
&lt;br&gt;// InUDec accepts ASCII input in unsigned decimal format
&lt;br&gt;// &amp;nbsp; &amp;nbsp; and converts to a 16 bit unsigned number
&lt;br&gt;// &amp;nbsp; &amp;nbsp; valid range is 0 to 65535
&lt;br&gt;// Input: unsigned int port
&lt;br&gt;// Output: 16-bit unsigned number
&lt;br&gt;// If you enter a number above 65535, it will truncate without an error
&lt;br&gt;// Backspace will remove last digit typed
&lt;br&gt;unsigned short SCI_InUDec(unsigned int port)
&lt;br&gt;{	
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned short number=0, length=0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; char character;
&lt;br&gt;&amp;nbsp; &amp;nbsp; character = SCI_InChar(port);	
&lt;br&gt;&amp;nbsp; &amp;nbsp; while(character!=CR) // accepts until carriage return input
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // The next line checks that the input is a digit, 0-9.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // If the character is not 0-9, it is ignored and not echoed
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if((character&amp;gt;='0') &amp;&amp; (character&amp;lt;='9')) 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; number = 10*number+(character-'0'); &amp;nbsp; // this line overflows if above 65535
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; length++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SCI_OutChar(character,port);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } 
&lt;br&gt;&amp;nbsp; &amp;nbsp; // If the input is a backspace, then the return number is
&lt;br&gt;&amp;nbsp; &amp;nbsp; // changed and a backspace is outputted to the screen
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if((character==BS) &amp;&amp; length)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; number /= 10;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; length--;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SCI_OutChar(character,port);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; character = SCI_InChar(port);	
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; return number;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;//-----------------------SCI_OutUDec-----------------------
&lt;br&gt;// Output a 16-bit number in unsigned decimal format
&lt;br&gt;// Input: 16-bit number to be transferred, unsigned int port
&lt;br&gt;// Output: none
&lt;br&gt;// Variable format 1-5 digits with no space before or after
&lt;br&gt;void SCI_OutUDec(unsigned short n,unsigned int port)
&lt;br&gt;{
&lt;br&gt;// This function uses recursion to convert decimal number
&lt;br&gt;// &amp;nbsp; of unspecified length as an ASCII string 
&lt;br&gt;&amp;nbsp; if(n &amp;gt;= 10){
&lt;br&gt;&amp;nbsp; &amp;nbsp; SCI_OutUDec(n/10,port);
&lt;br&gt;&amp;nbsp; &amp;nbsp; n = n%10;
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;&amp;nbsp; SCI_OutChar(n+'0',port); /* n is between 0 and 9 */
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;//---------------------SCI_InUHex----------------------------------------
&lt;br&gt;// Accepts ASCII input in unsigned hexadecimal (base 16) format
&lt;br&gt;// Input: unsigned int port
&lt;br&gt;// Output: 16-bit unsigned number
&lt;br&gt;// No '$' or '0x' need be entered, just the 1 to 4 hex digits
&lt;br&gt;// It will convert lower case a-f to uppercase A-F
&lt;br&gt;// &amp;nbsp; &amp;nbsp; and converts to a 16 bit unsigned number
&lt;br&gt;// &amp;nbsp; &amp;nbsp; value range is 0 to FFFF
&lt;br&gt;// If you enter a number above FFFF, it will truncate without an error
&lt;br&gt;// Backspace will remove last digit typed
&lt;br&gt;unsigned short SCI_InUHex(unsigned int port){	
&lt;br&gt;unsigned short number=0, digit, length=0;
&lt;br&gt;char character;
&lt;br&gt;&amp;nbsp; character = SCI_InChar(port);
&lt;br&gt;&amp;nbsp; while(character!=CR){	
&lt;br&gt;&amp;nbsp; &amp;nbsp; digit = 0x10; // assume bad
&lt;br&gt;&amp;nbsp; &amp;nbsp; if((character&amp;gt;='0') &amp;&amp; (character&amp;lt;='9')){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; digit = character-'0';
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; else if((character&amp;gt;='A') &amp;&amp; (character&amp;lt;='F')){ 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; digit = (character-'A')+0xA;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; else if((character&amp;gt;='a') &amp;&amp; (character&amp;lt;='f')){ 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; digit = (character-'a')+0xA;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;// If the character is not 0-9 or A-F, it is ignored and not echoed
&lt;br&gt;&amp;nbsp; &amp;nbsp; if(digit&amp;lt;=0xF ){	
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; number = number*0x10+digit;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; length++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SCI_OutChar(character,port);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;// Backspace outputted and return value changed if a backspace is inputted
&lt;br&gt;&amp;nbsp; &amp;nbsp; else if(character==BS &amp;&amp; length){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; number /=0x10;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; length--;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SCI_OutChar(character,port);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; character = SCI_InChar(port);
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;&amp;nbsp; return number;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;//--------------------------SCI_OutUHex----------------------------
&lt;br&gt;// Output a 16 bit number in unsigned hexadecimal format
&lt;br&gt;// Input: 16-bit number to be transferred, unsigned int port
&lt;br&gt;// Output: none
&lt;br&gt;// Variable format 1 to 4 digits with no space before or after
&lt;br&gt;void SCI_OutUHex(unsigned short number,unsigned int port){
&lt;br&gt;// This function uses recursion to convert the number of 
&lt;br&gt;// &amp;nbsp; unspecified length as an ASCII string
&lt;br&gt;&amp;nbsp; if(number&amp;gt;=0x10)	{
&lt;br&gt;&amp;nbsp; &amp;nbsp; SCI_OutUHex(number/0x10,port);
&lt;br&gt;&amp;nbsp; &amp;nbsp; SCI_OutUHex(number%0x10,port);
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;&amp;nbsp; else if(number&amp;lt;0xA){
&lt;br&gt;&amp;nbsp; &amp;nbsp; SCI_OutChar(number+'0',port);
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;&amp;nbsp; else{
&lt;br&gt;&amp;nbsp; &amp;nbsp; SCI_OutChar((number-0x0A)+'A',port);
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;//------------------------SCI_InString------------------------
&lt;br&gt;// This function accepts ASCII characters from the serial port
&lt;br&gt;// &amp;nbsp; &amp;nbsp;and adds them to a string until a carriage return is inputted 
&lt;br&gt;// &amp;nbsp; &amp;nbsp;or until max length of the string is reached. &amp;nbsp;
&lt;br&gt;// It echoes each character as it is inputted. &amp;nbsp;
&lt;br&gt;// If a backspace is inputted, the string is modified 
&lt;br&gt;// &amp;nbsp; &amp;nbsp;and the backspace is echoed
&lt;br&gt;// InString terminates the string with a null character
&lt;br&gt;// -- Modified by Agustinus Darmawan + Mingjie Qiu --
&lt;br&gt;&amp;nbsp;void SCI_InString(char *string,unsigned short max,unsigned int port)
&lt;br&gt;{	
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int length=0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; char character;
&lt;br&gt;&amp;nbsp; character = SCI_InChar(port);
&lt;br&gt;&amp;nbsp; while(character!=CR)
&lt;br&gt;&amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; if(character==BS)
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(length)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string--;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; length--;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SCI_OutChar(BS,port);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; else if(length&amp;lt;max)
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *string++=character;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; length++; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SCI_OutChar(character,port);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; character = SCI_InChar(port);
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;&amp;nbsp; *string = 0;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Dragon-Board-12-Serial-Communication-C-code-Help-tp26066955p26066955.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26026607</id>
	<title>Re: Re: Machine code relative offsets</title>
	<published>2009-10-23T06:37:24Z</published>
	<updated>2009-10-23T06:37:24Z</updated>
	<author>
		<name>Edward Karpicz</name>
	</author>
	<content type="html">No, rr is relative to the address of instruction (or address of the first 
&lt;br&gt;byte of instruction) that follows immediately after dbne. If we add label 
&lt;br&gt;Next like this:
&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Again &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; brclr &amp;nbsp;0,y %11110000, Not_gtr &amp;nbsp;;0F 40 F0 02
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bra &amp;nbsp; &amp;nbsp;Update &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;20 03
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Not_gtr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inc &amp;nbsp; &amp;nbsp;Count &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;72 B6 1C
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Update &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;iny &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;02
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dbne &amp;nbsp; a,Again &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;04 30 F3 &amp;nbsp; &amp;lt;--- rr = $F3 
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; = -$0D
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Next
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;swi &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;
&lt;br&gt;&lt;br&gt;, then rr will equal Next - Again. There are thirteen bytes between Again 
&lt;br&gt;and Next. rr is negative because target label is above the 'next' (Again is 
&lt;br&gt;at more lower address than Next).
&lt;br&gt;&lt;br&gt;Edward
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;----- Original Message ----- 
&lt;br&gt;From: &amp;quot;AlD&amp;quot; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26026607&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;al_delgado@...&lt;/a&gt;&amp;gt;
&lt;br&gt;To: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26026607&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Sent: Wednesday, October 21, 2009 20:39
&lt;br&gt;Subject: [68HC12] Re: Machine code relative offsets
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Thanks, do I include the byte(s) for the instruction after the dbne, in 
&lt;br&gt;&amp;gt; this case for the swi instruction or stop with the 3 bytes of the dbne?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --- In &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26026607&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;, &amp;quot;Edward Karpicz&amp;quot; &amp;lt;karpicz@...&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; rr=F3 in dbne has most significant bit set, which means rr displacement 
&lt;br&gt;&amp;gt;&amp;gt; is
&lt;br&gt;&amp;gt;&amp;gt; negative, F3 = -0D. 13 bytes from Again label to location after dbne (swi
&lt;br&gt;&amp;gt;&amp;gt; instruction).
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The rest can be found in CPU12/(S)/(SX) reference manuals.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Edward
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ----- Original Message ----- 
&lt;br&gt;&amp;gt;&amp;gt; From: &amp;quot;AlD&amp;quot; &amp;lt;al_delgado@...&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; To: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26026607&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Sent: Wednesday, October 21, 2009 11:07
&lt;br&gt;&amp;gt;&amp;gt; Subject: [68HC12] Machine code relative offsets
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;I am trying to understand how assembly is translated into machine code. 
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;I
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;understand how to get the machine coding formats but I'm not sure how to
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;calculate 'rr' in all cases. For the example below 'bra' is 20 rr or 20 
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;03,
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;I know that the relative offset is 03 (to get past the two bytes 
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;required
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;by the 'inc' instruction)to get to the 'iny' instruction.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; But I'm not sure why the rr = F3 for the 'dbne' instruction, how does 
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; that
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; relative offset get me to the Again label?
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Dissassembled code for program:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; [CODE] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;org &amp;nbsp; $600
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ldy &amp;nbsp; #Array &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;CD B6 15
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ldaa &amp;nbsp;#N &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;86 07
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;clr &amp;nbsp; &amp;nbsp;7,y &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;69 47
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Again &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; brclr &amp;nbsp;0,y %11110000, Not_gtr &amp;nbsp;;0F 40 F0 02
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bra &amp;nbsp; &amp;nbsp;Update &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;20 03
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Not_gtr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inc &amp;nbsp; &amp;nbsp;Count &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;72 B6 1C
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Update &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;iny &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;02
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dbne &amp;nbsp; a,Again &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;04 30 F3
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;swi &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Array &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fdb &amp;nbsp; 8,7,2
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; N &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; equ &amp;nbsp; 7
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Count &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rmb &amp;nbsp; 1[/CODE]
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; ------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Machine-code-relative-offsets-tp25988167p26026607.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25999191</id>
	<title>Re: xdp512 pwm issue</title>
	<published>2009-10-21T12:56:40Z</published>
	<updated>2009-10-21T12:56:40Z</updated>
	<author>
		<name>Robert-327</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I can usually muddle through on debugging issues but I can't figure this
&lt;br&gt;one out and would appreciate it if anyone has seen something similar and
&lt;br&gt;can offer some advice. In my test program the PWME bit I have set is
&lt;br&gt;getting cleared unexpectedly when I call a sci routine to read an input
&lt;br&gt;buffer. The PWME register is cleared after executing the first
&lt;br&gt;instruction of the sci routine. I'm stumped. In the following NoICE
&lt;br&gt;screen dumps you can see address 0x300 (PWME) change from 0x04 to 0x00
&lt;br&gt;after the sci call. The only thing I can think of is that the page
&lt;br&gt;switch is causing grief. My compiler is ICCV712.
&lt;br&gt;&lt;br&gt;pwm_err_0.jpg &amp;lt;&lt;a href=&quot;http://www.robmilne&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.robmilne&lt;/a&gt;&amp;nbsp;.ca/webfm_ send/50&amp;gt;
&lt;br&gt;pwm_err_1.jpg &amp;lt;&lt;a href=&quot;http://www.robmilne&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.robmilne&lt;/a&gt;&amp;nbsp;.ca/webfm_ send/51&amp;gt;
&lt;br&gt;&lt;br&gt;-rob
&lt;br&gt;&lt;br&gt;I solved this and removed the original post - I hoped the email packager
&lt;br&gt;would ignore it since it was only up for 1/2 hour. &amp;nbsp;As most bugs are in
&lt;br&gt;retrospect it was a 'stupid' bug. &amp;nbsp;I forgot that I had an ISR monitoring
&lt;br&gt;the optical encoder for no movement and it disabled the pwm (I was
&lt;br&gt;testing pwm independent of any motor feedback). &amp;nbsp;As luck would have it,
&lt;br&gt;the write to PWME coincided with a page switch.
&lt;br&gt;&lt;br&gt;&lt;br&gt;[Non-text portions of this message have been removed]
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/xdp512-pwm-issue-tp25994178p25999191.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25997047</id>
	<title>Re: Machine code relative offsets</title>
	<published>2009-10-21T10:39:55Z</published>
	<updated>2009-10-21T10:39:55Z</updated>
	<author>
		<name>a92651delgado</name>
	</author>
	<content type="html">Thanks, do I include the byte(s) for the instruction after the dbne, in this case for the swi instruction or stop with the 3 bytes of the dbne?
&lt;br&gt;&lt;br&gt;--- In &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25997047&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;, &amp;quot;Edward Karpicz&amp;quot; &amp;lt;karpicz@...&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; rr=F3 in dbne has most significant bit set, which means rr displacement is 
&lt;br&gt;&amp;gt; negative, F3 = -0D. 13 bytes from Again label to location after dbne (swi 
&lt;br&gt;&amp;gt; instruction).
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; The rest can be found in CPU12/(S)/(SX) reference manuals.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Edward
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; ----- Original Message ----- 
&lt;br&gt;&amp;gt; From: &amp;quot;AlD&amp;quot; &amp;lt;al_delgado@...&amp;gt;
&lt;br&gt;&amp;gt; To: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25997047&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sent: Wednesday, October 21, 2009 11:07
&lt;br&gt;&amp;gt; Subject: [68HC12] Machine code relative offsets
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt;I am trying to understand how assembly is translated into machine code. I 
&lt;br&gt;&amp;gt; &amp;gt;understand how to get the machine coding formats but I'm not sure how to 
&lt;br&gt;&amp;gt; &amp;gt;calculate 'rr' in all cases. For the example below 'bra' is 20 rr or 20 03, 
&lt;br&gt;&amp;gt; &amp;gt;I know that the relative offset is 03 (to get past the two bytes required 
&lt;br&gt;&amp;gt; &amp;gt;by the 'inc' instruction)to get to the 'iny' instruction.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; But I'm not sure why the rr = F3 for the 'dbne' instruction, how does that 
&lt;br&gt;&amp;gt; &amp;gt; relative offset get me to the Again label?
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Dissassembled code for program:
&lt;br&gt;&amp;gt; &amp;gt; [CODE] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;org &amp;nbsp; $600
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ldy &amp;nbsp; #Array &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;CD B6 15
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ldaa &amp;nbsp;#N &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;86 07
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;clr &amp;nbsp; &amp;nbsp;7,y &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;69 47
&lt;br&gt;&amp;gt; &amp;gt; Again &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; brclr &amp;nbsp;0,y %11110000, Not_gtr &amp;nbsp;;0F 40 F0 02
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bra &amp;nbsp; &amp;nbsp;Update &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;20 03
&lt;br&gt;&amp;gt; &amp;gt; Not_gtr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inc &amp;nbsp; &amp;nbsp;Count &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;72 B6 1C
&lt;br&gt;&amp;gt; &amp;gt; Update &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;iny &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;02
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dbne &amp;nbsp; a,Again &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;04 30 F3
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;swi &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Array &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fdb &amp;nbsp; 8,7,2
&lt;br&gt;&amp;gt; &amp;gt; N &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; equ &amp;nbsp; 7
&lt;br&gt;&amp;gt; &amp;gt; Count &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rmb &amp;nbsp; 1[/CODE]
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; ------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Machine-code-relative-offsets-tp25988167p25997047.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25994178</id>
	<title>xdp512 pwm issue</title>
	<published>2009-10-21T07:56:51Z</published>
	<updated>2009-10-21T07:56:51Z</updated>
	<author>
		<name>Robert-327</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I can usually muddle through on debugging issues but I can't figure this
&lt;br&gt;one out and would appreciate it if anyone has seen something similar and
&lt;br&gt;can offer some advice. &amp;nbsp;In my test program the PWME bit I have set is
&lt;br&gt;getting cleared unexpectedly when I call a sci routine to read an input
&lt;br&gt;buffer. &amp;nbsp; The &amp;nbsp;PWME register is cleared after executing the first
&lt;br&gt;instruction of the sci routine. &amp;nbsp;I'm stumped. &amp;nbsp;In the following &amp;nbsp;NoICE
&lt;br&gt;screen dumps you can see address 0x300 (PWME) change from 0x04 to 0x00
&lt;br&gt;after the sci call. &amp;nbsp;The only thing I can think of is that the page
&lt;br&gt;switch is causing grief. &amp;nbsp;My compiler is ICCV712.
&lt;br&gt;&lt;br&gt;pwm_err_0.jpg &amp;lt;&lt;a href=&quot;http://www.robmilne.ca/webfm_send/50&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.robmilne.ca/webfm_send/50&lt;/a&gt;&amp;gt;
&lt;br&gt;pwm_err_1.jpg &amp;lt;&lt;a href=&quot;http://www.robmilne.ca/webfm_send/51&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.robmilne.ca/webfm_send/51&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;-rob
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;[Non-text portions of this message have been removed]
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/xdp512-pwm-issue-tp25994178p25994178.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25990986</id>
	<title>Re: Counting 1's in 16 bit word</title>
	<published>2009-10-21T04:48:29Z</published>
	<updated>2009-10-21T04:48:29Z</updated>
	<author>
		<name>Nicholas Merriam</name>
	</author>
	<content type="html">&lt;a href=&quot;http://graphics.stanford.edu/~seander/bithacks.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://graphics.stanford.edu/~seander/bithacks.html&lt;/a&gt;&amp;nbsp;
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://graphics.stanford.edu/%7Eseander/bithacks.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://graphics.stanford.edu/%7Eseander/bithacks.html&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Dr. Nicholas Merriam
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25990986&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;nmerriam@...&lt;/a&gt;
&lt;br&gt;~|~|~ &amp;nbsp; Rapita Systems Ltd.
&lt;br&gt;&lt;a href=&quot;http://www.rapitasystems.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.rapitasystems.com/&lt;/a&gt;&lt;br&gt;Tel: +44 (0)1904 56 7747 &amp;nbsp; &amp;nbsp; &amp;nbsp;Fax: +44 (0)1904 56 7719
&lt;br&gt;&lt;br&gt;Visit Rapita Systems at MAE09 (Military &amp; Aerospace Electronics).
&lt;br&gt;November 10th 2009 (Reading, UK)
&lt;br&gt;&lt;a href=&quot;http://www.RapitaSystems.com/events/MAE09&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.RapitaSystems.com/events/MAE09&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Counting-1%27s-in-16-bit-word-tp25983912p25990986.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25988959</id>
	<title>RE: Machine code relative offsets</title>
	<published>2009-10-21T02:06:04Z</published>
	<updated>2009-10-21T02:06:04Z</updated>
	<author>
		<name>Redd, Emmett R-2</name>
	</author>
	<content type="html">The inc instruction is 3 bytes. &amp;nbsp;Yes, rr = F3 for the dbne instruction is correct.
&lt;br&gt;&lt;br&gt;A formula which might help: &amp;nbsp;PCnew = PCbranch + len(branch) + rr
&lt;br&gt;&lt;br&gt;Or learn to count forwards and backwards in hexadecimal with zero being the first byte of the instruction after the branch.
&lt;br&gt;&lt;br&gt;Emmett Redd Ph.D. &amp;nbsp; mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25988959&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;EmmettRedd@...&lt;/a&gt;
&lt;br&gt;Professor &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; (417)836-5221
&lt;br&gt;Department of Physics, Astronomy, and Materials Science
&lt;br&gt;Missouri State University &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fax (417)836-6226
&lt;br&gt;901 SOUTH NATIONAL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Lab (417)836-3770
&lt;br&gt;SPRINGFIELD, MO &amp;nbsp;65897 &amp;nbsp; USA &amp;nbsp; &amp;nbsp;Dept (417)836-5131
&lt;br&gt;&lt;br&gt;&amp;quot;In theory there is no difference between theory and practice. In practice there is.&amp;quot; -- Yogi Berra or Jan van de Snepscheut
&lt;br&gt;&lt;br&gt;________________________________________
&lt;br&gt;From: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25988959&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt; [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25988959&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;] On Behalf Of AlD [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25988959&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;al_delgado@...&lt;/a&gt;]
&lt;br&gt;Sent: Wednesday, October 21, 2009 3:07 AM
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25988959&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;
&lt;br&gt;Subject: [68HC12] Machine code relative offsets
&lt;br&gt;&lt;br&gt;I am trying to understand how assembly is translated into machine code. I understand how to get the machine coding formats but I'm not sure how to calculate 'rr' in all cases. For the example below 'bra' is 20 rr or 20 03, I know that the relative offset is 03 (to get past the two bytes required by the 'inc' instruction)to get to the 'iny' instruction.
&lt;br&gt;&lt;br&gt;But I'm not sure why the rr = F3 for the 'dbne' instruction, how does that relative offset get me to the Again label?
&lt;br&gt;&lt;br&gt;&lt;br&gt;Dissassembled code for program:
&lt;br&gt;[CODE] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;org &amp;nbsp; $600
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ldy &amp;nbsp; #Array &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;CD B6 15
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ldaa &amp;nbsp;#N &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;86 07
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; clr &amp;nbsp; &amp;nbsp;7,y &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;69 47
&lt;br&gt;Again &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; brclr &amp;nbsp;0,y %11110000, Not_gtr &amp;nbsp;;0F 40 F0 02
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bra &amp;nbsp; &amp;nbsp;Update &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;20 03
&lt;br&gt;Not_gtr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inc &amp;nbsp; &amp;nbsp;Count &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;72 B6 1C
&lt;br&gt;Update &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;iny &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;02
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dbne &amp;nbsp; a,Again &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;04 30 F3
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; swi &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;
&lt;br&gt;&lt;br&gt;Array &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fdb &amp;nbsp; 8,7,2
&lt;br&gt;N &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; equ &amp;nbsp; 7
&lt;br&gt;Count &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rmb &amp;nbsp; 1[/CODE]
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;------------------------------------
&lt;br&gt;&lt;br&gt;Yahoo! Groups Links
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://docs.yahoo.com/info/terms/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://docs.yahoo.com/info/terms/&lt;/a&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Machine-code-relative-offsets-tp25988167p25988959.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25988706</id>
	<title>Re: Machine code relative offsets</title>
	<published>2009-10-21T01:49:28Z</published>
	<updated>2009-10-21T01:49:28Z</updated>
	<author>
		<name>Edward Karpicz</name>
	</author>
	<content type="html">rr=F3 in dbne has most significant bit set, which means rr displacement is 
&lt;br&gt;negative, F3 = -0D. 13 bytes from Again label to location after dbne (swi 
&lt;br&gt;instruction).
&lt;br&gt;&lt;br&gt;The rest can be found in CPU12/(S)/(SX) reference manuals.
&lt;br&gt;&lt;br&gt;Edward
&lt;br&gt;&lt;br&gt;&lt;br&gt;----- Original Message ----- 
&lt;br&gt;From: &amp;quot;AlD&amp;quot; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25988706&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;al_delgado@...&lt;/a&gt;&amp;gt;
&lt;br&gt;To: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25988706&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Sent: Wednesday, October 21, 2009 11:07
&lt;br&gt;Subject: [68HC12] Machine code relative offsets
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;I am trying to understand how assembly is translated into machine code. I 
&lt;br&gt;&amp;gt;understand how to get the machine coding formats but I'm not sure how to 
&lt;br&gt;&amp;gt;calculate 'rr' in all cases. For the example below 'bra' is 20 rr or 20 03, 
&lt;br&gt;&amp;gt;I know that the relative offset is 03 (to get past the two bytes required 
&lt;br&gt;&amp;gt;by the 'inc' instruction)to get to the 'iny' instruction.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; But I'm not sure why the rr = F3 for the 'dbne' instruction, how does that 
&lt;br&gt;&amp;gt; relative offset get me to the Again label?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Dissassembled code for program:
&lt;br&gt;&amp;gt; [CODE] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;org &amp;nbsp; $600
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ldy &amp;nbsp; #Array &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;CD B6 15
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ldaa &amp;nbsp;#N &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;86 07
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;clr &amp;nbsp; &amp;nbsp;7,y &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;69 47
&lt;br&gt;&amp;gt; Again &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; brclr &amp;nbsp;0,y %11110000, Not_gtr &amp;nbsp;;0F 40 F0 02
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bra &amp;nbsp; &amp;nbsp;Update &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;20 03
&lt;br&gt;&amp;gt; Not_gtr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inc &amp;nbsp; &amp;nbsp;Count &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;72 B6 1C
&lt;br&gt;&amp;gt; Update &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;iny &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;02
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dbne &amp;nbsp; a,Again &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;04 30 F3
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;swi &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Array &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fdb &amp;nbsp; 8,7,2
&lt;br&gt;&amp;gt; N &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; equ &amp;nbsp; 7
&lt;br&gt;&amp;gt; Count &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rmb &amp;nbsp; 1[/CODE]
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Machine-code-relative-offsets-tp25988167p25988706.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25988167</id>
	<title>Machine code relative offsets</title>
	<published>2009-10-21T01:07:10Z</published>
	<updated>2009-10-21T01:07:10Z</updated>
	<author>
		<name>a92651delgado</name>
	</author>
	<content type="html">I am trying to understand how assembly is translated into machine code. I understand how to get the machine coding formats but I'm not sure how to calculate 'rr' in all cases. For the example below 'bra' is 20 rr or 20 03, I know that the relative offset is 03 (to get past the two bytes required by the 'inc' instruction)to get to the 'iny' instruction. 
&lt;br&gt;&lt;br&gt;But I'm not sure why the rr = F3 for the 'dbne' instruction, how does that relative offset get me to the Again label?
&lt;br&gt;&lt;br&gt;&lt;br&gt;Dissassembled code for program:
&lt;br&gt;[CODE] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;org &amp;nbsp; $600 &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ldy &amp;nbsp; #Array &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;CD B6 15
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ldaa &amp;nbsp;#N &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;86 07
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; clr &amp;nbsp; &amp;nbsp;7,y &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;69 47
&lt;br&gt;Again &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; brclr &amp;nbsp;0,y %11110000, Not_gtr &amp;nbsp;;0F 40 F0 02
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bra &amp;nbsp; &amp;nbsp;Update &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;20 03
&lt;br&gt;Not_gtr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inc &amp;nbsp; &amp;nbsp;Count &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;72 B6 1C
&lt;br&gt;Update &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;iny &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;02
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dbne &amp;nbsp; a,Again &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;04 30 F3
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; swi &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; 
&lt;br&gt;&lt;br&gt;Array &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fdb &amp;nbsp; 8,7,2 &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; 
&lt;br&gt;N &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; equ &amp;nbsp; 7
&lt;br&gt;Count &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rmb &amp;nbsp; 1[/CODE]
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Machine-code-relative-offsets-tp25988167p25988167.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25986328</id>
	<title>Re: Counting 1's in 16 bit word</title>
	<published>2009-10-20T21:15:00Z</published>
	<updated>2009-10-20T21:15:00Z</updated>
	<author>
		<name>Andrei Chichak-2</name>
	</author>
	<content type="html">Ah, clever, I like the != 0 trick. You must be from Oregon.
&lt;br&gt;&lt;br&gt;Did you notice the bug in the Spanish code?
&lt;br&gt;&lt;br&gt;A
&lt;br&gt;&lt;br&gt;&lt;br&gt;On 2009-October-20, at 10:09 PM, Tom Almy wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; No, there is a fundamental difference -- your algorithm (and Angel
&lt;br&gt;&amp;gt; Castillo's) iterate 16 times, while mine only iterates while the value
&lt;br&gt;&amp;gt; is non-zero.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'm also sure that AID is a student (students are most likely to ask
&lt;br&gt;&amp;gt; questions like this), so I went no further than suggesting an &amp;nbsp;
&lt;br&gt;&amp;gt; approach.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Tom Almy
&lt;br&gt;&amp;gt; Tualatin, Oregon USA
&lt;br&gt;&amp;gt; Internet: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25986328&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Website: almy.us
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Oct 20, 2009, at 7:46 PM, Andrei Chichak wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; That's what I said.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; BTW, don't let on that this is for a course or people will get &amp;nbsp;
&lt;br&gt;&amp;gt; really
&lt;br&gt;&amp;gt; &amp;gt; rude, tell you to read the book, and complain that they aren't &amp;nbsp;
&lt;br&gt;&amp;gt; getting
&lt;br&gt;&amp;gt; &amp;gt; a portion of your marks.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; A
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; On 2009-October-20, at 7:19 PM, Tom Almy wrote:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Try this:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; 1. Set count to 0
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; 2, Shift value right
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; 3. if carry flag set increment count
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; 4. if value is non-zero, go back to step 2
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Tom Almy
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Tualatin, Oregon USA
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Internet: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25986328&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Website: almy.us
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; On Oct 20, 2009, at 3:55 PM, AlD wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I am trying to count the number of 1's in a sixteen bit word for
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; MC68HC12. The only way I can think of is to use 16 BITA
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; instructions, one for each bit location, then increment a &amp;nbsp;
&lt;br&gt;&amp;gt; counter. I
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; suspect there is a more elegant way to do this. Could someone &amp;nbsp;
&lt;br&gt;&amp;gt; share
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; their ideas with me.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; ------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; ---------------------
&lt;br&gt;&amp;gt; &amp;gt; Andrei Chichak
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Systems Developer
&lt;br&gt;&amp;gt; &amp;gt; CBF Systems Inc.
&lt;br&gt;&amp;gt; &amp;gt; 4-038 NINT Innovation Centre
&lt;br&gt;&amp;gt; &amp;gt; 11421 Saskatchewan Drive
&lt;br&gt;&amp;gt; &amp;gt; Edmonton, Alberta
&lt;br&gt;&amp;gt; &amp;gt; Canada
&lt;br&gt;&amp;gt; &amp;gt; T6G 2M9
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Phone: 780-628-2072
&lt;br&gt;&amp;gt; &amp;gt; Skype: andrei.chichak
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; [Non-text portions of this message have been removed]
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; ------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;---------------------
&lt;br&gt;Andrei Chichak
&lt;br&gt;&lt;br&gt;Systems Developer
&lt;br&gt;CBF Systems Inc.
&lt;br&gt;4-038 NINT Innovation Centre
&lt;br&gt;11421 Saskatchewan Drive
&lt;br&gt;Edmonton, Alberta
&lt;br&gt;Canada
&lt;br&gt;T6G 2M9
&lt;br&gt;&lt;br&gt;Phone: 780-628-2072
&lt;br&gt;Skype: andrei.chichak
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;[Non-text portions of this message have been removed]
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Counting-1%27s-in-16-bit-word-tp25983912p25986328.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25986249</id>
	<title>Re: Counting 1's in 16 bit word</title>
	<published>2009-10-20T21:09:09Z</published>
	<updated>2009-10-20T21:09:09Z</updated>
	<author>
		<name>Tom Almy</name>
	</author>
	<content type="html">No, there is a fundamental difference -- your algorithm (and Angel &amp;nbsp;
&lt;br&gt;Castillo's) iterate 16 times, while mine only iterates while the value &amp;nbsp;
&lt;br&gt;is non-zero.
&lt;br&gt;&lt;br&gt;I'm also sure that AID is a student (students are most likely to ask &amp;nbsp;
&lt;br&gt;questions like this), so I went no further than suggesting an approach.
&lt;br&gt;&lt;br&gt;Tom Almy
&lt;br&gt;Tualatin, Oregon USA
&lt;br&gt;Internet: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25986249&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt;
&lt;br&gt;Website: almy.us
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;On Oct 20, 2009, at 7:46 PM, Andrei Chichak wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; That's what I said.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; BTW, don't let on that this is for a course or people will get really
&lt;br&gt;&amp;gt; rude, tell you to read the book, and complain that they aren't getting
&lt;br&gt;&amp;gt; a portion of your marks.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; A
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On 2009-October-20, at 7:19 PM, Tom Almy wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Try this:
&lt;br&gt;&amp;gt;&amp;gt; 1. Set count to 0
&lt;br&gt;&amp;gt;&amp;gt; 2, Shift value right
&lt;br&gt;&amp;gt;&amp;gt; 3. if carry flag set increment count
&lt;br&gt;&amp;gt;&amp;gt; 4. if value is non-zero, go back to step 2
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Tom Almy
&lt;br&gt;&amp;gt;&amp;gt; Tualatin, Oregon USA
&lt;br&gt;&amp;gt;&amp;gt; Internet: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25986249&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; Website: almy.us
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Oct 20, 2009, at 3:55 PM, AlD wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I am trying to count the number of 1's in a sixteen bit word for
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; MC68HC12. The only way I can think of is to use 16 BITA
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; instructions, one for each bit location, then increment a counter. I
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; suspect there is a more elegant way to do this. Could someone share
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; their ideas with me.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ------------------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------
&lt;br&gt;&amp;gt; Andrei Chichak
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Systems Developer
&lt;br&gt;&amp;gt; CBF Systems Inc.
&lt;br&gt;&amp;gt; 4-038 NINT Innovation Centre
&lt;br&gt;&amp;gt; 11421 Saskatchewan Drive
&lt;br&gt;&amp;gt; Edmonton, Alberta
&lt;br&gt;&amp;gt; Canada
&lt;br&gt;&amp;gt; T6G 2M9
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Phone: 780-628-2072
&lt;br&gt;&amp;gt; Skype: andrei.chichak
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; [Non-text portions of this message have been removed]
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Counting-1%27s-in-16-bit-word-tp25983912p25986249.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25985671</id>
	<title>Re: Counting 1's in 16 bit word</title>
	<published>2009-10-20T19:46:18Z</published>
	<updated>2009-10-20T19:46:18Z</updated>
	<author>
		<name>Andrei Chichak-2</name>
	</author>
	<content type="html">That's what I said.
&lt;br&gt;&lt;br&gt;BTW, don't let on that this is for a course or people will get really &amp;nbsp;
&lt;br&gt;rude, tell you to read the book, and complain that they aren't getting &amp;nbsp;
&lt;br&gt;a portion of your marks.
&lt;br&gt;&lt;br&gt;A
&lt;br&gt;&lt;br&gt;On 2009-October-20, at 7:19 PM, Tom Almy wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Try this:
&lt;br&gt;&amp;gt; 1. Set count to 0
&lt;br&gt;&amp;gt; 2, Shift value right
&lt;br&gt;&amp;gt; 3. if carry flag set increment count
&lt;br&gt;&amp;gt; 4. if value is non-zero, go back to step 2
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Tom Almy
&lt;br&gt;&amp;gt; Tualatin, Oregon USA
&lt;br&gt;&amp;gt; Internet: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25985671&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Website: almy.us
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Oct 20, 2009, at 3:55 PM, AlD wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; I am trying to count the number of 1's in a sixteen bit word for
&lt;br&gt;&amp;gt; &amp;gt; MC68HC12. The only way I can think of is to use 16 BITA
&lt;br&gt;&amp;gt; &amp;gt; instructions, one for each bit location, then increment a counter. I
&lt;br&gt;&amp;gt; &amp;gt; suspect there is a more elegant way to do this. Could someone share
&lt;br&gt;&amp;gt; &amp;gt; their ideas with me.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; ------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;---------------------
&lt;br&gt;Andrei Chichak
&lt;br&gt;&lt;br&gt;Systems Developer
&lt;br&gt;CBF Systems Inc.
&lt;br&gt;4-038 NINT Innovation Centre
&lt;br&gt;11421 Saskatchewan Drive
&lt;br&gt;Edmonton, Alberta
&lt;br&gt;Canada
&lt;br&gt;T6G 2M9
&lt;br&gt;&lt;br&gt;Phone: 780-628-2072
&lt;br&gt;Skype: andrei.chichak
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;[Non-text portions of this message have been removed]
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Counting-1%27s-in-16-bit-word-tp25983912p25985671.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25985270</id>
	<title>Re: Counting 1's in 16 bit word</title>
	<published>2009-10-20T18:39:06Z</published>
	<updated>2009-10-20T18:39:06Z</updated>
	<author>
		<name>a92651delgado</name>
	</author>
	<content type="html">Great, just what I was looking for, makes sense.
&lt;br&gt;&lt;br&gt;--- In &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25985270&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;, Angel Castillo &amp;lt;eltachonder@...&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; si el dato a evaluar esta en el doble acumlador D
&lt;br&gt;&amp;gt; y el coneo de unos en Ix
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ldx &amp;nbsp;#00
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ldy &amp;nbsp;#08
&lt;br&gt;&amp;gt; ciclo &amp;nbsp; &amp;nbsp; &amp;nbsp;lsrd
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bcc &amp;nbsp;cero
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inx
&lt;br&gt;&amp;gt; cero &amp;nbsp; &amp;nbsp; &amp;nbsp; dey
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bne &amp;nbsp;ciclo
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 2009/10/20 AlD &amp;lt;al_delgado@...&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; I am trying to count the number of 1's in a sixteen bit word for MC68HC12.
&lt;br&gt;&amp;gt; &amp;gt; The only way I can think of is to use 16 BITA instructions, one for each bit
&lt;br&gt;&amp;gt; &amp;gt; location, then increment a counter. I suspect there is a more elegant way to
&lt;br&gt;&amp;gt; &amp;gt; do this. Could someone share their ideas with me.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; ------------------------------------
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; [Non-text portions of this message have been removed]
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Counting-1%27s-in-16-bit-word-tp25983912p25985270.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25985154</id>
	<title>Re: Counting 1's in 16 bit word</title>
	<published>2009-10-20T18:19:38Z</published>
	<updated>2009-10-20T18:19:38Z</updated>
	<author>
		<name>Tom Almy</name>
	</author>
	<content type="html">Try this:
&lt;br&gt;1. Set count to 0
&lt;br&gt;2, Shift value right
&lt;br&gt;3. if carry flag set increment count
&lt;br&gt;4. if value is non-zero, go back to step 2
&lt;br&gt;&lt;br&gt;Tom Almy
&lt;br&gt;Tualatin, Oregon USA
&lt;br&gt;Internet: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25985154&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt;
&lt;br&gt;Website: almy.us
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;On Oct 20, 2009, at 3:55 PM, AlD wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I am trying to count the number of 1's in a sixteen bit word for &amp;nbsp;
&lt;br&gt;&amp;gt; MC68HC12. The only way I can think of is to use 16 BITA &amp;nbsp;
&lt;br&gt;&amp;gt; instructions, one for each bit location, then increment a counter. I &amp;nbsp;
&lt;br&gt;&amp;gt; suspect there is a more elegant way to do this. Could someone share &amp;nbsp;
&lt;br&gt;&amp;gt; their ideas with me.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Counting-1%27s-in-16-bit-word-tp25983912p25985154.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25984798</id>
	<title>Re: Counting 1's in 16 bit word</title>
	<published>2009-10-20T17:44:55Z</published>
	<updated>2009-10-20T17:44:55Z</updated>
	<author>
		<name>a92651delgado</name>
	</author>
	<content type="html">Thanks, but I'm just learning assembly so I have to do it in assembly, any ideas?
&lt;br&gt;&lt;br&gt;--- In &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25984798&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;68HC12@...&lt;/a&gt;, Andrei Chichak &amp;lt;groups@...&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; INT8U i, count;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; count = 0;
&lt;br&gt;&amp;gt; for (i = 0; i &amp;lt; 16; i++) {
&lt;br&gt;&amp;gt; 	if ((val %2) != 0) {
&lt;br&gt;&amp;gt; 		count++;
&lt;br&gt;&amp;gt; 	}
&lt;br&gt;&amp;gt; 	val &amp;gt;&amp;gt; 1;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Paid programmers have a budget of 50 lines of assembly. I wouldn't &amp;nbsp;
&lt;br&gt;&amp;gt; blow my budget on something as simple as this.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; A
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; On 2009-October-20, at 4:55 PM, AlD wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; I am trying to count the number of 1's in a sixteen bit word for &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; MC68HC12. The only way I can think of is to use 16 BITA &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; instructions, one for each bit location, then increment a counter. I &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; suspect there is a more elegant way to do this. Could someone share &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; their ideas with me.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; ---------------------
&lt;br&gt;&amp;gt; Andrei Chichak
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Systems Developer
&lt;br&gt;&amp;gt; CBF Systems Inc.
&lt;br&gt;&amp;gt; 4-038 NINT Innovation Centre
&lt;br&gt;&amp;gt; 11421 Saskatchewan Drive
&lt;br&gt;&amp;gt; Edmonton, Alberta
&lt;br&gt;&amp;gt; Canada
&lt;br&gt;&amp;gt; T6G 2M9
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Phone: 780-628-2072
&lt;br&gt;&amp;gt; Skype: andrei.chichak
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; [Non-text portions of this message have been removed]
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Counting-1%27s-in-16-bit-word-tp25983912p25984798.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25984690</id>
	<title>Re: Counting 1's in 16 bit word</title>
	<published>2009-10-20T17:34:45Z</published>
	<updated>2009-10-20T17:34:45Z</updated>
	<author>
		<name>eltachonder</name>
	</author>
	<content type="html">si el dato a evaluar esta en el doble acumlador D
&lt;br&gt;y el coneo de unos en Ix
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ldx &amp;nbsp;#00
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ldy &amp;nbsp;#08
&lt;br&gt;ciclo &amp;nbsp; &amp;nbsp; &amp;nbsp;lsrd
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bcc &amp;nbsp;cero
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inx
&lt;br&gt;cero &amp;nbsp; &amp;nbsp; &amp;nbsp; dey
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bne &amp;nbsp;ciclo
&lt;br&gt;&lt;br&gt;&lt;br&gt;2009/10/20 AlD &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25984690&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;al_delgado@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I am trying to count the number of 1's in a sixteen bit word for MC68HC12.
&lt;br&gt;&amp;gt; The only way I can think of is to use 16 BITA instructions, one for each bit
&lt;br&gt;&amp;gt; location, then increment a counter. I suspect there is a more elegant way to
&lt;br&gt;&amp;gt; do this. Could someone share their ideas with me.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;[Non-text portions of this message have been removed]
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Counting-1%27s-in-16-bit-word-tp25983912p25984690.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25983996</id>
	<title>Re: Counting 1's in 16 bit word</title>
	<published>2009-10-20T16:04:35Z</published>
	<updated>2009-10-20T16:04:35Z</updated>
	<author>
		<name>Andrei Chichak-2</name>
	</author>
	<content type="html">INT8U i, count;
&lt;br&gt;&lt;br&gt;count = 0;
&lt;br&gt;for (i = 0; i &amp;lt; 16; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((val %2) != 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; count++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; val &amp;gt;&amp;gt; 1;
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;Paid programmers have a budget of 50 lines of assembly. I wouldn't &amp;nbsp;
&lt;br&gt;blow my budget on something as simple as this.
&lt;br&gt;&lt;br&gt;A
&lt;br&gt;&lt;br&gt;&lt;br&gt;On 2009-October-20, at 4:55 PM, AlD wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; I am trying to count the number of 1's in a sixteen bit word for &amp;nbsp;
&lt;br&gt;&amp;gt; MC68HC12. The only way I can think of is to use 16 BITA &amp;nbsp;
&lt;br&gt;&amp;gt; instructions, one for each bit location, then increment a counter. I &amp;nbsp;
&lt;br&gt;&amp;gt; suspect there is a more elegant way to do this. Could someone share &amp;nbsp;
&lt;br&gt;&amp;gt; their ideas with me.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;---------------------
&lt;br&gt;Andrei Chichak
&lt;br&gt;&lt;br&gt;Systems Developer
&lt;br&gt;CBF Systems Inc.
&lt;br&gt;4-038 NINT Innovation Centre
&lt;br&gt;11421 Saskatchewan Drive
&lt;br&gt;Edmonton, Alberta
&lt;br&gt;Canada
&lt;br&gt;T6G 2M9
&lt;br&gt;&lt;br&gt;Phone: 780-628-2072
&lt;br&gt;Skype: andrei.chichak
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;[Non-text portions of this message have been removed]
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Counting-1%27s-in-16-bit-word-tp25983912p25983996.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25983912</id>
	<title>Counting 1's in 16 bit word</title>
	<published>2009-10-20T15:55:46Z</published>
	<updated>2009-10-20T15:55:46Z</updated>
	<author>
		<name>a92651delgado</name>
	</author>
	<content type="html">I am trying to count the number of 1's in a sixteen bit word for MC68HC12. The only way I can think of is to use 16 BITA instructions, one for each bit location, then increment a counter. I suspect there is a more elegant way to do this. Could someone share their ideas with me.
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Counting-1%27s-in-16-bit-word-tp25983912p25983912.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25786675</id>
	<title>update on free HCS12(X) tools</title>
	<published>2009-10-07T06:28:18Z</published>
	<updated>2009-10-07T06:28:18Z</updated>
	<author>
		<name>mculater12</name>
	</author>
	<content type="html">Greetings from Technological Arts! &amp;nbsp;I'd like to let everyone in the HCS12(X) community know about several free development tools that have been released recently. &amp;nbsp;This announcement will be especially interesting to those who are not using C or assembler.
&lt;br&gt;&lt;br&gt;Several months ago, programmer David Armstrong released a FIG-Forth compiler and IDE for the 9S12XDP (&lt;a href=&quot;http://mamoru.tbreesama.googlepages.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mamoru.tbreesama.googlepages.com/&lt;/a&gt;). &amp;nbsp;In the process of developing it, Dave ported the Serial Monitor of Freescale AN2548 to the 9S12XDP512, and created an enhanced version of our free Windows-hosted uBug12x user interface, supporting loading and simple debugging functions. &amp;nbsp;Both the Serial Monitor and uBug12x are available from &lt;a href=&quot;http://support.technologicalarts.ca/docs/Adapt9S12X/Code/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://support.technologicalarts.ca/docs/Adapt9S12X/Code/&lt;/a&gt;. &amp;nbsp;The uBug12x manual is available here: &amp;nbsp;&lt;a href=&quot;http://www.technologicalarts.ca/shop/documentation/63-debugging-tools/132-ubug12x-user-manual.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.technologicalarts.ca/shop/documentation/63-debugging-tools/132-ubug12x-user-manual.html&lt;/a&gt;. Dave also worked with Dirk Heisswolf to enhance his HC(S)12 IDE for Linux, found here: &amp;nbsp;&lt;a href=&quot;http://home.arcor.de/hotwolf/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://home.arcor.de/hotwolf/&lt;/a&gt;&amp;nbsp; I think special recognition should go to both Dave and Dirk for all the effort they have put into perfecting these excellent tools!
&lt;br&gt;&lt;br&gt;Several years ago, when Freescale was about to launch the 9S12C family, we commissioned GenerExe (creator of XPad tools: &amp;nbsp;a &amp;quot;design, simulation, programming, documentation suite&amp;quot; for HC11 and other MCUs) to develop an object-based multi-tasking programming language for the Freescale MOD912C32 (the 32-pin DIP module that we developed-- &amp;nbsp;now called NanoCore12). &amp;nbsp;Unfortunately, due to other obligations, that software development went on the proverbial &amp;quot;back burner&amp;quot;. &amp;nbsp;However, we have now decided to make it freely available to 9S12C users, on www.nqBASIC.com. &amp;nbsp;We hope you'll find it useful!
&lt;br&gt;&lt;br&gt;Another recent development is an MCU-resident BASIC programming environment created by Rich Testardi. &amp;nbsp;Rich was 2nd-place winner in Freescale's &amp;quot;Can Your Badge Do This?&amp;quot; contest last year. &amp;nbsp;Over the past few months, we have worked extensively with Rich to port his StickOS BASIC to run on 9S12DP512, and make a number of enhancements. &amp;nbsp;We have dubbed the 9S12 version soBASIC, and it can be found at www.soBASICsoEasy.com.
&lt;br&gt;&lt;br&gt;Finally, in February of this year, Frank Voorburg, of Feaser LLC, released a port of the open-source Eclipse IDE for HC11 &amp; HC12 GNU C/C++. &amp;nbsp;It can be found at &lt;a href=&quot;http://www.feaser.com/store/eclipse_m6811.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.feaser.com/store/eclipse_m6811.php&lt;/a&gt;&lt;br&gt;&lt;br&gt;As we have been for the past 15 years, Technological Arts is still committed to supporting the HC11/HCS12(X) user community. &amp;nbsp;Your comments and suggestions are always welcome!
&lt;br&gt;&lt;br&gt;Best regards,
&lt;br&gt;Carl Barnes
&lt;br&gt;www.technologicalarts.com
&lt;br&gt;Evaluate * Educate * Embed
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/update-on-free-HCS12%28X%29-tools-tp25786675p25786675.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25746133</id>
	<title>SPI Communication between TMS470 and MC9S08SG16/32</title>
	<published>2009-10-05T00:18:57Z</published>
	<updated>2009-10-05T00:18:57Z</updated>
	<author>
		<name>rajeshkatari</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I am new to this embedded field and i need a basic idea on this.
&lt;br&gt;Let me explain my requirment....My main Micro is TMS470 and Slave MC9S08SG I need to flash an Image from Main Micro to Slave using SPI protocol.
&lt;br&gt;&lt;br&gt;Please help me how to proceed any share ur ideas with me...
&lt;br&gt;&lt;br&gt;Thanks,</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SPI-Communication-between-TMS470-and-MC9S08SG16-32-tp25746133p25746133.html" />
</entry>

</feed>
