<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3027206085468016848</id><updated>2024-09-02T02:20:08.463+05:00</updated><title type='text'>MicroController 4 All</title><subtitle type='html'>You will get information about 89c51 microcontroller,and projects.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3027206085468016848.post-8719647160349533949</id><published>2010-07-28T09:53:00.001+05:00</published><updated>2010-07-28T10:13:14.980+05:00</updated><title type='text'>Session 5 : 8051 Addressing Modes</title><content type='html'>• Register addressing &lt;br /&gt;
• Immediate addressing &lt;br /&gt;
• Direct addressing &lt;br /&gt;
• Register-indirect addressing &lt;br /&gt;
• Indexed addressing&lt;br /&gt;
• Implicit addressing &lt;br /&gt;
• Bit addressing&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;Addressing mode = Way of specifying operand&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
1. An instruction consists of&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Opcode (e.g., ADD, MOV,...) ~function &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Operand(s) (e.g., R3, #23H,...) ~ parameter&lt;br /&gt;
2. Where is the (value of) operand located?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o part of the instruction (immediate) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o in data memory (direct, indirect, indexed) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o in register; also, in a bit of a register/pin&lt;br /&gt;
&lt;br /&gt;
Review: Register&lt;br /&gt;
&lt;br /&gt;
1. 8-bit registers&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o General purpose: R0, R1,... R7 &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Special function: A, B, PSW, SP, I/O ports...&lt;br /&gt;
2. 16-bit registers&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o DPTR (=DPH, DPL) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o PC is not an addressable register though&lt;br /&gt;
3. However! &quot;Register addressing mode&quot; refers to General Purpose one ONLY (R0..R7)&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;&quot;Assembly&quot; vs &quot;Machine code&quot; addressing mode&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
1. Book often assumes assembly-level &lt;br /&gt;
2. Strictly speaking, should be machine code representation of operand &lt;br /&gt;
3. Example: &quot;register addressing mode&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Machine level: R0...R7 only &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Assembly level: incl. all 8-bit reg, 16-bit&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt;actually those are &quot;direct mode&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;Register addressing mode 8051&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
• Encoded as part of the instruction byte &lt;br /&gt;
• A is implicitly addressed; Rxxx is explicit&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcFAhKLpPGzHEIPRnLt1hAwGmIW-1fuArfjv5sQANOYK5n_TZLV7-6lIVv1VOInIk3Zebj6_auNtEeIsPudpvbwxAHlBoec8CcvS61vqKxSZEVHtVJzw7rvMyv0rLGuxUcB6g-C23iEmji/s1600/sentbl51.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;125&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcFAhKLpPGzHEIPRnLt1hAwGmIW-1fuArfjv5sQANOYK5n_TZLV7-6lIVv1VOInIk3Zebj6_auNtEeIsPudpvbwxAHlBoec8CcvS61vqKxSZEVHtVJzw7rvMyv0rLGuxUcB6g-C23iEmji/s200/sentbl51.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Immediate Addressing&lt;/span&gt;&lt;br /&gt;
• Immediate comes from &quot;data value immediately follows the opcode byte&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Meaning: constant value in an instruction &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Example:&lt;br /&gt;
Green part: immediate&lt;br /&gt;
Blue part : register&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIvtZnneKpKdTM8cpvnJ6GBZiHHkDDz-a-wGoZ5s9_nMr0c365xZ7bME2UfqCb3pOYgP5QKFqTxbxIT8CnP5ACTGH1TZaidJu7Or0LuS0YF78O18ROL9S7zonZMvB9riIXTEsRM-nXhae0/s1600/sentbl52.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;108&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIvtZnneKpKdTM8cpvnJ6GBZiHHkDDz-a-wGoZ5s9_nMr0c365xZ7bME2UfqCb3pOYgP5QKFqTxbxIT8CnP5ACTGH1TZaidJu7Or0LuS0YF78O18ROL9S7zonZMvB9riIXTEsRM-nXhae0/s320/sentbl52.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;Immediate may be multiple bytes&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
1. Example: MOV imm to the 16-b data pointer&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o MOV DPTR, #2550H ;; 2-byte immediate &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o code is 3-bytes; 90 25 50 &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o DPTR is implicit&lt;br /&gt;
2. Assembler checks constant range&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o MOV DPTR, #68975 ;; causes asm error &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o #68975 is too large to fit in 2 bytes&lt;br /&gt;
&lt;br /&gt;
Assembler label may be an immediate value&lt;br /&gt;
MOV DPTR, #Label&lt;br /&gt;
...&lt;br /&gt;
Label: DB &quot;Hello world&quot;&lt;br /&gt;
• The #Label part represents the address of the Label after the assembler determines its value &lt;br /&gt;
• fits the size of DPTR&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;Direct addressing&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
• Direct = address of operand&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o on-chip memory &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Also mapped to general &amp;amp; special registers &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o pointer in a separate byte, like immediates&lt;br /&gt;
• Usage: when you name a register not as R0...R7, but everything else that&#39;s addressable&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o e.g., PSW, SP, I/O ports, DPH, DPL, address constant (as a label or constant)&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;Register vs Immediate vs direct addressing&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
• meaning of MOV A,0: take content at on-chip memory addr 0, copy it into the Accumulator&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg0HdGTosKYwS5AppvAxJ7m-fySwU3OPPnpR9BWj8xMGInKTvz9iUx1t5NHOYnQJkLyxVQLsuzZhfzj5xoBbuTucS61qO-xvxLrkliwrROh-zVzz0pf8oeYiPu3V29G1m5WNxtQYarFapj/s1600/sentbl53.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg0HdGTosKYwS5AppvAxJ7m-fySwU3OPPnpR9BWj8xMGInKTvz9iUx1t5NHOYnQJkLyxVQLsuzZhfzj5xoBbuTucS61qO-xvxLrkliwrROh-zVzz0pf8oeYiPu3V29G1m5WNxtQYarFapj/s320/sentbl53.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;Subtle difference betw. Reg &amp;amp; Direct mode&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
1. MOV A, 0 ;;Direct mode =&amp;gt; 2 bytes&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o at on-chip address 0, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o mapped to R0 of bank 0 (four banks total)&lt;br /&gt;
2. MOV A, R0 ;;register mode =1 bytes!&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o register R0 of current bank &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o does not have to be bank zero!. Depends on PSW.3 and PSW.4&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;Special function registers&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
• Located at address &amp;gt;= 80H, up to FFH&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Also for Timer, Interrupt control, Serial port, Power control (not shown in table) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Not all addresses are used&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrANfDl5XE54BVeWFjeYzfTkP3WAJzQKPpV0lLC-sk1zpC5gn3ULwJh3fK1zbchsdsZo9rpZ08q9qrIbn2UsktbiMSxOEue3xPXXsQLyfxcKxumvqQnH7BUcrfBgoPxVXV3edFgLwSd7QT/s1600/sentbl54.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;128&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrANfDl5XE54BVeWFjeYzfTkP3WAJzQKPpV0lLC-sk1zpC5gn3ULwJh3fK1zbchsdsZo9rpZ08q9qrIbn2UsktbiMSxOEue3xPXXsQLyfxcKxumvqQnH7BUcrfBgoPxVXV3edFgLwSd7QT/s320/sentbl54.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;Implicit vs explicit direct addressing&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
• Accumulator has explicit address (E0H) &lt;br /&gt;
• Two ways: same functionality, but different encoding! &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioATviDdFBFnSVHPH4erB9mJSa4hvWrDwnFlw6HEPzvi-qsmsWc9K9Ployi4-Z5qJpkDKAAT90kBnOjOgpf6vjl0b-_PNNF8pEV5Qy5Rhl7dZxSdUPxWYt8Yhxp8fetNBQCsWlYHSf9yjp/s1600/sentbl55.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;128&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioATviDdFBFnSVHPH4erB9mJSa4hvWrDwnFlw6HEPzvi-qsmsWc9K9Ployi4-Z5qJpkDKAAT90kBnOjOgpf6vjl0b-_PNNF8pEV5Qy5Rhl7dZxSdUPxWYt8Yhxp8fetNBQCsWlYHSf9yjp/s320/sentbl55.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;More example of implicit vs explicit:&lt;/span&gt;&lt;br /&gt;
• MOV DPTR, #2550H ;;3bytes&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o This is implicit addressing for DPTR (DPTR does not have a direct address!)&lt;br /&gt;
• MOV DPL, #50H ;;3bytes&lt;br /&gt;
&amp;nbsp;&amp;nbsp;MOV DPH, #25H ;;3bytes&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o DPL, DPH are explicitly direct addressing =&amp;gt; each requires 1 bytes &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o #50H, #25H each requires 1 byte&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Implicit VS direct mode example cont&#39;d&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbFdxuc_E_9QeYK9rm96i4s2N4nLIpBFzWTpmrOYTdTA9UwoKcoYfPMNezB6B89W8maTEO7vchaWbSFkA2VBWgcIe9q0y2dGTU_CDzmWZa0b0vz102kDjdmh5EFKSRpxV9JJkehyoVYFnE/s1600/sentbl56.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;115&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbFdxuc_E_9QeYK9rm96i4s2N4nLIpBFzWTpmrOYTdTA9UwoKcoYfPMNezB6B89W8maTEO7vchaWbSFkA2VBWgcIe9q0y2dGTU_CDzmWZa0b0vz102kDjdmh5EFKSRpxV9JJkehyoVYFnE/s320/sentbl56.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Limited combinations of addressing modes&lt;/span&gt;&lt;br /&gt;
• The opcode dictates operand&#39;s addr. modes&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Assembly mnemonic may look the same, but they may be different opcodes&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzjmAkn_NMyDzwzvPWaVcqIGeTtOW568vXz-jK17PXvvpk5XEffpIdenPeUp2foOvwkVxtMVf7Q9MWohR_nu-C-RvbdrkdzRMo-7JbrUitKwSqqnwj1xfwH9pTLFglC3kBAzzyTKk9udwl/s1600/sentbl57.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzjmAkn_NMyDzwzvPWaVcqIGeTtOW568vXz-jK17PXvvpk5XEffpIdenPeUp2foOvwkVxtMVf7Q9MWohR_nu-C-RvbdrkdzRMo-7JbrUitKwSqqnwj1xfwH9pTLFglC3kBAzzyTKk9udwl/s320/sentbl57.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Disallowed addr. mode combinations&lt;/span&gt;&lt;br /&gt;
• Register-to-register MOV&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o e.g., MOV R1, R2 &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o solution: go through A or use immediate&lt;br /&gt;
• Accumulator to Accumulator MOV (useless) &lt;br /&gt;
• anything-to-immediate MOV (nonsense)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o e.g., MOV #20, R3&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Addressing mode of PUSH/POP: direct mode&lt;/span&gt;&lt;br /&gt;
• Syntax:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o PUSH dir ;; push val at dir to stack&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POP dir;; pop value to mem at dir &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Explicit: dir ;; on-chip mem location &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Implicit: SP (stack pointer)&lt;br /&gt;
• Example&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o PUSH 05 ;; on-chip addr = 05&lt;br /&gt;
Cannot say PUSH R5 ;; register mode&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Restrictions and Workarounds&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8KAczD-vkNHQ3S8fGg7YMAUbBUFy8aXz9ncDxYyjLXfFgItvA401Sc6rZPtUKII41BBiK_wG2euo1iSyXnenHZwM65t1WIUZX5xtWof5c_nSEQgDxUs5HZt5EKUx2Kx86Mi6CyTVxK16Y/s1600/sentbl58.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;91&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8KAczD-vkNHQ3S8fGg7YMAUbBUFy8aXz9ncDxYyjLXfFgItvA401Sc6rZPtUKII41BBiK_wG2euo1iSyXnenHZwM65t1WIUZX5xtWof5c_nSEQgDxUs5HZt5EKUx2Kx86Mi6CyTVxK16Y/s200/sentbl58.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• COL 3 : PUSH, POP are available only in direct mode &lt;br /&gt;
• Another idiosyncrasy of assembler: it could just translate&lt;br /&gt;
&amp;nbsp; A =&amp;gt;0E 0H,&lt;br /&gt;
&amp;nbsp; B =&amp;gt;0F 0H&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Direct addressing VS indirect addressing&lt;/span&gt;&lt;br /&gt;
• Direct addressing (e.g, MOV A, 02)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Pointer to operand is part of instruction (i.e., constant pointer, single-byte) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o example here: pointer = 02, 0n-chip memory&lt;br /&gt;
• ( Register ) Indirect (e.g., MOV A, @R0&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Pointer to the operand value is found inside R0 or R1 (i.e., variable pointer) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o example here: pointer is found in R0&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Register addressing vs Register-indirect addr&lt;/span&gt;&lt;br /&gt;
• Register addressing (e.g., MOV A, R1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o R1 contains the operand value&lt;br /&gt;
• Register-indirect addressing (MOV A, @R1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o R1 contains the pointer to operand value.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.g., if R1 contains 20H, then operand is at on-chip memory address 20H&lt;br /&gt;
• R2,...R7 cannot be used with @&lt;br /&gt;
&lt;br /&gt;
Example: Register vs Indirect mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copying constant to array: (1) direct&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-55DYYWFU0JbORGtb_iJi95j4PuO_YJAWQLj2bSO6JlgY0m5_5nAuvj8pJeXQFWCnd2Paz4ru0boY45uEnYF465zMf_bg9VFSeajldv9ZjezuhCYf74AWCloBWlBKRdnjuXyJKMNBPU6x/s1600/sentbl59.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-55DYYWFU0JbORGtb_iJi95j4PuO_YJAWQLj2bSO6JlgY0m5_5nAuvj8pJeXQFWCnd2Paz4ru0boY45uEnYF465zMf_bg9VFSeajldv9ZjezuhCYf74AWCloBWlBKRdnjuXyJKMNBPU6x/s320/sentbl59.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copying constant to array: (2) indirect&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvnmhQbC8ozQSRIYYGFzH66S8rjRwmL2s0MTLoGcN0nXl7ceNFzQbAWq35WM9mbfxhVCalnT-WYvMWmo1kYdjYqBbrPsazQabtlNo97LM6aeqVMkPmSm6ITggDYqS15aqjTQ27KKAfLcyq/s1600/sentbl510.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvnmhQbC8ozQSRIYYGFzH66S8rjRwmL2s0MTLoGcN0nXl7ceNFzQbAWq35WM9mbfxhVCalnT-WYvMWmo1kYdjYqBbrPsazQabtlNo97LM6aeqVMkPmSm6ITggDYqS15aqjTQ27KKAfLcyq/s320/sentbl510.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copying constant to array: (3) indirect + loop&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhte7qJIk6OkuE6SWEwdCNxFlVJXhXKFYIKxvIIWXd7S4lGv_3V36l7hyo7CYRxWq4vguVwnnsgATrskJPaTFQfWR06VUUdxCs_LZWJCycRN0rperMkBD-8vUXZN1Qvo9kSIa46GCumHHhZ/s1600/sentbl511.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhte7qJIk6OkuE6SWEwdCNxFlVJXhXKFYIKxvIIWXd7S4lGv_3V36l7hyo7CYRxWq4vguVwnnsgATrskJPaTFQfWR06VUUdxCs_LZWJCycRN0rperMkBD-8vUXZN1Qvo9kSIa46GCumHHhZ/s320/sentbl511.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: clear 16-byte array at address 60H&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8SMUabRPy_njldnGbYICsoF91bqLirxI-Sdf9VVIi5DoCRMpDgWuFG7-v0rdNKce3_4PetOcYZnDLLic4YlilO1k9TeikJNkR7ZdInB714bAHH1dmjOjBefdL1TwWMK3_Udp_DDlP1kco/s1600/sentbl512.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8SMUabRPy_njldnGbYICsoF91bqLirxI-Sdf9VVIi5DoCRMpDgWuFG7-v0rdNKce3_4PetOcYZnDLLic4YlilO1k9TeikJNkR7ZdInB714bAHH1dmjOjBefdL1TwWMK3_Udp_DDlP1kco/s320/sentbl512.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example : loop 10 bytes *p++ = *q++;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhab4rEs3Z9FwCr1dnGmeC3WQUuojnoDat1xoadKu_PUan9P6javc7u8B143bONJoJUBddiFVXQ4GBILUJvbhLOonnJ9L9HSrYTByCkUXF0-gANmNpw6knyi5-qbUrVPVwPwCyWpFqS5vCz/s1600/sentbl513.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhab4rEs3Z9FwCr1dnGmeC3WQUuojnoDat1xoadKu_PUan9P6javc7u8B143bONJoJUBddiFVXQ4GBILUJvbhLOonnJ9L9HSrYTByCkUXF0-gANmNpw6knyi5-qbUrVPVwPwCyWpFqS5vCz/s320/sentbl513.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Limitations of reg. indir. addressing in 8051&lt;/span&gt;&lt;br /&gt;
• For on-chip RAM only (1-byte pointer)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o 30H-7FH, SFR namely 80H -FFH &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Limited to R0 and R1 as pointers&lt;br /&gt;
• External RAM or on-chip ROM&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o need to use DPTR (2-byte pointer)&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Indexed Addressing Mode&lt;/span&gt;&lt;br /&gt;
• Index: array access&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Base address is in DPTR &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Index (offset) is in A&lt;br /&gt;
• Instruction in the form ;; regs are all implicit&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o MOVC A, @A + DPTR &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o C means &quot;code memory&quot;&lt;br /&gt;
• Meaning: A=DPTR [A];&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Example LooKup Table: x-ssquared&lt;/span&gt;&lt;br /&gt;
• INT TAble []={0, 1, 4, 9, 16, 25, 36, 49, 64, 81};&lt;br /&gt;
&amp;nbsp;&amp;nbsp;for (;;) {P2 = Table [P1];} &lt;br /&gt;
• Assembly: Statically initialized array is DB:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Table: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 &lt;br /&gt;
• Use DPTR for base pointer to Table:&lt;br /&gt;
&amp;nbsp;&amp;nbsp; MOV DPTR, #Table &lt;br /&gt;
• Lookup is&lt;br /&gt;
&amp;nbsp;&amp;nbsp; MOV A, P1 ;;P1 as index&lt;br /&gt;
&amp;nbsp;&amp;nbsp; MOVC A,@+DPTR ;;base +index&lt;br /&gt;
&lt;br /&gt;
Program: write P2 = P1**2 continuosly&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg62FXdGk9Uszuq07DmkA88hGleCqUMevgSo1LrL-cDNJ0GUCfgoiKj4IKx94cyKgRRkBplMu-FeyaTuLq1iHkcCBjKEcft7RjqcmkVLbn72lR2gfhHRImKtDijUomx9hO8JFDzZAEav0XN/s1600/sentbl514.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; hw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg62FXdGk9Uszuq07DmkA88hGleCqUMevgSo1LrL-cDNJ0GUCfgoiKj4IKx94cyKgRRkBplMu-FeyaTuLq1iHkcCBjKEcft7RjqcmkVLbn72lR2gfhHRImKtDijUomx9hO8JFDzZAEav0XN/s320/sentbl514.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;MOVC vs MOVX&lt;/span&gt;&lt;br /&gt;
• Both use 16-bit pointers &lt;br /&gt;
• MOVC: C= &quot;code&quot; space &lt;br /&gt;
• MOVX: X=&quot;external&quot; data space &lt;br /&gt;
• Harvard architecture:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o separate code/data. e.g., 8051&lt;br /&gt;
• &quot;Princeton&quot; architecture:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o integrated code/data memory&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Bit Addressing Mode&lt;/span&gt;&lt;br /&gt;
• Ability to specify a bit&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Normally, address are for bytes&lt;br /&gt;
• Bit addressable areas&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o on-chip RAM at (byte-address) 20H--2FH each bit has a bit-address!&lt;br /&gt;
• I/0 ports P0...P3: 80H, 90H, A0H, B0H &lt;br /&gt;
• SFR: TCON, SCON, IE, IP, PSW, A, B, ACC</content><link rel='replies' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/8719647160349533949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3027206085468016848/8719647160349533949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/8719647160349533949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/8719647160349533949'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/2010/07/session-5-8051-addressing-modes.html' title='Session 5 : 8051 Addressing Modes'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcFAhKLpPGzHEIPRnLt1hAwGmIW-1fuArfjv5sQANOYK5n_TZLV7-6lIVv1VOInIk3Zebj6_auNtEeIsPudpvbwxAHlBoec8CcvS61vqKxSZEVHtVJzw7rvMyv0rLGuxUcB6g-C23iEmji/s72-c/sentbl51.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3027206085468016848.post-2756447859374279221</id><published>2010-07-14T13:24:00.001+05:00</published><updated>2010-07-14T13:32:51.525+05:00</updated><title type='text'>Session 4: I/O Port Programming</title><content type='html'>• General-purpose I/O ports &lt;br /&gt;
• Address/Data ports &lt;br /&gt;
• Dual role of P0,P2&lt;br /&gt;
• InterruptsBit/byte addressable &lt;br /&gt;
• IC TechnologiesFour I/O port&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeylaFh6Ea0X4zLLnzqnPr4UuI8Xz4-xXtUZW15EA06AE196qFhGB-aCik_vXgkIZkT2JMsc16tOaaSrawLDXdJtNyQKd7JB-1zbzydyHDWe5y0Z0vS1c82N2cBbS2tPWhfjhj8Q5aoXPc/s1600/Input+Output+Programming.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeylaFh6Ea0X4zLLnzqnPr4UuI8Xz4-xXtUZW15EA06AE196qFhGB-aCik_vXgkIZkT2JMsc16tOaaSrawLDXdJtNyQKd7JB-1zbzydyHDWe5y0Z0vS1c82N2cBbS2tPWhfjhj8Q5aoXPc/s320/Input+Output+Programming.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• 8-bits each P0, P1, P2, P3 &lt;br /&gt;
• Ports are like registers &lt;br /&gt;
• Difference: value tied to the pins &lt;br /&gt;
• Bit addressable&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;What does a port look like?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJGiL6_oGal8fmh97Qu1IS_Hnbmqesg6wtOz-pZfFc8Y-XJkegS7E64WMOY3vDWjqL8MtXQiM-MxgkFLkWYQmxVUDoUMIchb5YiKl8x5RaD_Jc2o9oG1kuM7I0xDNLoCWCkJfqmU-2LgIs/s1600/sen40.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJGiL6_oGal8fmh97Qu1IS_Hnbmqesg6wtOz-pZfFc8Y-XJkegS7E64WMOY3vDWjqL8MtXQiM-MxgkFLkWYQmxVUDoUMIchb5YiKl8x5RaD_Jc2o9oG1kuM7I0xDNLoCWCkJfqmU-2LgIs/s320/sen40.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
1. Register tied to pin &lt;br /&gt;
2. Open collector output &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o P0 has no internal pull up &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o P1, P2, P3 have internal pull-up&lt;br /&gt;
3. Bit addressable and Byte addressable\&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Output: Write to port register&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
1. Byte access&lt;br /&gt;
P1.7&amp;nbsp; P1.6&amp;nbsp; P1.5&amp;nbsp; P1.4&amp;nbsp; P1.3&amp;nbsp; P1.2&amp;nbsp; P1.1&amp;nbsp; P1.0&lt;br /&gt;
&lt;br /&gt;
2. P1.7 is Most significant bit&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; P1.0 is Least significant bit&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 1 0 1&amp;nbsp;&amp;nbsp; 1 1 1 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o MOV P1, #05EH&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Big-endian bit order&lt;br /&gt;
&lt;br /&gt;
3. Bit access&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o SETB P1.1 ;;sets port 1 bit 1 &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o CLR P2.3 ;; clears port 2 bit 3&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;for exampel in 7-Segment LED&lt;/span&gt;&lt;br /&gt;
• To write &quot;0&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; MOV P2, #7B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;; 0111 1011&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivjj2W3dYzgIcNsUEiijBFtMcEaGhDliIPDBgxXyvJubCC7vEOpVu_CJgFw3HdROw4nO-jtNll1kpIwiJOHOFNnSldSkHFpojbM5shEweQ26gHW06S5MbbrPHOb2x2MuKTcScHweSbslLJ/s1600/sen41.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivjj2W3dYzgIcNsUEiijBFtMcEaGhDliIPDBgxXyvJubCC7vEOpVu_CJgFw3HdROw4nO-jtNll1kpIwiJOHOFNnSldSkHFpojbM5shEweQ26gHW06S5MbbrPHOb2x2MuKTcScHweSbslLJ/s320/sen41.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• To Write &quot;2&quot;&lt;br /&gt;
&amp;nbsp; MOV P2, #3D&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;; 0011 1101&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_iaf0nvemp6JvRnSYorV_NoD1E0bXAJZTLCWdpXCa6yuy4vtionfYb-AZ83nh3iHVTn8uixEJFSj6dZRlklInql6vXQDlVZBK3VaYOdttS8y8aW9dooR4jb4Jv2lby5Ay6gL5li6kwRdL/s1600/sen42.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_iaf0nvemp6JvRnSYorV_NoD1E0bXAJZTLCWdpXCa6yuy4vtionfYb-AZ83nh3iHVTn8uixEJFSj6dZRlklInql6vXQDlVZBK3VaYOdttS8y8aW9dooR4jb4Jv2lby5Ay6gL5li6kwRdL/s320/sen42.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Input: reading from pins&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
1. Read pin value, not port-register value!! &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o MOV A, P3 ;;read P3 pins, assign to A&lt;br /&gt;
2. Actually, pin &amp;amp; port may have different values&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o A gets updated, but P3 register unchanged!&lt;br /&gt;
3. How to configure a port to input or output?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Actually, it always outputs!&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Set port register to i if you want input!&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;example joystick input&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8cnCsimDku0l53oC7SkvUPwXSqC8Xb1YOdjnCDtntUqO3WW2GZLdYyfKFaE_KFvuv3yWqeOrHgKzUdRj3LrCHcNhaU4WGgME5Ovzg7o6blNGhu01n5yDz6ZTcqIR171K8QccYtQzE3ABO/s1600/sen43.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;125&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8cnCsimDku0l53oC7SkvUPwXSqC8Xb1YOdjnCDtntUqO3WW2GZLdYyfKFaE_KFvuv3yWqeOrHgKzUdRj3LrCHcNhaU4WGgME5Ovzg7o6blNGhu01n5yDz6ZTcqIR171K8QccYtQzE3ABO/s200/sen43.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. First, P3 register should be 1111 1111&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Power-up default&lt;br /&gt;
2. Read P3 as a byte&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o MOV A, P3&lt;br /&gt;
3. Read sigle bit (e.g up)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o MOV C, P3.0&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Conflict between port register and pin&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH15tdzm7hf8sH896_fbiUb_P3WrD5hGIIOpoM-aNQ9kYi6p2icF_ko9s0nTzXF01zawxpL9CQrWO2uXouoytZvZSrtsRAsMcrGzKNe01vbU3g6onawZZHlus_IFwYDI0z7fUYXgxZoyjh/s1600/sen44.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH15tdzm7hf8sH896_fbiUb_P3WrD5hGIIOpoM-aNQ9kYi6p2icF_ko9s0nTzXF01zawxpL9CQrWO2uXouoytZvZSrtsRAsMcrGzKNe01vbU3g6onawZZHlus_IFwYDI0z7fUYXgxZoyjh/s200/sen44.png&quot; width=&quot;185&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Register outputs 1 when input &lt;br /&gt;
2. Pin may input 0 or 1 &lt;br /&gt;
3. Isn&#39;t this a short circuit?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Actually, no &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o input should &quot;win&quot;&lt;br /&gt;
4. Solution: open collector/open drain &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o &quot;weak 1&quot; (overridable), &quot;hard 0&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Bipolar vs MOS Transistors&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
Transistors are power controlled switches control signal=base or gate&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSl9hLsx6Ic1fZvniHC8nEDsb5HO-uyfI7QFxBthIk707xLRFKGMx9UlUAAoCNjoP1TzjheFlV23PcGF_jsEJrYku0H7gVwNfuCHtsd8Bymdecvr1TG9NO1FceQpKTZEUl2M0IdADrk_aa/s1600/sen45.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;92&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSl9hLsx6Ic1fZvniHC8nEDsb5HO-uyfI7QFxBthIk707xLRFKGMx9UlUAAoCNjoP1TzjheFlV23PcGF_jsEJrYku0H7gVwNfuCHtsd8Bymdecvr1TG9NO1FceQpKTZEUl2M0IdADrk_aa/s200/sen45.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Open collector/Open drain output&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
1. Off= connect to ground (0V) &lt;br /&gt;
2. On= &quot;disconnect&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Actually, &quot;high impedance&quot; (R2)&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl7smj7FkRb6_P8OV6dvzJJNKJ9m_pP_MRNIPR4K2wk-waCKaX4uGoMCGylMCxOJM4Kbfps-Af4jPGW1k6ocHJs5b89g4iKuPY52PwuWWIUkpCMwmOP9VWgmpFahCjK9_JIUjgetRKzHoB/s1600/sen46.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl7smj7FkRb6_P8OV6dvzJJNKJ9m_pP_MRNIPR4K2wk-waCKaX4uGoMCGylMCxOJM4Kbfps-Af4jPGW1k6ocHJs5b89g4iKuPY52PwuWWIUkpCMwmOP9VWgmpFahCjK9_JIUjgetRKzHoB/s200/sen46.png&quot; width=&quot;162&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Voltage divider&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o Vpin = Vcc * R2/(R1/R2) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; o When R2&amp;gt;&amp;gt;R1, Vpin~~VCC&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;When R2= 0, Vpin~~0&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiem-w_93R-JfO52eewtX2KwI3W0iS-dyBrixjVqKAOqWEMArM5f16xsS-4RrlUZTQ75AqKdQmNnDxNexv7UZnaHZ1PEFWrQx_s3k5Uy9oVIzVnjFt5wg3DPMxCplzur3lRSIxLoUB-c9jm/s1600/sen47.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiem-w_93R-JfO52eewtX2KwI3W0iS-dyBrixjVqKAOqWEMArM5f16xsS-4RrlUZTQ75AqKdQmNnDxNexv7UZnaHZ1PEFWrQx_s3k5Uy9oVIzVnjFt5wg3DPMxCplzur3lRSIxLoUB-c9jm/s200/sen47.png&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Input value resolution&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
• Input pin = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o No conflict (register also pullup - 1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt;read value = 1&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh5pFicZSizXznz9OENOq9_lM_buHmBrZ9I-i3z5TmERV41G3xj0f4BEvt0QnN66QTuOau7ggwbkn6RVPaTJiHrO_UA6GLpevyZGR5NvTDHXsWYBF1fGz_l74fc9RmpsKEI2FwAT4TNEyt/s1600/sen48.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh5pFicZSizXznz9OENOq9_lM_buHmBrZ9I-i3z5TmERV41G3xj0f4BEvt0QnN66QTuOau7ggwbkn6RVPaTJiHrO_UA6GLpevyZGR5NvTDHXsWYBF1fGz_l74fc9RmpsKEI2FwAT4TNEyt/s200/sen48.jpg&quot; width=&quot;158&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• Input pin = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o register: pull-up to R1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Vpin is pulled low by outside device &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o R1 (10Kohm) draws current a price to pay, but logic works&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMYZ1Db0LkXUsDIQJ3WE6DVae85OJcdYunlPZIKSN4q_v1oiruJeZmh-4XcZFk2t3SWnkoNGH1e50JyKAZMROU9bxlKctTdNewEAo-R10naozKMIq3imZgejRchTmxMpLDxyH05eo7-JW2/s1600/sen49.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMYZ1Db0LkXUsDIQJ3WE6DVae85OJcdYunlPZIKSN4q_v1oiruJeZmh-4XcZFk2t3SWnkoNGH1e50JyKAZMROU9bxlKctTdNewEAo-R10naozKMIq3imZgejRchTmxMpLDxyH05eo7-JW2/s200/sen49.jpg&quot; width=&quot;133&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Structure of Port P1&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;Reading a High value at input&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAULII3I85cDunrcI7B3PhQTXZ28IlgTvrhy_5uVnfKky04NfBtskOavEabjoRraVPydB0Jb7wkeEPQqcuBg3MlcloIT9rdeICDOlYkjT46Qf_PWUyL910pmWqR-3b2bz-ttyhSQJp0bqW/s1600/sen410.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;96&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAULII3I85cDunrcI7B3PhQTXZ28IlgTvrhy_5uVnfKky04NfBtskOavEabjoRraVPydB0Jb7wkeEPQqcuBg3MlcloIT9rdeICDOlYkjT46Qf_PWUyL910pmWqR-3b2bz-ttyhSQJp0bqW/s200/sen410.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;Reading a Low value at Input pin&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Czu3h2sDvzIicj6VAi7Lfnmn1G_TTDfF5_YyqKmsTYAQAxmUyml8Fo2Vc1jkSsfhq_n_Hw62yTRw_g3V8iFC4JxsMRImZ3ewcTBapn_Jxxv5RxAzXDnfOvGnz6T2pqB6_yoInTQSA8EF/s1600/sen411.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;88&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Czu3h2sDvzIicj6VAi7Lfnmn1G_TTDfF5_YyqKmsTYAQAxmUyml8Fo2Vc1jkSsfhq_n_Hw62yTRw_g3V8iFC4JxsMRImZ3ewcTBapn_Jxxv5RxAzXDnfOvGnz6T2pqB6_yoInTQSA8EF/s200/sen411.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Port P0 is different from other I/0 ports&lt;/span&gt;&lt;br /&gt;
• No internal pull-up&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Ok as input&lt;br /&gt;
• Output --watch out!&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o 0 is a real, hard zero &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o 1 is a fake 1 (disconnect!)&lt;br /&gt;
• Solution&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Add external pull-up resistors&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmpWlIdmy51QGLCz_xt6XpKpUCDRcp8CGhmS2uf5oEFhwXIXKE-gBOt0aYjzDuhXHojPC_hBsVkCq3jaX6oalNVsb9FK2I26GjI455a51WylMDxGlYy0r_dkmmxENLflpsM08OGL5Gfo8I/s1600/sen413.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;161&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmpWlIdmy51QGLCz_xt6XpKpUCDRcp8CGhmS2uf5oEFhwXIXKE-gBOt0aYjzDuhXHojPC_hBsVkCq3jaX6oalNVsb9FK2I26GjI455a51WylMDxGlYy0r_dkmmxENLflpsM08OGL5Gfo8I/s200/sen413.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;Structure of Port P0&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE32sDPB1vACN0CeGYGGvfTcwRUR24DeiP-EkikdcVA5jOgw8tQ9RijdGMxSp8cUlpMWXon7Haj9bnioD6d_yVLPqb5d72xDEWm73DyXeMiJAbubCya0IdeEiXY-SVaKAH0o_hUA6arh9T/s1600/sen414.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;137&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE32sDPB1vACN0CeGYGGvfTcwRUR24DeiP-EkikdcVA5jOgw8tQ9RijdGMxSp8cUlpMWXon7Haj9bnioD6d_yVLPqb5d72xDEWm73DyXeMiJAbubCya0IdeEiXY-SVaKAH0o_hUA6arh9T/s320/sen414.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Reasons for externalizing pullup&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYXq8eCpi6-w-r-71-TruHf7G1240nGa7iXx2sIUzAWDYxb0F7SrFxW2_i4Lhrag5D9p0OLPK6TBxh65x5VL9Q5Y8vodZybEgmggZuhed4quTfB_auYPm71eZu24sxE-HIaSDsAubUBepE/s1600/sen415.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYXq8eCpi6-w-r-71-TruHf7G1240nGa7iXx2sIUzAWDYxb0F7SrFxW2_i4Lhrag5D9p0OLPK6TBxh65x5VL9Q5Y8vodZybEgmggZuhed4quTfB_auYPm71eZu24sxE-HIaSDsAubUBepE/s320/sen415.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• Bus connection &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Multiple microcontrollers &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Bus pull-up, each MCU open collector &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o &quot;wired-AND&quot; -- any zero pulls down bus&lt;br /&gt;
• Why not use built-in pull-up? &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Could be too many pull-ups! &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Pull-up too strong =&amp;gt; hard to get clean 0&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Example use of output with external pullup&lt;/span&gt;&lt;br /&gt;
• E.g., an LED&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Turn on when voltage difference &amp;gt; .7V &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o I/O port voltage may be too high! &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Voltage divider =&amp;gt; better matches voltage&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioJ5tzqe7sS7SPWCXYa5C6EwxeKSH5JPTEsR_aB5arQs0WyKn6tgf_gu-ELK6FFybRPxq5RPOqXRoF98Qdsa6JS2phUSChwsbLQYuiQjOCQOw-rXOz4ZnbgugvjTL6BqKSg6QHnGfex2KY/s1600/sen416.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioJ5tzqe7sS7SPWCXYa5C6EwxeKSH5JPTEsR_aB5arQs0WyKn6tgf_gu-ELK6FFybRPxq5RPOqXRoF98Qdsa6JS2phUSChwsbLQYuiQjOCQOw-rXOz4ZnbgugvjTL6BqKSg6QHnGfex2KY/s200/sen416.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• External pull-up voltage may be higher than MCU&#39;s output voltage&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Easy to &quot;source&quot; (&quot;consume&quot;) current&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;What if port register bit = 0 during input?&lt;/span&gt;&lt;br /&gt;
• Could potentially short circuit!&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o If input wire is tied to Vcc&lt;br /&gt;
• Solution: Always use pull-up&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw_koPChznYMKJc3QmSDx-I6GyNN-OnHoAvcK06-urED0PNn_-WjfO7SmTmwQRVddBIZ2Cis7EVHTZ4Z6xSssAQzEBABLKS3wrSB-TKB_7UCIsRIbvQhL_ccNKtiwZ92BCRFA-s1l9Yhnn/s1600/sen417.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw_koPChznYMKJc3QmSDx-I6GyNN-OnHoAvcK06-urED0PNn_-WjfO7SmTmwQRVddBIZ2Cis7EVHTZ4Z6xSssAQzEBABLKS3wrSB-TKB_7UCIsRIbvQhL_ccNKtiwZ92BCRFA-s1l9Yhnn/s320/sen417.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Three ways to avoid short circuit in input&lt;/span&gt;&lt;br /&gt;
• input switch with resistive pull-up &lt;br /&gt;
• input switch to ground &lt;br /&gt;
• input switch with a tristate&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFUC_pM1TLqq0llAAm7g9e3HOvyuJ3sNwHXq_HMPTLLcxQVxZH6Umz7lCG497JuCpxYpGpOkgteDQ3_lNyS8Nidr7dcNyv3Iz8SoeKa30znq1tdbgLT0Nh6Zlgatw0Ue3FsCcuYoreM-9z/s1600/sen418.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFUC_pM1TLqq0llAAm7g9e3HOvyuJ3sNwHXq_HMPTLLcxQVxZH6Umz7lCG497JuCpxYpGpOkgteDQ3_lNyS8Nidr7dcNyv3Iz8SoeKa30znq1tdbgLT0Nh6Zlgatw0Ue3FsCcuYoreM-9z/s320/sen418.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Alternative uses of P0, P2 pins&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaMj5LBOA4Mx3fv4IkGZUkjwPPVY-3Ve2yaJb7s8n0lM7q4xJzcEMpFBNosZ2mf9GBhZwWaeMd6V2rkQOXZ2c3ouhHUuVscMOMU58J01bng2fE9MZKKlTHIPwlKt-shIjGplwZAe7Z-ldF/s1600/sen419.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaMj5LBOA4Mx3fv4IkGZUkjwPPVY-3Ve2yaJb7s8n0lM7q4xJzcEMpFBNosZ2mf9GBhZwWaeMd6V2rkQOXZ2c3ouhHUuVscMOMU58J01bng2fE9MZKKlTHIPwlKt-shIjGplwZAe7Z-ldF/s320/sen419.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• For external memory &lt;br /&gt;
• P0 or AD0.. AD7&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o address/data &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o address : out &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o data : in/out&lt;br /&gt;
• P2 or A15.. A8&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o address: out&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Alternative Uses of P3 pins&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHAMk4Re3MddH2V5qRTVMDdhH989I6axhZrKVzoNikuDPUPV0CIEVtx1KTcJ4KEv5iHzjw-dbLVjSafsapJNcNtRm7IZTcZK7UEBEXzpdC3HBTQRhtHMPB5SD-rGCjfAGPjsJrDWye27TT/s1600/sen420.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHAMk4Re3MddH2V5qRTVMDdhH989I6axhZrKVzoNikuDPUPV0CIEVtx1KTcJ4KEv5iHzjw-dbLVjSafsapJNcNtRm7IZTcZK7UEBEXzpdC3HBTQRhtHMPB5SD-rGCjfAGPjsJrDWye27TT/s320/sen420.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• For peripheral interface&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o RxD, TxD: serial port &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o INT0, INT11: interrupt &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o T0, T1: timers &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o WR, RD: memory&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Example 4-1: toggle all bits every 1/4 second&lt;/span&gt;&lt;br /&gt;
ORG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
BACK:&lt;br /&gt;
MOV&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A, #55&lt;br /&gt;
MOV&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; P0, A&lt;br /&gt;
MOV&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; P1, A&lt;br /&gt;
ACALL&amp;nbsp; QSDELAY&lt;br /&gt;
MOV&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A, #AAH&lt;br /&gt;
MOV&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; P0, A&lt;br /&gt;
MOV&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; P1, A&lt;br /&gt;
ACALL&amp;nbsp; QSDELAY&lt;br /&gt;
SJMP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BACK&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Timing control&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
• Q: How much to delay for &quot;every 1/4&quot;?&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Delay takes effect relative to the ACALL &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o ACALL, SJMP, other overhead not handled&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6QuhiOKzLBxgspO58H8EkdBlvJxv-4WxX0zZt0NNf1Zomtq6F5oSxbJP99CizQHlbmQ2E5cucSnOmJ5wcbrFBlchYiRPZc8W8r5q0AuTAmsP65x3nF8eU4N52JKR_8t5qiqU0AqaUP6cf/s1600/sen421.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;84&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6QuhiOKzLBxgspO58H8EkdBlvJxv-4WxX0zZt0NNf1Zomtq6F5oSxbJP99CizQHlbmQ2E5cucSnOmJ5wcbrFBlchYiRPZc8W8r5q0AuTAmsP65x3nF8eU4N52JKR_8t5qiqU0AqaUP6cf/s320/sen421.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;I/o bit manipulation&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
• Use bit instructions&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o CPL P1.2 ;;complement port 1 bit 2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SETB P2.1 ;; assign port 2 bit 1 = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLR P3.7 ;; assign port 3 bit 7 = 0&lt;br /&gt;
• Not all MCU instruction sets support bit op&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o e.g., ATMEL AVR: access whole 8-bit port&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; P2 1 = 0 x 02; /*set P2.1 */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; P3 &amp;amp; = 0 x 7F; /* clear P3.7 */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; How to complement P1.2?&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Duty cycle&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE9LTNoLsGKJB8IOXc-RTK8NLvH_3IYqE6Y70p920L9cvXlQwqLPwK3eysmKrHKxuyjfq6xEvldFmV7UU3leACpt6feCkDNyb9TbLELcVY_GBtxY1xiHEhbj1IK7_dKO8auklLiAPvmu5T/s1600/sen422.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE9LTNoLsGKJB8IOXc-RTK8NLvH_3IYqE6Y70p920L9cvXlQwqLPwK3eysmKrHKxuyjfq6xEvldFmV7UU3leACpt6feCkDNyb9TbLELcVY_GBtxY1xiHEhbj1IK7_dKO8auklLiAPvmu5T/s320/sen422.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• Percentage on time in a square wave &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o 50% duty cycle&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; 50% on, 50% off &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;o 25% duty cycle&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; 25% on, 75% off&lt;br /&gt;
• Orthogonal to frequency&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o each frequency can have diff. duty cycles&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Application of duty cycling&lt;/span&gt;&lt;br /&gt;
• PWM: Pulse width modulation&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Use duty cycle to control average intensity &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Frequency should be sufficiently high&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGc8QEDC9l0Doh_c09SJKRhCLerozEfXeg4vyTHVPynfQ2Qre771M-ElKiFmh4CpmIQGZnAPL9E3u8jVe_0rhpIueBM_6cGXvLXY1kUEDFuXe-QYDJmr6nhcaaJ4jrVZWg-HQWKMlJ2pK-/s1600/sen423.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGc8QEDC9l0Doh_c09SJKRhCLerozEfXeg4vyTHVPynfQ2Qre771M-ElKiFmh4CpmIQGZnAPL9E3u8jVe_0rhpIueBM_6cGXvLXY1kUEDFuXe-QYDJmr6nhcaaJ4jrVZWg-HQWKMlJ2pK-/s320/sen423.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• Example&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o motor speed &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;o brightness of light&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Instructions&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcVRozFktf0hZ2CLcRJWCweKgvaPPt6PuhE9rhvbtzSSEMEW0p9lFjVYtbWRAC6lKQTO3-ukiRaYmAhcJYOTF6XmpVP0HNj97VtEmBXdl7-jVqL4sZ9w1enXFUA3hyctYjtbSJKApiWlbk/s1600/sentbl2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;173&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcVRozFktf0hZ2CLcRJWCweKgvaPPt6PuhE9rhvbtzSSEMEW0p9lFjVYtbWRAC6lKQTO3-ukiRaYmAhcJYOTF6XmpVP0HNj97VtEmBXdl7-jVqL4sZ9w1enXFUA3hyctYjtbSJKApiWlbk/s320/sentbl2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Rading input port&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfjyUWjg3XCHQCV2vYdAcgS_Tk5HwgW_D3W10PFty0whhAbfxid-8f5W_c-kOSLR-Dbv2ADHRde05-EhSdrrmkwpb1n6jHH3d2sTiY-gxKq3Drn5x8VgaB6TnbKlfFmsl_2fUmHXwO64ND/s1600/sentbl3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfjyUWjg3XCHQCV2vYdAcgS_Tk5HwgW_D3W10PFty0whhAbfxid-8f5W_c-kOSLR-Dbv2ADHRde05-EhSdrrmkwpb1n6jHH3d2sTiY-gxKq3Drn5x8VgaB6TnbKlfFmsl_2fUmHXwO64ND/s320/sentbl3.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Example: polling&lt;/span&gt;&lt;br /&gt;
SETB P1.2&lt;br /&gt;
AGAIN: JNB P1.2, AGAIN&lt;br /&gt;
• Configure P.1 for input &lt;br /&gt;
• Keep looping as long as P1.2 ==0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; =&amp;gt; waits till rising edge of P1.2 &lt;br /&gt;
• Polling: keep checking I/0 in a loop Easy, fast but a little wasteful &lt;br /&gt;
• More &quot;efficient&quot; way: use interrupts&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Use C as a general purpose bit register&lt;/span&gt;&lt;br /&gt;
• Carry flag (C) can be used as a bit register &lt;br /&gt;
• Alternative to previous polling code&lt;br /&gt;
Use MOV and JC/JNC&lt;br /&gt;
SETB P1.2&lt;br /&gt;
AGAIN: MOV C, P1.2&lt;br /&gt;
JNC AGAIN&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;Example: want to copy input bit to output&lt;/span&gt;&lt;br /&gt;
• Input P1.0, want to copy bit value to P2.7 &lt;br /&gt;
• Cannot do&lt;br /&gt;
&amp;nbsp;&amp;nbsp; MOV P2.7, P1.0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; =&amp;gt; no such instruction! &lt;br /&gt;
• Solution : use C as temporary&lt;br /&gt;
&amp;nbsp;&amp;nbsp;MOV C, P1.0&lt;br /&gt;
&amp;nbsp; MOV P2.7, C&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Reading from port-register instead of pin&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4VloKrOclx5TlDD0sAoMulfXiqDEUbiVSFz7NRYMx0bFgpGY7x4TZs1mAsy6ckx3nyurYHj-wcFpJtxjXd18PfbRbcrz56PHJWUyT8-f_KLnGLUSyLOdZ_30Kb1YPuUMfgjuevBaRHwoZ/s1600/sen424.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;140&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4VloKrOclx5TlDD0sAoMulfXiqDEUbiVSFz7NRYMx0bFgpGY7x4TZs1mAsy6ckx3nyurYHj-wcFpJtxjXd18PfbRbcrz56PHJWUyT8-f_KLnGLUSyLOdZ_30Kb1YPuUMfgjuevBaRHwoZ/s320/sen424.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMFX0Zm4i3z1vw6EzNNCpZp0EvUB0g6HeCrqUdCKw5hYtkvQQeYKIvOkQboHutBsrs0_fqBaq2VER4uZMJgkDJ8LxGop-ZoL9WCYJFXuWMbIHOfGrrkvS3m7U2bl0zlBZMSX1cvWicHPzY/s1600/sentbl4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; rw=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMFX0Zm4i3z1vw6EzNNCpZp0EvUB0g6HeCrqUdCKw5hYtkvQQeYKIvOkQboHutBsrs0_fqBaq2VER4uZMJgkDJ8LxGop-ZoL9WCYJFXuWMbIHOfGrrkvS3m7U2bl0zlBZMSX1cvWicHPzY/s320/sentbl4.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;Example of reading port register&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
• ANL P1, A ;; P1 :=P1 logical AND A &lt;br /&gt;
• This instruction has &quot; read-modify-write&quot; property&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o Read a port register, modify the value, write back to the same port register &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o All done &quot;atomically&quot; in one instruction&lt;br /&gt;
• Why is this a useful feature?&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Atomic operation&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
• w/out read-modify-right, need 3 operations&lt;br /&gt;
&amp;nbsp;&amp;nbsp; o MOV A, P1 &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o ANL A, expression &lt;br /&gt;
&amp;nbsp;&amp;nbsp; o MOV P1, A&lt;br /&gt;
• But! if an interrupt occurs, value of A may be changed by the interrupt handler! &lt;br /&gt;
• Atomic means you can be sure operation is consistent even if interrupted</content><link rel='replies' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/2756447859374279221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3027206085468016848/2756447859374279221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/2756447859374279221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/2756447859374279221'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/2010/07/session-4-io-port-programming.html' title='Session 4: I/O Port Programming'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeylaFh6Ea0X4zLLnzqnPr4UuI8Xz4-xXtUZW15EA06AE196qFhGB-aCik_vXgkIZkT2JMsc16tOaaSrawLDXdJtNyQKd7JB-1zbzydyHDWe5y0Z0vS1c82N2cBbS2tPWhfjhj8Q5aoXPc/s72-c/Input+Output+Programming.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3027206085468016848.post-3472715733950311855</id><published>2010-07-14T12:05:00.000+05:00</published><updated>2010-07-14T12:05:10.750+05:00</updated><title type='text'>Session 3 : Looping</title><content type='html'>&lt;ol&gt;&lt;li&gt;Loops, Conditional jump instructions&lt;/li&gt;
&lt;li&gt;Conditions determeining conditional jump&lt;/li&gt;
&lt;li&gt;Unconditional long &amp;amp; short jumps&lt;/li&gt;
&lt;li&gt;Calculate target addresses for jumps&lt;/li&gt;
&lt;li&gt;using stack in subroutines&lt;/li&gt;
&lt;li&gt;Crystal frequenscy vs machine cycle&lt;/li&gt;
&lt;li&gt;Code programs to generate time delay&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;div&gt;Looping ex.3-1&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;MOV&amp;nbsp;&amp;nbsp;&amp;nbsp; A,#0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;init &lt;/div&gt;&lt;div&gt;MOV&amp;nbsp;&amp;nbsp;&amp;nbsp; R2,#10 &lt;/div&gt;&lt;div&gt;Again:&amp;nbsp;&amp;nbsp;&amp;nbsp; ADD A,#03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;loop body &lt;/div&gt;&lt;div&gt;DJNZ&amp;nbsp;&amp;nbsp;&amp;nbsp; R2,Again&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;;;while test &lt;/div&gt;&lt;div&gt;MOV&amp;nbsp;&amp;nbsp;&amp;nbsp; R5,A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;;;after loop&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;gt; init: A=0; R2=10;&lt;/div&gt;&lt;div&gt;&amp;gt; Loop: do {A+=3;} While (--R2!-0);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DJNZ means &quot;decrement, jump if not zero&quot;&lt;/div&gt;&lt;div&gt;&amp;gt; after: R5 = A;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/3472715733950311855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3027206085468016848/3472715733950311855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/3472715733950311855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/3472715733950311855'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/2010/07/session-3-looping.html' title='Session 3 : Looping'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3027206085468016848.post-5848151833979058122</id><published>2010-06-30T09:36:00.000+05:00</published><updated>2010-06-30T09:36:56.479+05:00</updated><title type='text'>Session 2: 8051 Assemble Language</title><content type='html'>&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;• Register&lt;/div&gt;• MOV &lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;• Power Up &lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;• Stack &lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;• PSW&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;• Register banks&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;strong&gt;Register Banks&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
1. General purpose, 8 bit&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o A: (Accumulator), B &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o R0,R1, R2, R3, R4, R5, R6, R7&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;2. 16-bit, specifically used as pointers&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o DPTR: (data pointer) : as 8-bit DPH, DPL (data pointer hi/low) &lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o PC: (Program Counter)&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;strong&gt;MOV Intruction&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
1. Syntac:&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mov dest, src&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Think assignment statement: dest:=src;&lt;br /&gt;
2. Dest src are called Operands&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Dest can be A, B, R0...R7, DPH, DPL &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Src can be A, B, R0...R7, or an immediate&lt;br /&gt;
3. Immediate = constant value, e.g as #12&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Assembler idiosyncrasy with immediates&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
1. Default base: decimal&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o #12 (assumed to be decimal) &lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Can be hex: #12H (hex 12, = dec 18)&lt;br /&gt;
2. However the char after # must be &#39;0&#39;.. &#39;9&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o #FFH is invalid (since &#39;F&#39; is not in &#39;0&#39;..&#39;9&#39; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Solution: #0FFH (add a useless &#39;0&#39;)&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Immidiates vs direct (addressing mode)&lt;/strong&gt;&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;1. Mov A, #17H&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o A= 0x17; #17H is literal&lt;br /&gt;
2. Mov a, 17&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o A= * ((char *)17) 17 is an address&lt;/div&gt;3. Big difference&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o R0,...R7 =&amp;gt; Register mode &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o #17 =&amp;gt; Immediate mode; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o 17 =&amp;gt; direct mode (address -- where?)&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Add instruction&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
1. ADD A, source&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Note: A is hardwired cannot use anything else &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Meaning: A:= A + source;&lt;br /&gt;
2. Source itself can be any R-Value operad&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Immediate, direct, register&lt;br /&gt;
How to write R2:= 0x25 + 0x35&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. Key: need to involve the accumulator A &lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. MOV A, 25H ;; A: = 0x25;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADD A, 34H ;; A: = A + 0x34;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MOV R2, A ;; R2:= A; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. Would be incorrect (in 8051) to try&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MOV R2, 25H ;; this part is ok&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ADD R2, 34H ;; must use A, not R2 &lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4. Since the sum is constant, could do&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MOV R2, 59H ;; eval. by assembler&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Assembly Language&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
1. Directives&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Commands to the assembler&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.g., starting address, allocate memory,...&lt;br /&gt;
2. (assembly) instructions&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o Correspond to machine instructions&lt;br /&gt;
3. Labels&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Symbolic names that mark addresses&lt;br /&gt;
4. Comments&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Example Program (2-1)&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;ORG 0H :start address&lt;/div&gt;MOV R5, #25H&lt;br /&gt;
MOV R7, #34H&lt;br /&gt;
MOV A, #0&lt;br /&gt;
ADD A, R5&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;ADD A, R7&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;ADD A, #12H&lt;/div&gt;HERE: SJMP HERE&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;END ; some may be. END&lt;/div&gt;&lt;br /&gt;
&lt;strong&gt;Mnemonic&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• A symbol that helps you remember &lt;br /&gt;
• example: phone number&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o 2 = A, B, C 3 = D, E, F 4 = G, H, I &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o doesn&#39;t need to be exact; can approximate&lt;br /&gt;
• Opcodes and directives are mnemonics&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o MOV ~~ &quot;move&quot; &lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o JMP ~~ &quot;jump&quot; etc&lt;/div&gt;&lt;br /&gt;
&lt;strong&gt;Try this out&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• Save assembly program as plain text file Name file.a51 &lt;br /&gt;
• asem file.a51 ;;type this as a command&lt;br /&gt;
&amp;nbsp;&amp;nbsp;=&amp;gt; if correct, says no erross &lt;br /&gt;
• Output files -- simple case, sigle file&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o .hex file: hex-formatted binary file &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o .lst file: &quot;listing&quot; (before/after views)&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;.lst file by assmebler&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Addr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Machine code&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Assembly Source&lt;br /&gt;
0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7D 25&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; Mov R5, #25H&lt;br /&gt;
0002&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7D 34&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; Mov R7, #34H&lt;br /&gt;
0004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7F 00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mov A, #0&lt;br /&gt;
0006&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2D&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADD A, R5&lt;br /&gt;
0007&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADD A, R7&lt;br /&gt;
0008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ADD A, #12H&lt;br /&gt;
000A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 80 FE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HERE: SJMP HERE&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;strong&gt;More assembler features&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;
• Literal: in other bases&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Binary: add B after: 0000 1010B&lt;br /&gt;
• DB: define byte (or string, whatever data)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o store the data in program memory &lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o label is optional, not required!&lt;/div&gt;• EQU: constant declaration (macro)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o inlined when used. requires a macro name&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Example of DB vs EQU&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• DATA1: DB &quot;Hello world&quot;&lt;br /&gt;
&amp;nbsp; DATA2: DB 25&lt;br /&gt;
&amp;nbsp; =&amp;gt; both accupy space in (code) memory &lt;br /&gt;
• COUNT EQU 25 ;;occupies no space!&lt;br /&gt;
&amp;nbsp;&amp;nbsp;MOV R3, #COUNT&lt;br /&gt;
&amp;nbsp; =&amp;gt; macro expansion into MOV R3, #25&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;strong&gt;Adders -- from logic gates&lt;/strong&gt;&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;• Half adder&lt;br /&gt;
&amp;nbsp; - Sum = same as an Xor&lt;br /&gt;
&amp;nbsp; - Carry = same as And &lt;br /&gt;
• Full adder&lt;br /&gt;
&amp;nbsp; -Take Carry from prev bit&lt;br /&gt;
&amp;nbsp; -Consists of two half adders &lt;br /&gt;
• Then connect them in a chain &lt;br /&gt;
• Forunately, VHDL can do bitvector add&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;PSW: program status word&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• 8 bit register containing flags&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o indicating status of the processor&lt;br /&gt;
CY (C bit)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSW.7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Carry flag&lt;br /&gt;
AC&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; PSW.6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Auxiliary carry. for BCD arithmetic&lt;br /&gt;
F0, -&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; PSW.5&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (user)&lt;br /&gt;
RS1&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; PSW.4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Register bank select&lt;br /&gt;
RS0&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; PSW.3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Register bank select&lt;br /&gt;
OV&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; PSW.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Overflow&lt;br /&gt;
P&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSW.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Parity: even or odd # of i&#39;s in A&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;CY flag (C-bit)&lt;/strong&gt;&lt;br /&gt;
• Carry out of the highest-order adder&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Does not mean overflow!!&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Example: 0x01 + 0xFF = 0x00 with C= 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; (corresponds to 1 + (-1) = 0.) &lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o Carry or borrow, both have C=1&lt;/div&gt;• Carry bit can be set, cleared, moved&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o CLR C ;; clear the C bit, means := 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SETB C ;; set the C bit, means := 1&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;OV-flag (overflow)&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
• Overflow: too big/too small to represent &lt;br /&gt;
• ADD:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Both operands same sign, sum different&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.g., both +, sum-; or both -, sum + &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Cannot overflow when operands mix + -&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Because the sum is beween the two&lt;br /&gt;
• SUB:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Opposite condition of ADD&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Outcome of a signed A + B&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• A and B have different signs&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Can&#39;t overflow. Because either&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A≤ Sum ≤ B or B ≤ sum ≤ A &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o V (overflow bit) is always &#39;0&#39; in this case.&lt;br /&gt;
• A and B have same signs&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Sum has same sign as A, B =&amp;gt; No overflow &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Sum has a different sign =&amp;gt; Overflow! (V=&#39;1&#39;)&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;strong&gt;Example of Overflow in signed addition&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;
• Both A, B positive, Sum negative&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjARRPLxLC9rV_RioVHHdmUIT0xk1fIcg9Ay06KZK7ok0xNFZH49J4tPBQ-WZx0KKWQTKwFtY67897dVydvbI4h9AWzK8OV_3SWnA5fHakpiy7Jaffp8TMKKvXvMY1ZJU7ZMqgcU2s73pjG/s1600/page_1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjARRPLxLC9rV_RioVHHdmUIT0xk1fIcg9Ay06KZK7ok0xNFZH49J4tPBQ-WZx0KKWQTKwFtY67897dVydvbI4h9AWzK8OV_3SWnA5fHakpiy7Jaffp8TMKKvXvMY1ZJU7ZMqgcU2s73pjG/s320/page_1.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• The status bits are&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o V = 1 (overflow), C = 0 (no carry out), &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o N = 1 (negative), Z = 0 (not zero)&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Example of overflow in signed addition (cont&#39;d)&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• Both A, B negative, Sum positive&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_nMcQu_auDIwrnLkcJBk9XBCgC7By1UnEz4XZXSYABtNks2TqK4a9xXLQS9EXx_PIVquwRzSTCDnzsPl1BB_Wt-vii7c7Jqtvtq9Irdl3sLYgJ1hfEkhag5rNWcU9B-pWZsveCDnMNqiO/s1600/page_2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_nMcQu_auDIwrnLkcJBk9XBCgC7By1UnEz4XZXSYABtNks2TqK4a9xXLQS9EXx_PIVquwRzSTCDnzsPl1BB_Wt-vii7c7Jqtvtq9Irdl3sLYgJ1hfEkhag5rNWcU9B-pWZsveCDnMNqiO/s320/page_2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• The status bits are&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o -V = 1 (overflow), C=1 (carry)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o N = 0 (not negative), z = 0 (not zero)&lt;br /&gt;
• Sum does not include the carry bit!!&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Examples of NOT Overflow in signed addition&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• A, B have different signs&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYf34OIVEJHFdsZoE74odVIODJ2kdxvoe2KiBuT9_gaNHPAFzc3Z1YPGx2I2LnznU4etDjt_zaFmny4cDxVcz-99zadppougYcFknOI38SziArJq4WREab86KHjb39NRhBK3ra17Nm5Yjg/s1600/page_3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYf34OIVEJHFdsZoE74odVIODJ2kdxvoe2KiBuT9_gaNHPAFzc3Z1YPGx2I2LnznU4etDjt_zaFmny4cDxVcz-99zadppougYcFknOI38SziArJq4WREab86KHjb39NRhBK3ra17Nm5Yjg/s320/page_3.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• Overflow is not the same as arithmetic carry&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Truncating at the top is a feature, not a bug! &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o C = 1 (ignored), V= 0, N = 0, Z = 0&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Examples of unsigned addition&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• MSB of A, B both = 0, MSB of Sum = 1&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhII33w35mkjMo98w9krI8HnP0KMfHdCPGqfk7UVTnw1vbxOByLaWVK1QDRRtpQrMzMRZNdIpBA8mjUQDrCT9yH5DrnlAZExM8VigpHhw963nw6nixhqQaRE1_H2TBB5nkpvKRdEzsACmih/s1600/page_4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhII33w35mkjMo98w9krI8HnP0KMfHdCPGqfk7UVTnw1vbxOByLaWVK1QDRRtpQrMzMRZNdIpBA8mjUQDrCT9yH5DrnlAZExM8VigpHhw963nw6nixhqQaRE1_H2TBB5nkpvKRdEzsACmih/s320/page_4.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• the status bits are&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o V = 0 (overflow), C = 0 (no carry out0, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o N = 0 (not negative), Z = 0 (not zero)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&amp;nbsp;Examples of Overflow in unsigned additon (Cont&#39;d)&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• MSB of both A, B= 1, MSB of Sum = 0&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-iEflQVMJA5Cy37fVvKC68LHExQofONDBZUDUR97HhoA2TxGAccU_e9i_RQP6-K-0ia4TQOk6OzlOm2nmirt7NFqEZeZ7F1zqQHSs1h8SD69Mb_CIN2IVeFkwBx9I76R1fdpV8KkSr9_X/s1600/page_5.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-iEflQVMJA5Cy37fVvKC68LHExQofONDBZUDUR97HhoA2TxGAccU_e9i_RQP6-K-0ia4TQOk6OzlOm2nmirt7NFqEZeZ7F1zqQHSs1h8SD69Mb_CIN2IVeFkwBx9I76R1fdpV8KkSr9_X/s320/page_5.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• The status bits are&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o V = 1 (overflow), C = 1 (carry) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o N = 0 (not negative), Z = 0 (not zero)&lt;br /&gt;
• Sum does not include the carry bit&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Signed Subtract&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• A - B = A + (-B)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Take 2&#39;s complement of B (flip all bits, add 1) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o VHDL also provides the -operator&lt;br /&gt;
• N, Z, C, V bits&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o C = &quot;borrow&quot;, 1 when sign bit:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o if A, B same sign =&amp;gt; V=&#39;0&#39; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o if A, B diff signs and Res diff sign from A =&amp;gt; V=&#39;1&#39;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Examples of signed subtraction&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• Positive A, Positive B, Negative Result&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkFLebBK9CdvkEzGW8OZfEkcR4-5r714vyhy1FZY8oKVleETxqJ8TDEiviTYKe92SZnYS-3DYvEto9R8Xmv6F5Dge6o5E7gRGiqlQ6q-D8Pkcpl9TGxKrmZDdMe7mNKfPkiWzgaQo8-4hO/s1600/page_6.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkFLebBK9CdvkEzGW8OZfEkcR4-5r714vyhy1FZY8oKVleETxqJ8TDEiviTYKe92SZnYS-3DYvEto9R8Xmv6F5Dge6o5E7gRGiqlQ6q-D8Pkcpl9TGxKrmZDdMe7mNKfPkiWzgaQo8-4hO/s320/page_6.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• The status bits are&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o V = 0 (overflow), C = 1 (borrow). &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o N = 1 (negative), Z = 0 (not zero).&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Examples of overflow in signed subtraction&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• Positive A, Negative B, Negative Result&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu11-woCb64FTB6azTzBzWEMZX7y5GYokeb0DnmkYVO07HYOPn6YO30xushcmEuGKZ1NyPrUa_mhogY9LO7BizZc903zG6RTr-szwlAzIuIJerrF5Jdv57Md2SAMl7spUvSMPUQpkx8hVI/s1600/page_7.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu11-woCb64FTB6azTzBzWEMZX7y5GYokeb0DnmkYVO07HYOPn6YO30xushcmEuGKZ1NyPrUa_mhogY9LO7BizZc903zG6RTr-szwlAzIuIJerrF5Jdv57Md2SAMl7spUvSMPUQpkx8hVI/s320/page_7.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• The status bits are&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o V = 1 (overflow), C = 1 (borrow). &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o N = 1 (negative), Z = 0 (not zero).&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&amp;nbsp;Unsigned Subtract&lt;/strong&gt; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
• A - B = A + (-B) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Take 2&#39;s complement of B, add as before &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o VHDL also provides the -operator&lt;br /&gt;
• N, Z, C, V bits&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o N always &#39;0&#39; (unsigned). &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o C = &quot;borrow&quot;. Same as signed version&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;1&#39; when the MSB = table here&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Res&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o V unsigned = C unsigned&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Examples of overflow in unsigned subtraction&lt;/strong&gt; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
• Both A, B Positive, Res negative &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPpxaigUN3nbrYwKrLccZxo6UWPRhQxExxkWgtajAA1mnRtx8KdgV-C2kAsDxGCML9HSIgvOC7eOjZqXnneFzSY1h9SnvT4AjJFBnLs_F97yQelxFRl3LxWSFmkctKgQXvA8DJCMyXNr4A/s1600/page_8.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPpxaigUN3nbrYwKrLccZxo6UWPRhQxExxkWgtajAA1mnRtx8KdgV-C2kAsDxGCML9HSIgvOC7eOjZqXnneFzSY1h9SnvT4AjJFBnLs_F97yQelxFRl3LxWSFmkctKgQXvA8DJCMyXNr4A/s320/page_8.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• C = 1 (ignored), V = 1, N = 0, Z = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Res&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Register banks and Scratchpad memory&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• Four register banks [ 00-lFH]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o 8 registers per bank (8 bytes/bank) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o bank 1 is stack&lt;br /&gt;
• Bit-addressable (16 bytes) [20-2FH] &lt;br /&gt;
• Scratchpad (Byte-addressable) [30-7FH] &lt;br /&gt;
• Total 128 bytes [00-7FH]&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Register bank selection&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• Register can be from 1 of 4 banks&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Depending on PSW.4, PSW.3&lt;br /&gt;
• Example&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o MOV R0, #12H&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Where is R0?&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjS8HEtw3WP9kh_slOMUQEaYwenO98BtXVeHcfy-5w-cpqoxtq2Jg4N77Og35qfyk3b9lM1XsImSgIJikT2Cd428fSz-0RlYfmsbyMIkzsr6b3xg_SQUeinOZtkjSISrhyphenhyphenYh_S__ub4zKr/s1600/page_9.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjS8HEtw3WP9kh_slOMUQEaYwenO98BtXVeHcfy-5w-cpqoxtq2Jg4N77Og35qfyk3b9lM1XsImSgIJikT2Cd428fSz-0RlYfmsbyMIkzsr6b3xg_SQUeinOZtkjSISrhyphenhyphenYh_S__ub4zKr/s320/page_9.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
• Answer: depends on which bank!&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Could be address 00H, 08H, 10H, or 18H&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Instruction for setting banks&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• &quot;Set a bit&quot; (means assign the bit to 1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o SETB PSW.4&lt;br /&gt;
• &quot;Set a bit&quot; (means assign the bit to 0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o CLR PSW.3&lt;br /&gt;
• So, together, PSW.4 = 0, PSW.3 = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; =&amp;gt; selects bank a&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Two ways of accessing the same registers&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• Register mode:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Use R0, R1 ...name &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Current bank &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Need bank switching&lt;br /&gt;
• Direct mode:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Use the RAM address of the register! &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o 00 for R0 of bank 1, 12 for R2 of bank 3&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Examples&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• Register addressing:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET B PSW.4&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLR PSW.3&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MOV R3, #99H &lt;br /&gt;
• Direct addressing:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MOV 13, #99H&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY4Hk2TefD8hbig02qmi2ZPTgys4yGYFC0ZSQeiv1wGMzsPYjbuIf_neX7NrnmQTV-h3E-zqoz5obYMNv44Ap1oTa9dpYfIWvJUYrYCPAd1zZsfei2xX4YiX-ym2WtPcThixENNhCVVCT0/s1600/page_10.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY4Hk2TefD8hbig02qmi2ZPTgys4yGYFC0ZSQeiv1wGMzsPYjbuIf_neX7NrnmQTV-h3E-zqoz5obYMNv44Ap1oTa9dpYfIWvJUYrYCPAd1zZsfei2xX4YiX-ym2WtPcThixENNhCVVCT0/s320/page_10.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Stack&lt;/strong&gt;&lt;br /&gt;
• Fundamental data structure in programming&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Return address of a call &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o space for local (auto) variables&lt;br /&gt;
• Implicitly addressed&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o PUSH (add element to stack) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o POP (remove element from stack)&lt;br /&gt;
• Need: stack pointer (SP) -- register in 8051&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;8051 architecture-supported stack&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• 8-bit Stack Pointer SP&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Initialized to 07H on power up&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; points to just before R0 of bank1&lt;br /&gt;
• Grows from lower to higher address&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o PUSH: pre-increment: stack [++SP]=d; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o POP: post-decrement: d=stack [SP--];&lt;br /&gt;
• Opposite from stacks on other CPUs!!&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Synax of PUSH/Pop instructions&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• PUSH 6&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o This doesn&#39;t mean PUSH #6 &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o It means PUsh content of R6 to stack!&lt;br /&gt;
• POP 2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Means pop the top element of stack to R2 &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Reason: think &quot;RAM Address&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Range of value for SP&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• [07 - 1FH] (register bank 1, 2, 3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o On power-up SP = 07H &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o Should not go lower;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Could go up to 1FH (R7 of bank3)&lt;br /&gt;
• [30 - 7FH] (scratchpad memory) &lt;br /&gt;
• NOT [20 - 2FH] -- bit addressable area&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Other use of stack : call /Return&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
• Call instruction&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o pushes return address onto stack then go to target&lt;br /&gt;
• Return instruction&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o pops return address then go to target&lt;br /&gt;
• Interrupt: hardware pushes return address &lt;br /&gt;
• Return-from-interrupt instruction</content><link rel='replies' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/5848151833979058122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3027206085468016848/5848151833979058122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/5848151833979058122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/5848151833979058122'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/2010/06/session-2-8051-assemble-language.html' title='Session 2: 8051 Assemble Language'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjARRPLxLC9rV_RioVHHdmUIT0xk1fIcg9Ay06KZK7ok0xNFZH49J4tPBQ-WZx0KKWQTKwFtY67897dVydvbI4h9AWzK8OV_3SWnA5fHakpiy7Jaffp8TMKKvXvMY1ZJU7ZMqgcU2s73pjG/s72-c/page_1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3027206085468016848.post-2949313182446737279</id><published>2010-06-26T14:03:00.000+05:00</published><updated>2010-06-26T14:03:34.719+05:00</updated><title type='text'>Session 1: 8051</title><content type='html'>1.  Microprocessors VS MCU &lt;br /&gt;
2. Advantages of MCUs &lt;br /&gt;
3. Embedded systems &lt;br /&gt;
4. Choose a microcontroller &lt;br /&gt;
5. Speed, packaging, memory &amp;amp; cost per unit &lt;br /&gt;
6. Various members of 8051 family &lt;br /&gt;
7. Various manufacturers of 8051&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;CPU vs MCU vs Embedded microprocessor&lt;/strong&gt;&lt;br /&gt;
&amp;gt;&amp;gt; Older&lt;br /&gt;
1. 6811 (formerly motorola, now Freescale) &lt;br /&gt;
2. 8051 (intel), Z8 (Zilog), PIC 16(Microchip)&lt;br /&gt;
&amp;gt;&amp;gt;Newer&lt;br /&gt;
1. ATMega (Atmel) &lt;br /&gt;
2. Hitachi H8 &lt;br /&gt;
&amp;gt;&amp;gt; 8-bit means register (native data size) 8 bits&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Why 8051 is still popular aftar 25 years&lt;/strong&gt;&lt;br /&gt;
1. Intel allows others to make compatible MCUs&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Atmel, Philips/Signetcs, Siemens, Dallas Semiconductor &lt;br /&gt;
2. New and improved&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Silicon Labs (100MHZ low power, hi-perf) &lt;br /&gt;
3. Free designs available&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Integrated RF (e.g, Nordic nFR24E1, Chipcon cc2430, RadioPulse RG2400) &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;8051 Family&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiHPloq3mJwqUNFdy7mzSUiyOa2ny8NRCulMi05FqvjsgXLyGwfwywxq8mZSUdfV-64G8r0Mk0vBQ4suj927LtP2m_5qC_dMe7M5aZmKUAQGmc11ZzID4iPSrGG_Tcy8k7VRG9c-R7nptv/s1600/features.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiHPloq3mJwqUNFdy7mzSUiyOa2ny8NRCulMi05FqvjsgXLyGwfwywxq8mZSUdfV-64G8r0Mk0vBQ4suj927LtP2m_5qC_dMe7M5aZmKUAQGmc11ZzID4iPSrGG_Tcy8k7VRG9c-R7nptv/s320/features.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Question: How to program?&lt;/strong&gt;&lt;br /&gt;
1. Make ROM (cheap if large quantity)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Problem: You cannot change the program! &lt;br /&gt;
2. Make writable ROM&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; PROM: (P=Programmable) Write-Once&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; EEPROM: Electrically erasable Prom&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; UV-EPROM : Erasable w/Ultraviolet (UV) light&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Flash: atype of EEPROM&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; NV-RAM: Non Volatile RAM &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;EEPROM Programmer and UV-Eraser&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjODheaDR6Kmghf83DdvWfC5EesXLRyUhw5X8MqraTiEOJPmIh47X__c_3PIsuh2RHMFGPPqR_mkLEFb3lDQPiO885N1tdu6RznSXN_t6xlp8rwvQvLufSytmPEVNZGmTU97bscKoYDQdiT/s1600/Sampel_1.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjODheaDR6Kmghf83DdvWfC5EesXLRyUhw5X8MqraTiEOJPmIh47X__c_3PIsuh2RHMFGPPqR_mkLEFb3lDQPiO885N1tdu6RznSXN_t6xlp8rwvQvLufSytmPEVNZGmTU97bscKoYDQdiT/s320/Sampel_1.jpeg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Zxs9rTK8xFPIPoI24iQHWg9Xx9gHk5ilVVjwKwU8pr04L5mcdwfVlPe-cReGn8r0UXTPc9xUwcsIVe8d4KRzUop7i9Sx1gqsceCRnUQel1BqCCS5k5Es3linltYfXkH91XA7SwC1wK2m/s1600/Sampel_2.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Zxs9rTK8xFPIPoI24iQHWg9Xx9gHk5ilVVjwKwU8pr04L5mcdwfVlPe-cReGn8r0UXTPc9xUwcsIVe8d4KRzUop7i9Sx1gqsceCRnUQel1BqCCS5k5Es3linltYfXkH91XA7SwC1wK2m/s320/Sampel_2.jpeg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6PoffC4jyjRJaMUpaximbaxgZ5YrGvKlZxllcbHWawowLMX6zy10C-zS1wsUcrc4ZeZzdYZyFkvMhqdehu0chT-r9TRhQ4DwO2GcDumT7BEjLPBRH6bLEwBv27wzFRtvwOrHYPviNw0A8/s1600/Sampel_3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6PoffC4jyjRJaMUpaximbaxgZ5YrGvKlZxllcbHWawowLMX6zy10C-zS1wsUcrc4ZeZzdYZyFkvMhqdehu0chT-r9TRhQ4DwO2GcDumT7BEjLPBRH6bLEwBv27wzFRtvwOrHYPviNw0A8/s320/Sampel_3.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Flash memory&lt;/strong&gt;&lt;br /&gt;
1. NAND-flash&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Cheaper, page access, erase whole page before writing&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Good for data (e.g, digital camera)&lt;br /&gt;
&amp;nbsp;2. NOR-flash&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Word addressable, more expensive&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Good for MCU program (firmware)&lt;br /&gt;
&amp;nbsp;3. Limited number of rewrite cycles (10,000) &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Package types&lt;/strong&gt;&lt;br /&gt;
1. DIP (dual-inline package) used in breadboards &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKqoSg1aTgOI5RxvO3gQ2cLRJTCaNZPqEFaUV7QV-3FJHRKdU7ydMYzRoe2oeh5OcE0vR9dziQ1SzFEHeS2ftQ_1Iwv7lif6_xREsPjBQSVSD8DBNbX8NADMDPQfsECU8uWEnyw6HzuxEH/s1600/Sampel+01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKqoSg1aTgOI5RxvO3gQ2cLRJTCaNZPqEFaUV7QV-3FJHRKdU7ydMYzRoe2oeh5OcE0vR9dziQ1SzFEHeS2ftQ_1Iwv7lif6_xREsPjBQSVSD8DBNbX8NADMDPQfsECU8uWEnyw6HzuxEH/s320/Sampel+01.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. PLCC (Plastic leadless chip carrier) Removable from socket&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKsIyNI5EKBiKDUW9dAfGbsPKKdrHXH5Ymco7bpKKe91qlR0amxYii15DEYwj476QPAZID1ZKA4zSBLtNFtsbBXRopHRyzgS4hLqGW9WajmnKV3i5yqJ9nmwIHf4R6CyPzOzT_NJRtbR1Y/s1600/sampel+1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKsIyNI5EKBiKDUW9dAfGbsPKKdrHXH5Ymco7bpKKe91qlR0amxYii15DEYwj476QPAZID1ZKA4zSBLtNFtsbBXRopHRyzgS4hLqGW9WajmnKV3i5yqJ9nmwIHf4R6CyPzOzT_NJRtbR1Y/s320/sampel+1.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;3. BGA (ball-grid array) Connect on bottom&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhwKWDIde9Fbybvj2dtdEZY-JyT1PhmqiDfJLmmwPtC-Vi4ZAA5z1vYoz9Xw7t83TldjIpA59W_2e7yF2qAYLNNaVvJHOupoqB1tK10j_wWgWdY7uajToqMCRa2NoEP0vRBh-2YT2uYr8y/s1600/Sampel+2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhwKWDIde9Fbybvj2dtdEZY-JyT1PhmqiDfJLmmwPtC-Vi4ZAA5z1vYoz9Xw7t83TldjIpA59W_2e7yF2qAYLNNaVvJHOupoqB1tK10j_wWgWdY7uajToqMCRa2NoEP0vRBh-2YT2uYr8y/s320/Sampel+2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. SMT (Surface mount) Small or no leads&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiVS2THNvLbr2sqOb-7Y2aFyYZjvyCvPMtMGxnlSErj5mqYS4jG2VuWnMpoHxLYBINZbxguCTbfEsyx_yske-ktLYd1p7m8zPUd8wGw5gWbwwhVLYFF08NQ-fIi2ce84RK7ZxfJbbvm9xl/s1600/sampel+4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiVS2THNvLbr2sqOb-7Y2aFyYZjvyCvPMtMGxnlSErj5mqYS4jG2VuWnMpoHxLYBINZbxguCTbfEsyx_yske-ktLYd1p7m8zPUd8wGw5gWbwwhVLYFF08NQ-fIi2ce84RK7ZxfJbbvm9xl/s320/sampel+4.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Choosing a Microcontroller&lt;/strong&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Computing needs&lt;/li&gt;
&lt;li&gt;Speed, packaging, power consumption, RAM, ROM, I/O pins, timers, radio, cost &lt;/li&gt;
&lt;li&gt;Voltage: TTL, CMOS, NMOS&lt;/li&gt;
&lt;li&gt;Software development tools &lt;/li&gt;
&lt;li&gt;Assembler, debugger, C compiler, emulator, technical support &lt;/li&gt;
&lt;li&gt;Availability &amp;amp; source&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/2949313182446737279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3027206085468016848/2949313182446737279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/2949313182446737279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/2949313182446737279'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/2010/06/session-1-8051.html' title='Session 1: 8051'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiHPloq3mJwqUNFdy7mzSUiyOa2ny8NRCulMi05FqvjsgXLyGwfwywxq8mZSUdfV-64G8r0Mk0vBQ4suj927LtP2m_5qC_dMe7M5aZmKUAQGmc11ZzID4iPSrGG_Tcy8k7VRG9c-R7nptv/s72-c/features.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3027206085468016848.post-2433812320747014088</id><published>2010-06-26T13:27:00.000+05:00</published><updated>2010-06-26T13:27:46.274+05:00</updated><title type='text'>ISP Flash Microcontroller Programmer</title><content type='html'>&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;This ISP Programmer can be used either for in-system programming or as a stand-alone spi programmer for Atmel ISP programmable devices. The programming interface is compatible to STK200 ISP programmer hardware so the users of STK200 can also use the software which can program both the 8051 and AVR series devices.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Hardware&lt;/strong&gt;&lt;br /&gt;
Figure 1 shows the circuit diagram of the in-system programmer interface, the power to the interface is provided by the target system. The 74HCT541 ic isolate and buffer the parallel port signals. It is necessary to use the HCT type ic in order to make sure the programmer should also work with 3V type parallel port.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNSq5C5Nzxnvr-XOMOTdY5zwCrtjheVTtwuuySJYP7UoVYyyZyJ50lCkPaV83SEGt8Iu5dpPOhS6bKT0nzmYijU2GcCVPkbjk2ivQnSnyMeyy-b43CPHCG6nP85HkFfY1PexYQPKqFyB00/s1600/isp1_sch.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNSq5C5Nzxnvr-XOMOTdY5zwCrtjheVTtwuuySJYP7UoVYyyZyJ50lCkPaV83SEGt8Iu5dpPOhS6bKT0nzmYijU2GcCVPkbjk2ivQnSnyMeyy-b43CPHCG6nP85HkFfY1PexYQPKqFyB00/s320/isp1_sch.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Figure 1: Circuit Diagram of the ISP Programmer Interface&lt;br /&gt;
&lt;br /&gt;
Figure 2 shows the circuit diagram of the stand-alone spi programmer, the power to the interface is provided by the PC USB port which can supply a max of 100mA current. Get a cheap USB cable, cut the cable other end connector and attach a crimp shell connector to this end, red wire is 5V and black is 0V.&lt;br /&gt;
&lt;br /&gt;
The printer port buffer interface is same as shown in figure 1. For the u-controller a 40 pin ZIF socket can be used.&lt;br /&gt;
&lt;br /&gt;
This programmer circuit can be use to program the 89S series devices and the AVR series devices which are pin compatible to 8051, like 90S8515. For other AVR series devices the user can make an adapter board for 20, 28 and 40 pin devices. The pin numbers shown in brackets correspond to PC parallel port connector.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIeWAsaD83tXkh_bIEa7NT0oOJ2g-Vn5Vwle6gGtQIejsoFAa6aFLEMVIu7rBlFyItkETOe2lAcxdrx7iXYz3aLhqO1ROjx00XJhylADfRM_RJ3bMXFH5xVW3VAnvUhZalWEQInN2aFAn2/s1600/isp2_sch.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIeWAsaD83tXkh_bIEa7NT0oOJ2g-Vn5Vwle6gGtQIejsoFAa6aFLEMVIu7rBlFyItkETOe2lAcxdrx7iXYz3aLhqO1ROjx00XJhylADfRM_RJ3bMXFH5xVW3VAnvUhZalWEQInN2aFAn2/s320/isp2_sch.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Figure 2: Circuit Diagram of the SPI Programmer&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Software&lt;/strong&gt;&lt;br /&gt;
The ISP-30a.zip file contains the main program and the i/o port driver. Place all files in the same folder.&lt;br /&gt;
The main screen view of the program is shown in figure 3.&lt;br /&gt;
&lt;br /&gt;
Also make sure do not program the RSTDISBL fuse in ATmega8, ATtiny26 and ATtiny2313 otherwise further spi programming is disable and you will need a parallel programmer to enable the spi programming. For the fuses setting consult the datasheet of the respective device.&lt;br /&gt;
&lt;br /&gt;
For the auto hardware detection it is necessary to short pin 2 and 12 of DB25 connector, otherwise the software uses the default parallel port i.e. LPT1.&lt;br /&gt;
&lt;br /&gt;
Following are the main features of this software,&lt;br /&gt;
&lt;br /&gt;
Read and write the Intel Hex file&lt;br /&gt;
Read signature, lock and fuse bits&lt;br /&gt;
Clear and Fill memory buffer&lt;br /&gt;
Verify with memory buffer&lt;br /&gt;
Reload current Hex file&lt;br /&gt;
Display buffer checksum&lt;br /&gt;
Program selected lock bits &amp;amp; fuses&lt;br /&gt;
Auto detection of hardware&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Note:&lt;/strong&gt;&lt;br /&gt;
The memory buffer contains both the code data and the eeprom data for the devices which have eeprom memory. The eeprom memory address in buffer is started after the code memory, so it is necessary the hex file should contains the eeprom start address after the end of code memory last address i.e. for 90S2313 the start address for eeprom memory is 0x800.&lt;br /&gt;
&lt;br /&gt;
The software does not provide the erase command because this function is performed automatically during device programming. If you are required to erase the controller, first use the clear buffer command then program the controller, this will erase the controller and also set the AVR device fuses to default setting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Download&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.4shared.com/file/P15DZebi/ISP-30a.html&quot;&gt;ISP-Flash Programmer Software ISP-30a.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3hHLPYRIGm47YWT3jc0EoKpYy3i-EHJJ9rrfqv-5CfvZXOlsnxJ7dQ27eHxCcTZwXbDV85E4vE5ziPfwNqCVC_9gHBZMqLKQRyBg_HqkYRTHqUhffAjTW2pKRlvC_9RWdMLt3rSiGxksU/s1600/ISP-Pgm.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3hHLPYRIGm47YWT3jc0EoKpYy3i-EHJJ9rrfqv-5CfvZXOlsnxJ7dQ27eHxCcTZwXbDV85E4vE5ziPfwNqCVC_9gHBZMqLKQRyBg_HqkYRTHqUhffAjTW2pKRlvC_9RWdMLt3rSiGxksU/s320/ISP-Pgm.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Figure 3: Main screen of the program ISP-Pgm Ver 3.0a</content><link rel='replies' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/2433812320747014088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3027206085468016848/2433812320747014088' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/2433812320747014088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/2433812320747014088'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/2010/06/isp-flash-microcontroller-programmer.html' title='ISP Flash Microcontroller Programmer'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNSq5C5Nzxnvr-XOMOTdY5zwCrtjheVTtwuuySJYP7UoVYyyZyJ50lCkPaV83SEGt8Iu5dpPOhS6bKT0nzmYijU2GcCVPkbjk2ivQnSnyMeyy-b43CPHCG6nP85HkFfY1PexYQPKqFyB00/s72-c/isp1_sch.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3027206085468016848.post-9222902557371213086</id><published>2010-06-23T11:57:00.027+05:00</published><updated>2010-06-26T14:40:50.180+05:00</updated><title type='text'>Graphic LCD</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjok9xiBlwwTpOxFnyZakICNPWGE2laXqelZ4ZyTTy_3xBsZD2lakg76LrTKVDisPRc1BtpcEVmRnGTZRpdM2FIa4hIm_jeecEvi9KZmjLznChGLdczeDdnLDNhdTX-xcWTjwJXb4zRNstx/s1600/Graphic_LCD_Display.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjok9xiBlwwTpOxFnyZakICNPWGE2laXqelZ4ZyTTy_3xBsZD2lakg76LrTKVDisPRc1BtpcEVmRnGTZRpdM2FIa4hIm_jeecEvi9KZmjLznChGLdczeDdnLDNhdTX-xcWTjwJXb4zRNstx/s320/Graphic_LCD_Display.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;Done working on Graphic LCD (GLCD) interfacing with 89c51. Here is exapmle &lt;a href=&quot;http://www.4shared.com/file/QXxRwUZG/glcd_test2.html&quot;&gt;asm&lt;/a&gt; file and &lt;a href=&quot;http://www.4shared.com/file/g9UymaF-/glcd_test2.html&quot;&gt;hex&lt;/a&gt; code file.&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;And following are the connection pattern for GLCD and 89c51.&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCaVHZESFYlRvABzYX7US3IAWkJ9YD38taymEAAl2p4lr1G5eMQYzjgWxT11BYBiTnaGJ4Qe3DpORinYL5Ep08TtsrFQUqBwQuw5SkhEyp_bn87l-3RwknGzIWoJ71_msywRvGQJZGi0pF/s1600/8051-interface-with-GLCD1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;290&quot; ru=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCaVHZESFYlRvABzYX7US3IAWkJ9YD38taymEAAl2p4lr1G5eMQYzjgWxT11BYBiTnaGJ4Qe3DpORinYL5Ep08TtsrFQUqBwQuw5SkhEyp_bn87l-3RwknGzIWoJ71_msywRvGQJZGi0pF/s400/8051-interface-with-GLCD1.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/9222902557371213086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3027206085468016848/9222902557371213086' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/9222902557371213086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/9222902557371213086'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/2010/06/graphic-lcd.html' title='Graphic LCD'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjok9xiBlwwTpOxFnyZakICNPWGE2laXqelZ4ZyTTy_3xBsZD2lakg76LrTKVDisPRc1BtpcEVmRnGTZRpdM2FIa4hIm_jeecEvi9KZmjLznChGLdczeDdnLDNhdTX-xcWTjwJXb4zRNstx/s72-c/Graphic_LCD_Display.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3027206085468016848.post-5269411688585344898</id><published>2010-06-18T20:15:00.001+05:00</published><updated>2010-06-19T09:10:31.147+05:00</updated><title type='text'>My 89C51 Development board</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim9knu1xhBflfm4vFNXC3KzoU2kG11ytgJDmvTpwoacGRmJmqgHM6fWRhUyycwJuk5rE4VjP3aoNi1UnqGyyAqHO07wV5bAykG_nOK3pT2112dWEo4xSZr3WTRRXlyWrKcae5m7t1q6auy/s1600/prototype_board.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; qu=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim9knu1xhBflfm4vFNXC3KzoU2kG11ytgJDmvTpwoacGRmJmqgHM6fWRhUyycwJuk5rE4VjP3aoNi1UnqGyyAqHO07wV5bAykG_nOK3pT2112dWEo4xSZr3WTRRXlyWrKcae5m7t1q6auy/s320/prototype_board.jpg&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWVQtpUi7Jz3YUIQrHyf_sLo2cf8Z3p4_pld9_AGGhc63c0RuVgMNBzIUnnOWRI4qZmZer_giAlAtp3n87vPk2rnkuv_wThtBJKRV3NoDJ_pj74UIyajp2OIDAug8oZAAc-QiocDcsjJW9/s1600/prototype_board1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; qu=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWVQtpUi7Jz3YUIQrHyf_sLo2cf8Z3p4_pld9_AGGhc63c0RuVgMNBzIUnnOWRI4qZmZer_giAlAtp3n87vPk2rnkuv_wThtBJKRV3NoDJ_pj74UIyajp2OIDAug8oZAAc-QiocDcsjJW9/s320/prototype_board1.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;This is my 89c51&amp;nbsp;development board with the help of this board life become so easy, using this board its so much easy to made projects, and also using above tools testing of any program is much easier then before.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/5269411688585344898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3027206085468016848/5269411688585344898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/5269411688585344898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/5269411688585344898'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/2010/06/my-89c51-development-board.html' title='My 89C51 Development board'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim9knu1xhBflfm4vFNXC3KzoU2kG11ytgJDmvTpwoacGRmJmqgHM6fWRhUyycwJuk5rE4VjP3aoNi1UnqGyyAqHO07wV5bAykG_nOK3pT2112dWEo4xSZr3WTRRXlyWrKcae5m7t1q6auy/s72-c/prototype_board.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3027206085468016848.post-7953734222557223102</id><published>2010-06-18T19:46:00.000+05:00</published><updated>2010-06-18T19:46:50.800+05:00</updated><title type='text'>Basic LCD Project</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisUeALDuPtJZBOrgv8Yr-clBtY3Mw8BIwZykCNiWox74hQWWlIw4e41Qw5V7dt1gEXigHFXpT13c5Zav9aWL0x_EtDbaxQZJ38JaRA_nx4Iyb39DrhUDL9H4Wp7bg6ThkQkpDJberyqgkH/s1600/lcd+circuit.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; qu=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisUeALDuPtJZBOrgv8Yr-clBtY3Mw8BIwZykCNiWox74hQWWlIw4e41Qw5V7dt1gEXigHFXpT13c5Zav9aWL0x_EtDbaxQZJ38JaRA_nx4Iyb39DrhUDL9H4Wp7bg6ThkQkpDJberyqgkH/s320/lcd+circuit.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtZm0_hJrUkYyMo1JgzM_2weY3cYZZYyUoU6TsGru7BbUzgMCp8hn-1qYYZRl-A4D8uGunV-niRk1XxjHJI-3jdr29BcAxvYIlI_TytH7yk_Zeo1Lb8N6DPgZJamf6rujeC5vOaWYip-eG/s1600/lcd+circuit1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; qu=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtZm0_hJrUkYyMo1JgzM_2weY3cYZZYyUoU6TsGru7BbUzgMCp8hn-1qYYZRl-A4D8uGunV-niRk1XxjHJI-3jdr29BcAxvYIlI_TytH7yk_Zeo1Lb8N6DPgZJamf6rujeC5vOaWYip-eG/s320/lcd+circuit1.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;&quot;&gt;This is my another project in which i interface 16x2 LCD with 89c51 microcontroller.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/7953734222557223102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3027206085468016848/7953734222557223102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/7953734222557223102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/7953734222557223102'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/2010/06/basic-lcd-project.html' title='Basic LCD Project'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisUeALDuPtJZBOrgv8Yr-clBtY3Mw8BIwZykCNiWox74hQWWlIw4e41Qw5V7dt1gEXigHFXpT13c5Zav9aWL0x_EtDbaxQZJ38JaRA_nx4Iyb39DrhUDL9H4Wp7bg6ThkQkpDJberyqgkH/s72-c/lcd+circuit.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3027206085468016848.post-4733649131854408767</id><published>2010-06-18T19:08:00.000+05:00</published><updated>2014-05-16T02:55:27.201+05:00</updated><title type='text'>Binary To Decimal Converter</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgas89hFuWKZJJAAZAruVnvbkq8AuIQ0qxuIH0FyPeJvE9lRSh2E-XMLW_-JcNPJK549FBmO-NYyXTpo8scTxIUQ4EdyiNn5okLTj4ItwR-NkqoiW5Omyn9vzq8SZBSzvUYEcl9LAkhNvw0/s1600/binary2decimal.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgas89hFuWKZJJAAZAruVnvbkq8AuIQ0qxuIH0FyPeJvE9lRSh2E-XMLW_-JcNPJK549FBmO-NYyXTpo8scTxIUQ4EdyiNn5okLTj4ItwR-NkqoiW5Omyn9vzq8SZBSzvUYEcl9LAkhNvw0/s320/binary2decimal.jpg&quot; qu=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This is my first 89c51 microcontroller project.&lt;br /&gt;
In this project i uses some TTL ic&#39;s to work done in which 74LS47 is use to convert the decimal data into 7-Segment signal, and 74LS07 is use as a Buffer to provide some current to LED&#39;s and drive 89c51 input.&lt;br /&gt;
&lt;br /&gt;
Click for&amp;nbsp;&lt;a href=&quot;http://www.4shared.com/zip/XAyynrvlce/binary2bcd.html&quot;&gt;Download&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/4733649131854408767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3027206085468016848/4733649131854408767' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/4733649131854408767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/4733649131854408767'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/2010/06/binary-to-decimal-converter.html' title='Binary To Decimal Converter'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgas89hFuWKZJJAAZAruVnvbkq8AuIQ0qxuIH0FyPeJvE9lRSh2E-XMLW_-JcNPJK549FBmO-NYyXTpo8scTxIUQ4EdyiNn5okLTj4ItwR-NkqoiW5Omyn9vzq8SZBSzvUYEcl9LAkhNvw0/s72-c/binary2decimal.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3027206085468016848.post-2904697353513399338</id><published>2010-06-18T18:32:00.003+05:00</published><updated>2010-06-19T09:17:38.558+05:00</updated><title type='text'>LED Test Example</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFHHg4Y4seMe5f5zpSzN7eemdSqjRpVqIJxaTsy4v-ec06hOML1_LUNQ3-YN2NejutRG5yh-bPEfUZQuNtdcarz_1DL_jx7lfMJApFfeWAjjyZcNK6P1EYqm6WgqFaR6BUBWeEJMQbziEs/s1600/led+test1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; qu=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFHHg4Y4seMe5f5zpSzN7eemdSqjRpVqIJxaTsy4v-ec06hOML1_LUNQ3-YN2NejutRG5yh-bPEfUZQuNtdcarz_1DL_jx7lfMJApFfeWAjjyZcNK6P1EYqm6WgqFaR6BUBWeEJMQbziEs/s320/led+test1.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this example i m trying to describe the basic components which have been attached to 89c51 microcontroller to make it run in normal mode.&lt;br /&gt;
And also in this example i Blink LED.&lt;br /&gt;
Following is the sample program to blink LED.&lt;br /&gt;
&lt;br /&gt;
ORG 0H&lt;br /&gt;
AGAIN:&lt;br /&gt;
CLR P2.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;;SEND LOW SIGNAL TO PORT 2 BIT NO. 0&lt;br /&gt;
CALL DELAY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;CALL DELAY SUBROUTINE&lt;br /&gt;
SETB P2.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;SEND&amp;nbsp;HIGH SIGNAL TO PORT 2 BIT NO. 0&lt;br /&gt;
CALL DELAY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;CALL DELAY SUBROUTINE&lt;br /&gt;
SJMP AGAIN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;JUMP TO LABEL AGAIN&lt;br /&gt;
&lt;br /&gt;
DELAY:&lt;br /&gt;
MOV R1,#255 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;MOVE 255 TO REGISTER R1&lt;br /&gt;
HERE:&lt;br /&gt;
MOV R2,#50&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;MOVE 50 TO REGISTER R1&lt;br /&gt;
DJNZ R2,$&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;DECREMENT IN R2 UNTILL IT BECOME ZERO&lt;br /&gt;
DJNZ R1,HERE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;DECREMENT IN R1 UNTILL IT BECOME ZERO&lt;br /&gt;
RET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;RETURN TO LAST POSITION&lt;br /&gt;
END</content><link rel='replies' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/2904697353513399338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3027206085468016848/2904697353513399338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/2904697353513399338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/2904697353513399338'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/2010/06/led-test-example.html' title='LED Test Example'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFHHg4Y4seMe5f5zpSzN7eemdSqjRpVqIJxaTsy4v-ec06hOML1_LUNQ3-YN2NejutRG5yh-bPEfUZQuNtdcarz_1DL_jx7lfMJApFfeWAjjyZcNK6P1EYqm6WgqFaR6BUBWeEJMQbziEs/s72-c/led+test1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3027206085468016848.post-557474711198040029</id><published>2010-06-18T10:23:00.005+05:00</published><updated>2010-06-18T12:36:45.083+05:00</updated><title type='text'>About 89c51 Microcontroller</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ99qR8Ts729P4j9kc0hBq8r7DqQodWJ79fxzqGZtaeSIuA8FxwiQm61UvzgGF5fWteM_2vXbSBn8Fl_TyAVmKiYcHnFiObSIaPWz2oMHZmzMSvkT7wlUpDZuh0VOXU55_vDsBucCoTHzV/s1600/image002.jpg&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 211px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ99qR8Ts729P4j9kc0hBq8r7DqQodWJ79fxzqGZtaeSIuA8FxwiQm61UvzgGF5fWteM_2vXbSBn8Fl_TyAVmKiYcHnFiObSIaPWz2oMHZmzMSvkT7wlUpDZuh0VOXU55_vDsBucCoTHzV/s320/image002.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5483986914430382034&quot; /&gt;&lt;/a&gt;&lt;br /&gt;8051 Microcontroller is a programable device which is used for controlling purpose.&lt;br /&gt;Basically 8051 controller is Mask porogramble means it will programed at the time of manufacturing and will not programed again, there is a derivative of 8051 microcontroller, 89c51 microcontroller which is reprogramable upto 10000 times, here is small discription abot the 89c51 microcontroller.&lt;br /&gt;It have 4 ports which are used as input or output according to your need.&lt;br /&gt;These prots are also programmed as bit wise pattern, means you can use each bit of microcontroller saperatelly as input or output.&lt;br /&gt;This 89c51 is 8-bit device mean each port have 8-bits for I/O, total of 32-bits in the controller.&lt;br /&gt;This device also have Timer, Serial Port interface and Interrupt controlling you can use these according to your need.&lt;br /&gt;This device have 4K of ROM space to store the program,and 256Bytes of RAM space, this device have ability to interface with TTL based devices and also with the external MEMORY to increase its data space, but when your are using external MEMORY the 2 ports of 89c51 microcontroller are used for this purpose.</content><link rel='replies' type='application/atom+xml' href='http://microcontroller4all.blogspot.com/feeds/557474711198040029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3027206085468016848/557474711198040029' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/557474711198040029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3027206085468016848/posts/default/557474711198040029'/><link rel='alternate' type='text/html' href='http://microcontroller4all.blogspot.com/2010/06/about-8051-microcontroller.html' title='About 89c51 Microcontroller'/><author><name>Wajid Ali Qureshi</name><uri>http://www.blogger.com/profile/13948200032522652887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqJ0-sSWDuRhqk3kaD0acrqWMXnaUjMzRSZndKYEXuORbCU6Twgw7a4MgWwD31oG1OP7HTJRgTnRAbG5SZQX15BDDKxWOa0QHoGYt6MM2BCv7Zqyqbcs_SfgoylZ-N4w/s220/waq2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ99qR8Ts729P4j9kc0hBq8r7DqQodWJ79fxzqGZtaeSIuA8FxwiQm61UvzgGF5fWteM_2vXbSBn8Fl_TyAVmKiYcHnFiObSIaPWz2oMHZmzMSvkT7wlUpDZuh0VOXU55_vDsBucCoTHzV/s72-c/image002.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>