<?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-3858630146716725915</id><updated>2024-09-04T09:34:44.859-04:00</updated><category term="ADC"/><category term="AT89s51"/><category term="DS89c450"/><category term="RMS to DC conversion"/><category term="SFR"/><category term="basics"/><category term="functions"/><category term="induction motor"/><category term="microcontroller"/><title type='text'>8051 MicroController</title><subtitle type='html'>Share Knowledge to Learn</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://8051microcontroller.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://8051microcontroller.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3858630146716725915.post-6959769087338883593</id><published>2010-11-25T06:20:00.010-05:00</published><updated>2012-03-12T02:05:30.996-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ADC"/><category scheme="http://www.blogger.com/atom/ns#" term="AT89s51"/><category scheme="http://www.blogger.com/atom/ns#" term="DS89c450"/><category scheme="http://www.blogger.com/atom/ns#" term="induction motor"/><category scheme="http://www.blogger.com/atom/ns#" term="microcontroller"/><category scheme="http://www.blogger.com/atom/ns#" term="RMS to DC conversion"/><title type='text'>Induction motor star-delta starter using microcontroller</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimziJIH62Fb-5atu0lmRTJ24F7Xed7CqmB4fME2sytIN5lpuWe3EiaQmo4s-dBX4rQCt93kogoga9zDCa8OzsgmDaUkUeC8CkmMJ9EBTaTkkG6vOuZXRUKkXi9P91NV6IPFPkqo4yoKbxC/s1600/power+ckt.jpg&quot;&gt;&lt;img style=&quot;MARGIN: 0px 10px 10px 0px; WIDTH: 320px; FLOAT: left; HEIGHT: 186px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5543448937325306050&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimziJIH62Fb-5atu0lmRTJ24F7Xed7CqmB4fME2sytIN5lpuWe3EiaQmo4s-dBX4rQCt93kogoga9zDCa8OzsgmDaUkUeC8CkmMJ9EBTaTkkG6vOuZXRUKkXi9P91NV6IPFPkqo4yoKbxC/s320/power+ckt.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtNclonDur6R-cM81333Z1Nt9nPCV9E_36L8jH91jheYsUb8U6w82IJL_qDRJ4_rv828t9T93rLIL1S2XoWim8I7aS8QSleeR8N1xLtH29HYzCselxsOThEK38E6oGr0l5cFQvSAfHyHeN/s1600/main+circuit.jpg&quot;&gt;&lt;img style=&quot;MARGIN: 0px 10px 10px 0px; WIDTH: 320px; FLOAT: left; HEIGHT: 168px; CURSOR: hand&quot; id=&quot;BLOGGER_PHOTO_ID_5543448851472734754&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtNclonDur6R-cM81333Z1Nt9nPCV9E_36L8jH91jheYsUb8U6w82IJL_qDRJ4_rv828t9T93rLIL1S2XoWim8I7aS8QSleeR8N1xLtH29HYzCselxsOThEK38E6oGr0l5cFQvSAfHyHeN/s320/main+circuit.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Prjoect to control induction motor. Provided single phasing preventer (SPP) and High and low voltage protection using DS89c450 microcontroller. its easy and works !&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://8051microcontroller.blogspot.com/feeds/6959769087338883593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3858630146716725915/6959769087338883593?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/6959769087338883593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/6959769087338883593'/><link rel='alternate' type='text/html' href='http://8051microcontroller.blogspot.com/2010/11/induction-motor-star-delta-starter.html' title='Induction motor star-delta starter using microcontroller'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimziJIH62Fb-5atu0lmRTJ24F7Xed7CqmB4fME2sytIN5lpuWe3EiaQmo4s-dBX4rQCt93kogoga9zDCa8OzsgmDaUkUeC8CkmMJ9EBTaTkkG6vOuZXRUKkXi9P91NV6IPFPkqo4yoKbxC/s72-c/power+ckt.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3858630146716725915.post-3710504365158746192</id><published>2008-02-29T04:16:00.001-05:00</published><updated>2008-04-16T07:06:56.161-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="basics"/><title type='text'>Introduction of Microntroller</title><content type='html'>Microcontroller design is highly user friendly. Only requirement is to raise questions in our mind! Of course, because it is logical subject.&lt;br /&gt;&lt;br /&gt;To understand the all actions, we should follow instructions based approach. Instructions will generate required signals and configurations of hardware with its main function. For example, MOVX instruction transfers data with external RAM and also sends logic high or low on RD/WR pins. In this sense it’s a user friendly to deign engineer, because instructions will do required interfacing activations.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, during study of 8051 keep track with instructions. Don’t try to understand hardware working and configuration alone but realize every working step with help of instructions.&lt;br /&gt;&lt;br /&gt;What should learn first, Hardware or software? Without knowledge of hardware its not possible to write fully 8051 utilized program. But to understand hardware functions, we need to learn instruction set and also to write programs which helpful to understand hardware functions. Keeping in mind to make easy learning by this approach, We should learn instruction set first.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;color:#3366ff;&quot;&gt;8051 uC has following salient features:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Four Bidirectional I/O Parralel Ports&lt;br /&gt;One Full Duplex serial Port&lt;br /&gt;Two 16-Bit Programmable Timer/Counters&lt;br /&gt;Bit and Byte Addressing&lt;br /&gt;128 Bytes RAM including 128 bit addressable Space&lt;br /&gt;4kB Flash Memory&lt;br /&gt;DC to 33MHz Operation&lt;br /&gt;Power down and Idle mode for power saving&lt;br /&gt;Five Programmable Interrupt Sources&lt;br /&gt;&lt;br /&gt;AT89C51 microcontrooler datasheet from ATMEL and DS89c450 microcontroller datasheet from Dallas Semiconductor was taken as a prime reference throughout the discussion of the blog.</content><link rel='replies' type='application/atom+xml' href='http://8051microcontroller.blogspot.com/feeds/3710504365158746192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3858630146716725915/3710504365158746192?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/3710504365158746192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/3710504365158746192'/><link rel='alternate' type='text/html' href='http://8051microcontroller.blogspot.com/2008/02/566.html' title='Introduction of Microntroller'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3858630146716725915.post-1109198078686576042</id><published>2008-02-29T04:14:00.001-05:00</published><updated>2008-04-16T07:07:24.148-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="functions"/><title type='text'>Functions of Timer</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMsEzLMa3xpWicYfYBpwDMPrE0HGmtV3lAUWh313GOlR8xmdCMZ_dco6HvsXKkopT0T1RrUBpwAA3ThHdmeZMjcmgWAiISXAb2Xuwpc3BnK8NtcL9kixA4ygximh4M6_mFcLjPSNYgMUnt/s1600-h/untitled.bmp&quot;&gt;&lt;/a&gt;&lt;div&gt;The 8051 microcontroller incorporates two general purpose programmable 16-bit timers/counters. they are termed as Timer 0 and Timer 1.&lt;br /&gt;&lt;br /&gt;We can configure timers in four operating modes by program. Also, we can initialize timer, start timer or stop timer as per our requirement by program. All this features places timers in a category of programmable timers.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;All three Major &lt;strong&gt;&lt;span style=&quot;color:#00cccc;&quot;&gt;Functions&lt;/span&gt;&lt;/strong&gt; of timers are explained here.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#ff0000;&quot;&gt;(1) Time Delay and Measuring Time&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Timer can be used to generate required time delay between two events. It can be also&lt;br /&gt;used to measure time duration between to events. These functions of a timer is purely&lt;br /&gt;described as a “Timer”.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#ff0000;&quot;&gt;(2) Counting the External Event&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Timer can be used to count any external events. When timer is used to count external&lt;br /&gt;event, it is known as “Counter”.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#ff0000;&quot;&gt;(3) Baud Rate Generation&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Serial communication requires defined baud rate. Timer 1 is used for baud rate&lt;br /&gt;generation. Timer 0 is not intended for this function. &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://8051microcontroller.blogspot.com/feeds/1109198078686576042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3858630146716725915/1109198078686576042?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/1109198078686576042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/1109198078686576042'/><link rel='alternate' type='text/html' href='http://8051microcontroller.blogspot.com/2008/02/dfadsfffddf.html' title='Functions of Timer'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3858630146716725915.post-4578350134045108372</id><published>2008-02-28T06:15:00.002-05:00</published><updated>2008-04-16T07:08:20.464-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SFR"/><title type='text'>Timer SFRs</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;Following six SFRs plays important role for timer functions. And that’s why they are known as timer SFRs.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;color:#ff0000;&quot;&gt;&lt;strong&gt;(1) TL0&lt;br /&gt;(2) TH0&lt;br /&gt;(3) TL1&lt;br /&gt;(4) TH1&lt;br /&gt;(5) TCON&lt;br /&gt;(6) TMOD &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:130%;color:#ff0000;&quot;&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color:#3333ff;&quot;&gt;(1) TL0- Timer 0 LSB register&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;Address: 8Ah&lt;br /&gt;Reset value: 00000000b&lt;br /&gt;Operation: Read and Write&lt;br /&gt;Addressability: Byte. It can be address as TL0 or 8Ah in byte addressing&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bit Format: &lt;/p&gt;&lt;p&gt;7--------6------5-------4-------3-------2 -------1-------0&lt;/p&gt;&lt;p&gt;TL0.7 --TL0.6--TL0.5--TL0.4--TL0.3--TL0.2--TL0.1--TL0.0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;color:#3333ff;&quot;&gt;(2) TH0- Timer 0 MSB register&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Address: 8Ch&lt;br /&gt;Reset value: 00000000b&lt;br /&gt;Operation: Read and Write&lt;br /&gt;Addressability: Byte. It can be address as TH0 or 8Ch in byte addressing&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bit Format:&lt;br /&gt;7--------6------5-------4-------3-------2 -------1-------0 &lt;/p&gt;&lt;p&gt;TH0.7--TH0.6--TH0.5--TH0.4--TH0.3--TH0.2--TH0.1--TH0.0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;color:#3333ff;&quot;&gt;(3) TL1- Timer 1 LSB register&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;Address: 8Bh&lt;br /&gt;Reset value: 00000000b&lt;br /&gt;Operation: Read and Write&lt;br /&gt;Addressability: Byte. It can be address as TL1 or 8Bh in byte addressing&lt;br /&gt;&lt;br /&gt;Bit Format:&lt;br /&gt;7--------6------5-------4-------3-------2 -------1-------0&lt;br /&gt;TL1.7 --TL1.6--TL1.5--TL1.4--TL1.3--TL1.2--TL1.1--TL1.0 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;color:#3333ff;&quot;&gt;(4) TH1- Timer 1 MSB register&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;Address: 8Dh&lt;br /&gt;Reset value: 00000000b&lt;br /&gt;Operation: Read and Write&lt;br /&gt;Addressability: Byte. It can be address as TH1 or 8Dh in byte addressing&lt;br /&gt;&lt;br /&gt;Bit Format:&lt;br /&gt;7--------6------5-------4-------3-------2 -------1-------0&lt;/p&gt;&lt;p&gt;TH1.7 --TH1.6--TH1.5--TH1.4 --TH1.3 --TH1.2 --TH1.1--TH1.1&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;color:#3333ff;&quot;&gt;(5) TCON : Timer/Counter Register&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Address: 88h&lt;br /&gt;Reset value: 00000000b&lt;br /&gt;Operation: Read and Write&lt;br /&gt;Addressability: Byte and Bit. It can be address as TCON.0, TCON.1, …, TCON.7 or 88.0h, 88.1h, …, 88.7 or by name of each bit (e.g. IT0) in bit addressing and TCON or 88h in byte addressing.&lt;br /&gt;&lt;br /&gt;Bit Format:&lt;br /&gt;7--------6------5-------4-------3-------2 -------1-------0&lt;/p&gt;&lt;p&gt;TF1----TR1----TF0----TR0----IE1-----IT1----IE0-----IT0&lt;br /&gt;&lt;br /&gt;IT0&lt;br /&gt;Bit 0&lt;br /&gt;Interrupt 0 Type Select.&lt;br /&gt;&lt;br /&gt;This bit selects whether the INT0 pin will detect edge orlevel triggered interrupts.&lt;br /&gt;0 = INT0 is level triggered.&lt;br /&gt;1 = INT0 is edge triggered&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;IE0&lt;br /&gt;Bit 1&lt;br /&gt;Interrupt 0 Edge Detect.&lt;br /&gt;&lt;br /&gt;This bit is set when an edge/level of the type defined&lt;br /&gt;by IT0 is detected. If IT0=1, this bit will remain set until cleared in software or the start of the External Interrupt 0 service routine.If IT0=0, this bit will inversely reflect the state of the INT0 pin.&lt;br /&gt;&lt;br /&gt;IT1&lt;br /&gt;Bit 2&lt;br /&gt;Interrupt 1 Type Select.&lt;br /&gt;&lt;br /&gt;This bit selects whether the INT1 pin will detect edge or level triggered interrupts.&lt;br /&gt;0 = INT1 is level triggered.&lt;br /&gt;1 = INT1 is edge triggered.&lt;br /&gt;&lt;br /&gt;IE1&lt;br /&gt;Bit 3&lt;br /&gt;Interrupt 1 Edge Detect.&lt;br /&gt;&lt;br /&gt;This bit is set when an edge/level of the type defined&lt;br /&gt;by IT1 is detected. If IT10=1, this bit will remain set until cleared in software or the start of the External Interrupt 1 service routine.If IT1=0, this bit will inversely reflect the state of the INT1 pin.&lt;br /&gt;&lt;br /&gt;TR0&lt;br /&gt;Bit 4&lt;br /&gt;Timer 0 Run Control.&lt;br /&gt;&lt;br /&gt;This bit enables/disables the operation of Timer 0.&lt;br /&gt;0 = Timer 0 is halted.&lt;br /&gt;1 = Timer 0 is enabled&lt;br /&gt;&lt;br /&gt;TF0&lt;br /&gt;Bit 5&lt;br /&gt;Timer 0 Overflow Flag.&lt;br /&gt;&lt;br /&gt;This bit indicates when Timer 0 overflows its maximum count as defined by the current mode. This bit can be cleared by software and is automatically cleared when the CPU vectors to the Timer 0 interrupt service routine or by software.&lt;br /&gt;0 = No Timer 0 overflow has been detected.&lt;br /&gt;1 = Timer 0 has overflowed its maximum count.&lt;br /&gt;&lt;br /&gt;TR1&lt;br /&gt;Bit 6&lt;br /&gt;Timer 1 Run Control.&lt;br /&gt;&lt;br /&gt;This bit enables/disables the operation of Timer 1.&lt;br /&gt;0 = Timer 1 is halted.&lt;br /&gt;1 = Timer 1 is enabled.&lt;br /&gt;&lt;br /&gt;TF1&lt;br /&gt;Bit 7&lt;br /&gt;Timer 1 Overflow Flag.&lt;br /&gt;&lt;br /&gt;This bit indicates when Timer 1 overflows its maximum count as defined by the current mode. This bit can be cleared by software and is automatically cleared when the CPU vectors to the Timer1 interrupt service routine.&lt;br /&gt;0 = No Timer 1 overflow has been detected.&lt;br /&gt;1 = Timer 1 has overflowed its maximum count.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;color:#3333ff;&quot;&gt;(6) TMOD : Timer Mode Control Register&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Address: 89h&lt;br /&gt;Reset value: 00000000b&lt;br /&gt;Operation: Read and Write&lt;br /&gt;Addressability: Byte. It can be address as TMOD or 89h in byte addressing.&lt;br /&gt;&lt;br /&gt;Bit Format:&lt;br /&gt;7--------6------5-------4-------3-------2 -------1-------0&lt;br /&gt;GATE--C/ T---T1M1---T1M0--GATE---C/ T---T0M1---T0M0&lt;br /&gt;&lt;br /&gt;T0M0&lt;br /&gt;Bit 0&lt;br /&gt;Timer 0 Mode Select.&lt;br /&gt;&lt;br /&gt;T0M1&lt;br /&gt;Bit 1&lt;br /&gt;Timer 0 Mode Select.&lt;br /&gt;&lt;br /&gt;C/T0&lt;br /&gt;Bit 2&lt;br /&gt;Timer 0 Counter/Timer Select.&lt;br /&gt;0 = Timer 0 is incremented by internal clocks.&lt;br /&gt;1 = Timer 0 is incremented by pulses on T0 when TR0 (TCON.4) is 1&lt;br /&gt;&lt;br /&gt;GATE0&lt;br /&gt;Bit 3&lt;br /&gt;Timer 0 Gate Control.&lt;br /&gt;This bit enable/disables the ability of Timer 0 to&lt;br /&gt;increment.&lt;br /&gt;0 = Timer 0 will clock when TR0=1, regardless of the state of INT0&lt;br /&gt;1 = Timer 0 will clock only when TR0=1 and INT01&lt;br /&gt;&lt;br /&gt;T1M1&lt;br /&gt;Bit 4&lt;br /&gt;Timer 1 Mode Select.&lt;br /&gt;&lt;br /&gt;T1M1&lt;br /&gt;Bit 5&lt;br /&gt;Timer 1 Mode Select.&lt;br /&gt;&lt;br /&gt;Bit 6&lt;br /&gt;Timer 1 Counter/Timer Select.&lt;br /&gt;0 = Timer 1 is incremented by internal clocks.&lt;br /&gt;1 = Timer 1 is incremented by pulses on T1 when TR1 (TCON.6) is 1&lt;br /&gt;&lt;br /&gt;GATE1&lt;br /&gt;Bit 7&lt;br /&gt;Timer 1 Gate Control.&lt;br /&gt;This bit enable/disables the ability of Timer 1 to increment.&lt;br /&gt;0 = Timer 1 will clock when TR1=1, regardless of the state of INT1&lt;br /&gt;1 = Timer 1 will clock only when TR1=1 and INT1=1&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://8051microcontroller.blogspot.com/feeds/4578350134045108372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3858630146716725915/4578350134045108372?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/4578350134045108372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/4578350134045108372'/><link rel='alternate' type='text/html' href='http://8051microcontroller.blogspot.com/2008/02/timer-sfrs.html' title='Timer SFRs'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3858630146716725915.post-7096695617079122238</id><published>2008-02-28T05:59:00.000-05:00</published><updated>2008-02-29T05:52:02.397-05:00</updated><title type='text'>Timer Modes of operation</title><content type='html'>&lt;span style=&quot;font-size:180%;color:#3333ff;&quot;&gt;Timer 0 Modes of operation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Timer 0 has four operating modes. Operating modes can be selected by configuring T0M0 and T0M1 bit of TMOD register as shown in table.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#ff6600;&quot;&gt;T0M1---T0M0 ---Mode---- Description&lt;br /&gt;0 -------0-------- Mode 0-- 8 bits&lt;br /&gt;0 -------1 --------Mode 1 ---16 bits&lt;br /&gt;1 -------0-------- Mode 2--- 8 bits with auto-reload&lt;br /&gt;1------- 1-------- Mode 3----Split into two 8 bit timer/counters.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Timer 0 will start under either of following two conditions:&lt;br /&gt;&lt;br /&gt;(1) If GATE0=0, Then TR0=1&lt;br /&gt;(2) If GATE0=1, Then TR0=1 and INT0 Pin=1&lt;br /&gt;&lt;br /&gt;From above discussion it is obvious that if only software control to run the timer 0 is required than clear GATE0 bit. In this case only software instruction, SETB TR0 will start the timer 0. If software and hardware both control is required to run the timer then set GATE0 bit. In this case only SETB TR0 software instruction will not run the timer 0 but INT0 pin status also must be 1 by hardware to run the timer 0.&lt;br /&gt;&lt;br /&gt;Starting the timer will increments TH0-TL0 register every machine cycle if C/T0=0. If C/T0=1, then high to low transition on pin T0 (P3.4) will increments timer register. Timer will starts to increment from initialize value. When timer attains maximum value, then in next count it rolls to all zero. When timer rolls over from all one to all zero, timer 0 flag bit, TF0 will set and timer 0 interrupt request is generated.&lt;br /&gt;&lt;br /&gt;If C/T0=1, then timer 0 counts external events occurring on pin T0. So, this is known as a counter operation of timer. The external input is sampled every machine cycle. When the sample is high in one cycle and low in the next one, the counter is incremented. Since it takes 2 machine cycles to recognize a high to low transition, the maximum count rate is oscillator frequency/24. There are no restrictions on the duty cycle of the external input signal, but to ensure that a given level is sampled at least once before it changes, it should be high or low at least one machine cycle.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;color:#00cccc;&quot;&gt;MODE 0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Clearing TMOD register bits T0M1 and T0M0 will select this operating mode. Instruction MOV TMOD, #xxxxxx00b will do this selection.&lt;br /&gt;&lt;br /&gt;Mode 0 configures Timer 0 as a 13-bit Timer/Counter. TL0 uses only bit 0 to bit 4 and bit 5 to bit 7 are ignored. TL0 register bit 0 to bit 4 serve as the 5 LSBs of the 13-bit timer. TH0 provides the 8 MSBs of the 13-bit timer. As shown in Figure, 8-bit TH0 and 5-bit TL0 are connected in cascade to form 13-bit operation.&lt;br /&gt;&lt;br /&gt;TH0.7 TH0.6 TH0.5 TH0.4 TH0.3 TH0.2 TH0.1 TH0.0 TL0.4 TL0.3 TL0.2 TL0.1 TL0.0&lt;br /&gt;&lt;br /&gt;Starting the timer will increments 13-bit TH0-TL0 register. Timer will starts to increment from initialize value. When timer attains maximum value 1111 1111 11111b (1FFFH), then in next count it rolls to all zero. TF0 will set and timer 0 interrupt request is generated.&lt;br /&gt;&lt;br /&gt;This sequence can be explained more clearly as following:&lt;br /&gt;&lt;br /&gt;TH0 TL0&lt;br /&gt;0000 0000 00000 ; It’s a initial value of timer register. We can initialize in the range of 0000 0000 00000 to 1111 1111 11111 by MOV instruction.&lt;br /&gt;0000 0000 00001 ; First increment&lt;br /&gt;…………………&lt;br /&gt;…………………&lt;br /&gt;0000 0000 11111 ; TL0(5-bit) atains its high value&lt;br /&gt;0000 0001 00000 ; TL0(5-bit) overflows and increments TH0 registers.&lt;br /&gt;0000 0001 00001&lt;br /&gt;…………………&lt;br /&gt;…………………&lt;br /&gt;1111 1111 11111 ; Higher Value&lt;br /&gt;0000 0000 00000 ; Timer 0 is overflowed. TF0 sets and Interrupt request is generated.&lt;br /&gt;&lt;br /&gt;0000 0000 00001 ; timer will continue to increment.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;color:#66cccc;&quot;&gt;MODE 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Clearing TMOD register bit T0M1 and setting T0M0 will select this operating mode.&lt;br /&gt;&lt;br /&gt;Mode 1 configures Timer 0 as a 16-bit Timer/Counter. As shown in Figure, 8-bit TH0 and 8-bit TL0 are connected in cascade to form 16-bit operation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Starting the timer will increment 16-bit TH0-TL0 register. Timer will starts to increment from initialize value. When timer attains maximum value 1111 1111 1111 1111b (FFFFH), then in next count it rolls to all zero. TF0 will set and timer 0 interrupt request is generated.&lt;br /&gt;&lt;br /&gt;This sequence can be explained more clearly as following:&lt;br /&gt;&lt;br /&gt;TH0 TL0&lt;br /&gt;0000 0000 0000 0000 ; It’s a initial value of timer register. We can initialize in the range&lt;br /&gt;of 0000 0000 00000 to 1111 1111 11111 by MOV instruction.&lt;br /&gt;0000 0000 0000 0001 ; First increment&lt;br /&gt;…………………&lt;br /&gt;…………………&lt;br /&gt;0000 0000 1111 1111 ; TL0 atains its high value&lt;br /&gt;0000 0001 0000 0000 ; TL0 overflows and increments TH0 registers.&lt;br /&gt;0000 0001 0000 0001&lt;br /&gt;…………………&lt;br /&gt;…………………&lt;br /&gt;1111 1111 1111 1111 ; Higher Value&lt;br /&gt;0000 0000 0000 0000 ; Timer 0 is overflowed. TF0 sets and Interrupt request is&lt;br /&gt;generated.&lt;br /&gt;0000 0000 0000 0001 ; timer will continue to increment&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;color:#00cccc;&quot;&gt;MODE 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Setting TMOD register bit T0M1 and clearing bit T0M0 will select this operating mode.&lt;br /&gt;&lt;br /&gt;Mode 2 configures Timer 0 as a 8-bit auto reload Timer/Counter. TH0 holds the 8-bit reset value. TL0 is used to form 8-bit timer operation.&lt;br /&gt;&lt;br /&gt;Starting the timer will increment 8-bit TL0 register. Timer will starts to increment from initialize value. When TL0 attains maximum value 1111 1111b (FFH), then in next count it loaded with contents of TH0 register. TF0 will set and timer 0 interrupt request is generated.&lt;br /&gt;&lt;br /&gt;This sequence can be explained more clearly as following:&lt;br /&gt;&lt;br /&gt;TL0&lt;br /&gt;0101 0101 ; It’s a initial value loaded from TH0( Suppose[TH0]=55h) register. We can&lt;br /&gt;initialize in the range of 0000 0000 to 1111 1111b by MOV instruction.&lt;br /&gt;0101 0110 ; First increment&lt;br /&gt;…………&lt;br /&gt;…………&lt;br /&gt;1111 1111 ; Higher Value&lt;br /&gt;0101 0101 ; Timer 0 is overflowed and loaded with TH0 contents. TF0 sets and&lt;br /&gt;Interrupt request is generated.&lt;br /&gt;0101 0110 ; timer will continue to increment&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;color:#00cccc;&quot;&gt;MODE 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Setting TMOD register bits T0M1 and T0M0 will select this operating mode.&lt;br /&gt;&lt;br /&gt;Mode 3 configures Timer 0 as two 8-bit separate Timers. Register TL0 and TH0 both works as a two independent timers.&lt;br /&gt;&lt;br /&gt;TL0 uses the timer 0 control bits C/T0 in the TMOD register and TR0 and TF0 in the TCON register. TH0 uses the timer 1 control bits TR1 and TF1 in the TCON register. TH0 can not perform counter operation.&lt;br /&gt;&lt;br /&gt;In this mode TH0 uses control bits of timer 1, TR1 and TF1. So, without TR1 bit, timer 1 can start in free running by forcing it in mode 0, 1 or 2 and stop by forcing it in mode 3. Without TF1, interrupt facility is not available but timer 1 can be used as a baud rate generator.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;color:#3333ff;&quot;&gt;Timer 1 Modes of operation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Timer 1 have also four operating modes. Operating modes can be selected by configuring T1M0 and T1M1 bit of TMOD register as shown in table.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;T0M1 T0M0 Mode Description 0 0 Mode 0 8 bits 0 1 Mode 1 16 bits 1 0 Mode 2 8 bits with auto-reload 1 1 Mode 3 Split into two 8 bit timer/counters.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#ffcc00;&quot;&gt;&lt;span style=&quot;color:#ff0000;&quot;&gt;T1M1---T1M0 ---Mode---- Description&lt;br /&gt;0 -------0-------- Mode 0-- 8 bits&lt;br /&gt;0 -------1 --------Mode 1 ---16 bits&lt;br /&gt;1 -------0-------- Mode 2--- 8 bits with auto-reload&lt;br /&gt;1------- 1-------- Mode 3----Timer 1 is halted, but holds its cou&lt;/span&gt;nt&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#00cccc;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Mode 0, mode 1 and Mode 2&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;These modes are identical to timer 0 mode 0, mode 1 and mode 2 respectively. In timer 1, bits T1M0, T1M1 C/T1, GATE1, TR1, TF1 and pin INT1 is utilizing instead of timer 0 bits T0M0, T0M1 C/T0, GATE0, TR0, TF0 and pin INT0 respectively.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;color:#00cccc;&quot;&gt;Mode 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In mode 3, Timer 1 is halted, but holds its count whatsoever. Without using TR1 bit, we can stop timer 1 by forcing it in this mode.</content><link rel='replies' type='application/atom+xml' href='http://8051microcontroller.blogspot.com/feeds/7096695617079122238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3858630146716725915/7096695617079122238?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/7096695617079122238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/7096695617079122238'/><link rel='alternate' type='text/html' href='http://8051microcontroller.blogspot.com/2008/02/modes.html' title='Timer Modes of operation'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3858630146716725915.post-6078899990242778367</id><published>2008-02-28T04:01:00.002-05:00</published><updated>2008-03-18T07:19:59.829-04:00</updated><title type='text'>Timer Programming</title><content type='html'>&lt;strong&gt;&lt;span style=&quot;font-size:130%;color:#3366ff;&quot;&gt;PROGRAM NO.01&lt;br /&gt;&lt;br /&gt;USING SOFTWARE POLLED TIMER APPROACH WRITE A PROGRAM WHICH BLINKS LED CONNECED AT BIT 0 OF PORT 1. LED SHOULD REMAIN ON FOR 500MS AND OFF FOR 500MS. USE TIMER 0 TO GENERATE BASIC 1MS DELAY.&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt;&lt;br /&gt;MOV TMOD,#01H ; 65536-1000=64536(FC18H)&lt;br /&gt;MOV TL0, #18H ;ASSUME 12MHZ CRYSTAL FREQUENCY&lt;br /&gt;MOV TH0, #0FCH&lt;br /&gt;SETB TR0&lt;br /&gt;&lt;br /&gt;MOV DPTR,#000CH ;200H=512D&lt;br /&gt;MAIN: JNB TF0, MAIN&lt;br /&gt;MOV TL0, #18H&lt;br /&gt;MOV TH0, #0FCH&lt;br /&gt;CLR TF0&lt;br /&gt;&lt;br /&gt;INC DPTR&lt;br /&gt;MOV A, DPH&lt;br /&gt;CJNE A, #02H, MAIN&lt;br /&gt;CPL P1.0&lt;br /&gt;MOV DPTR, #000CH&lt;br /&gt;AJMP MAIN&lt;br /&gt;&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color:#3333ff;&quot;&gt;PROGRAM NO.02&lt;br /&gt;&lt;br /&gt;WRIE AN ALP IN 8051 MICROCONTROLLER TO GENERATE 5MS DELAY USING FOLLOWIN METHODS: (1) REGISTER PAIR (2) TIMER-1 IN MODE-1.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#ff0000;&quot;&gt;(1) USING TIMERIN MODE-1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt;&lt;br /&gt;MAIN:&lt;br /&gt;MOV TMOD,#10H&lt;br /&gt;ACALL DELAY&lt;br /&gt;&lt;br /&gt;PASS: AJMP PASS&lt;br /&gt;&lt;br /&gt;DELAY: MOV TL1, #78H ;5MS DELAY&lt;br /&gt;MOV TH1, #0ECH ;TAKE F=12MHZ, 65536-5000=60536 (EC78H)&lt;br /&gt;SETB TR1&lt;br /&gt;L1: JNB TF1, L1&lt;br /&gt;CLR TR1&lt;br /&gt;RET&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#ff0000;&quot;&gt;(2) USING REGISTER PAIR&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt;&lt;br /&gt;MAIN:&lt;br /&gt;MOV TMOD,#10H&lt;br /&gt;ACALL DELAY&lt;br /&gt;&lt;br /&gt;PASS: AJMP PASS&lt;br /&gt;&lt;br /&gt;DELAY: ;MC =3+3R1+2R1R2&lt;br /&gt;MOV R1, #0C8H ; R1=200, R2=11&lt;br /&gt;L2: MOV R2, #0BH&lt;br /&gt;L1: DJNZ R2, L1&lt;br /&gt;DJNZ R1, L2&lt;br /&gt;RET&lt;br /&gt;&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;color:#3333ff;&quot;&gt;PROGRAM NO.03&lt;br /&gt;&lt;br /&gt;WRITE A PROGRAM TO USE TIMER 1 TO INTERRUPT THE PROGRAM AFTER A DELAY OF 2 MS. (CRYSTAL FREQUENCY = 10 MHZ).&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt;AJMP MAIN ; 2000/1.2=1667,65536-1667=63869 (F97DH)&lt;br /&gt;&lt;br /&gt;ORG 001BH&lt;br /&gt;MOV A, #7EH&lt;br /&gt;ADD A,TL1&lt;br /&gt;MOV TL1,A ;MOV TL1,#7DH&lt;br /&gt;MOV TH1, #0F9H&lt;br /&gt;RETI&lt;br /&gt;&lt;br /&gt;MAIN: MOV IE, #88H&lt;br /&gt;MOV TMOD,#10H&lt;br /&gt;MOV TL1, #7DH&lt;br /&gt;MOV TH1, #0F9H&lt;br /&gt;SETB TR1&lt;br /&gt;&lt;br /&gt;TIMEPASS: LJMP TIMEPASS&lt;br /&gt;&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color:#3333ff;&quot;&gt;PROGRAM NO.04&lt;br /&gt;&lt;br /&gt;WRITE AN ASEMBLY LANGUAGE PROGRAM TO MEASURE AN UNKNOWN FREQUENCY CONNECTED ON PIN P3.4(T0). USE TIMER 0 IN COUNTER MODE.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt;&lt;br /&gt;MAIN: MOV TMOD,#05H ; TIMER-0 IN MODE-1 AS COUNTER&lt;br /&gt;MOV TL0, #00H&lt;br /&gt;MOV TH0, #00H&lt;br /&gt;SETB TR0&lt;br /&gt;&lt;br /&gt;ACALL DELAY ;5+3R3+3R3R4+2R3R4R5&lt;br /&gt;CLR TR0&lt;br /&gt;MOV R0,TL0&lt;br /&gt;MOV R1,TH0&lt;br /&gt;&lt;br /&gt;AJMP MAIN&lt;br /&gt;&lt;br /&gt;DELAY: MOV R3, #32H&lt;br /&gt;LOOP3: MOV R4, #64H&lt;br /&gt;LOOP2: MOV R5, #64H&lt;br /&gt;LOOP1: DJNZ R5, LOOP1&lt;br /&gt;DJNZ R4, LOOP2&lt;br /&gt;DJNZ R3, LOOP3&lt;br /&gt;RET&lt;br /&gt;&lt;br /&gt;END&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;color:#3333ff;&quot;&gt;PROGRAM NO.05&lt;br /&gt;&lt;br /&gt;WRITE A PROGRAM WHICH CONTINUOUSLY READS FROM P0 AND SEND IT TO P1, WHILE SIMULTANEOUSLY CREATING SQUAREWAVE OF 5 KHZ ON PIN 2.1. USE TIMER 0 INTERRUPT SERVICE ROUTINE. INTIALIZE TIMER 0 IN MODE-2.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt;AJMP MAIN ;ASSUME 12MHZ CRYSTAL FREQUENCY&lt;br /&gt;;1/5KHZ=0.2MS&lt;br /&gt;; 256-100 =156 (9CH)&lt;br /&gt;&lt;br /&gt;ORG 000BH&lt;br /&gt;CPL P2.1&lt;br /&gt;RETI&lt;br /&gt;&lt;br /&gt;MAIN: MOV IE, #82H&lt;br /&gt;MOV TMOD,#02H&lt;br /&gt;MOV TH0, #9CH&lt;br /&gt;SETB TR0&lt;br /&gt;&lt;br /&gt;SEND: MOV P0, #0FFH&lt;br /&gt;MOV A, P0&lt;br /&gt;MOV P1, A&lt;br /&gt;AJMP SEND&lt;br /&gt;&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;color:#3333ff;&quot;&gt;PROGRAM NO.06&lt;br /&gt;&lt;br /&gt;WRITE AN ALP USING INTERRUPTS TO DO FOLLOWING TASK,(1) MAKE TIMER TO GENERATE A SQUAREWAVE OF 4KHZ FREQUNCY ON P2.0, (2) ASSUME THAT INT1 PIN IS CONNECTED TO A SWITCH THAT IS NORMALLY HIGH, WHWNEVER IT GOES LOW, IT SHOULD READ PORT P1, COMPLEMENT THE DATA AND SEND IT TO PORT P2.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt;AJMP MAIN&lt;br /&gt;&lt;br /&gt;ORG 000BH&lt;br /&gt;CPL P2.0&lt;br /&gt;RETI&lt;br /&gt;&lt;br /&gt;ORG 0013H&lt;br /&gt;AJMP IN_EXT&lt;br /&gt;&lt;br /&gt;MAIN: MOV IE, #86H&lt;br /&gt;MOV IP, #04H&lt;br /&gt;MOV TMOD,#0AH&lt;br /&gt;MOV TH0, #83H ;ASSUME 12MHZ CRYSTAL FREQUENCY&lt;br /&gt;SETB TR0 ;1/4KHZ=0.25MS, 125US HALF CYCLE PERID&lt;br /&gt;; 256-125 =131 (83H)&lt;br /&gt;PASS: AJMP PASS&lt;br /&gt;IN_EXT: MOV P1, #0FFH&lt;br /&gt;MOV A, P1&lt;br /&gt;CPL A&lt;br /&gt;MOV P2, A&lt;br /&gt;RETI&lt;br /&gt;END</content><link rel='replies' type='application/atom+xml' href='http://8051microcontroller.blogspot.com/feeds/6078899990242778367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3858630146716725915/6078899990242778367?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/6078899990242778367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/6078899990242778367'/><link rel='alternate' type='text/html' href='http://8051microcontroller.blogspot.com/2008/02/timer-programming.html' title='Timer Programming'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3858630146716725915.post-7037149794031808848</id><published>2008-02-28T04:01:00.001-05:00</published><updated>2008-03-01T04:43:30.299-05:00</updated><title type='text'>16 x 2 LCD interfacing with uC</title><content type='html'>&lt;span style=&quot;font-size:130%;color:#3366ff;&quot;&gt;16x2 LCD Display&lt;/span&gt; is interfaced with port P1 and Port P2 of 8051 microcontroller. Assemebly language program code is wriiten to display &quot;Fine&quot; on First line Fifth column of LCD display with using and Without using Busy Flag status.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;color:#3366ff;&quot;&gt;Circuit Diagram:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5172676125495158642&quot; style=&quot;DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI2rDuu8BjSTGmuni3AHkdhBLbrBrUI1Gg4JGCuuRnTbOD321a7Tu2Mt1waJzkKa-1PeJO7-4BrF-TPRy0AnV48t6OIh6KPYBDpsH4JUFu48bj_Ga5-_xJ_I5K2qoKrnaKUdmM3nV8-yl7/s320/16+x2+LCD+Display+Interfacing+with+8051+uC.bmp&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#3333ff;&quot;&gt;Assemebly language program Without using Busy Flag status:-&lt;/span&gt;&lt;/p&gt;&lt;p&gt;org 0000h&lt;br /&gt;mov a, #38h&lt;br /&gt;acall config&lt;br /&gt;acall delay&lt;br /&gt;mov a, #0eh&lt;br /&gt;acall config&lt;br /&gt;acall delay&lt;br /&gt;mov a, #01h&lt;br /&gt;acall config&lt;br /&gt;acall delay&lt;br /&gt;mov a, #06h&lt;br /&gt;acall config&lt;/p&gt;&lt;p&gt;acall delay&lt;br /&gt;mov a, #84h&lt;br /&gt;acall config&lt;br /&gt;acall delay&lt;br /&gt;mov a, #&#39;F&#39;&lt;br /&gt;acall display&lt;br /&gt;acall delay&lt;br /&gt;mov a, #&#39;i&#39;&lt;br /&gt;acall display&lt;br /&gt;acall delay&lt;br /&gt;mov a, #&#39;n&#39;&lt;br /&gt;acall display&lt;br /&gt;acall delay&lt;br /&gt;mov a, #&#39;e&#39;&lt;br /&gt;acall display&lt;br /&gt;acall delay&lt;br /&gt;&lt;br /&gt;config:&lt;br /&gt;mov p2, a&lt;br /&gt;clr p1.2 ;rs&lt;br /&gt;clr p1.1 ;r/w&lt;br /&gt;setb p1.0 ;e&lt;br /&gt;acall delay&lt;br /&gt;clr p1.0 ;e&lt;br /&gt;ret&lt;br /&gt;display:&lt;br /&gt;mov p2, a&lt;br /&gt;setb p1.2&lt;br /&gt;clr p1.1 ;r/w&lt;br /&gt;setb p1.0 ;e&lt;br /&gt;acall delay&lt;br /&gt;clr p1.0 ;e&lt;br /&gt;ret&lt;br /&gt;delay:&lt;br /&gt;mov r2, #01h&lt;br /&gt;here3: mov r3, #00h&lt;br /&gt;here2: mov r4, #00h&lt;br /&gt;here: djnz r4, here&lt;br /&gt;djnz r3, here2&lt;br /&gt;djnz r2, here3&lt;br /&gt;ret&lt;br /&gt;end&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#3333ff;&quot;&gt;Assemebly language program Without using Busy Flag status:-&lt;/span&gt;&lt;/p&gt;&lt;p&gt;org 0000h&lt;/p&gt;&lt;p&gt;acall delay&lt;br /&gt;mov a, #38h&lt;br /&gt;acall config&lt;/p&gt;&lt;p&gt;mov a, #0eh&lt;br /&gt;acall config&lt;br /&gt;mov a, #01h&lt;br /&gt;acall config&lt;br /&gt;mov a, #06h&lt;br /&gt;acall config&lt;br /&gt;mov a, #84h&lt;br /&gt;acall config&lt;br /&gt;&lt;br /&gt;mov a, #F&lt;br /&gt;acall display&lt;br /&gt;mov a, #&#39;i&#39;&lt;br /&gt;acall display&lt;br /&gt;mov a, #&#39;n&#39;&lt;br /&gt;acall display&lt;br /&gt;mov a, #&#39;e&#39;&lt;br /&gt;acall display&lt;br /&gt;&lt;br /&gt;main:&lt;br /&gt;ajmp main&lt;br /&gt;config:&lt;br /&gt;acall ready&lt;br /&gt;mov p2, a&lt;br /&gt;clr p1.2 ;rs&lt;br /&gt;clr p1.1 ;r/w&lt;br /&gt;setb p1.0 ;e&lt;br /&gt;nop&lt;br /&gt;nop&lt;br /&gt;nop&lt;br /&gt;nop&lt;br /&gt;clr p1.0 ;e&lt;br /&gt;ret&lt;br /&gt;display:&lt;br /&gt;acall ready&lt;br /&gt;mov p2, a&lt;br /&gt;setb p1.2 ;rs&lt;br /&gt;clr p1.1 ;r/w&lt;br /&gt;setb p1.0 ;e&lt;br /&gt;nop&lt;br /&gt;nop&lt;br /&gt;nop&lt;br /&gt;nop&lt;br /&gt;clr p1.0 ;e&lt;br /&gt;ret&lt;br /&gt;ready:&lt;br /&gt;setb p1.7&lt;br /&gt;clr p1.2 ;rs&lt;br /&gt;setb p1.1 ;r/w&lt;br /&gt;repeat: clr p1.0 ;e&lt;br /&gt;nop&lt;br /&gt;nop&lt;br /&gt;nop&lt;br /&gt;setb p1.0 ;e&lt;br /&gt;jb p1.7, repeat&lt;br /&gt;ret&lt;br /&gt;delay:&lt;br /&gt;mov r2, #2ah&lt;br /&gt;here3: mov r3, #00h&lt;br /&gt;here2: mov r4, #00h&lt;br /&gt;here: djnz r4, here&lt;br /&gt;djnz r3, here2&lt;br /&gt;djnz r2, here3&lt;br /&gt;ret&lt;br /&gt;end&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://8051microcontroller.blogspot.com/feeds/7037149794031808848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3858630146716725915/7037149794031808848?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/7037149794031808848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/7037149794031808848'/><link rel='alternate' type='text/html' href='http://8051microcontroller.blogspot.com/2008/02/16-x-2-lcd-interfacing-with-uc.html' title='16 x 2 LCD interfacing with uC'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI2rDuu8BjSTGmuni3AHkdhBLbrBrUI1Gg4JGCuuRnTbOD321a7Tu2Mt1waJzkKa-1PeJO7-4BrF-TPRy0AnV48t6OIh6KPYBDpsH4JUFu48bj_Ga5-_xJ_I5K2qoKrnaKUdmM3nV8-yl7/s72-c/16+x2+LCD+Display+Interfacing+with+8051+uC.bmp" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3858630146716725915.post-3462281555209467233</id><published>2008-02-28T04:01:00.000-05:00</published><updated>2008-03-01T00:07:35.762-05:00</updated><title type='text'>4x4 keypad ineterfacing with 8051 uC</title><content type='html'>&lt;span style=&quot;color:#3366ff;&quot;&gt;Hexkey pad (4x4)&lt;/span&gt; is interfaced with port P2 of 8051 microcontroller. A common cathode seven segment LED display is connected to port P1. Assemebly language program code is wriiten as given below to display pressed key no. on seven segment dispaly.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;color:#3366ff;&quot;&gt;Circuit Diagram:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8j3tIqm2J5YBhPr5QTcsCDvskOY4Gij49J5rYmilNTxuMbLFCoh0Xfp0Q12C9R8Il4dCd-mFBrfJ4OFXO_lZ5OZD2gJhKKyPW2Iu76uCW0j_9XR1xWPqT6QGLW59LMroIfb_n1yB7y3V6/s1600-h/4x4+keypad+interfacing+with+8051+uc.bmp&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5172632213749524274&quot; style=&quot;DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 415px; CURSOR: hand; HEIGHT: 374px; TEXT-ALIGN: center&quot; height=&quot;232&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8j3tIqm2J5YBhPr5QTcsCDvskOY4Gij49J5rYmilNTxuMbLFCoh0Xfp0Q12C9R8Il4dCd-mFBrfJ4OFXO_lZ5OZD2gJhKKyPW2Iu76uCW0j_9XR1xWPqT6QGLW59LMroIfb_n1yB7y3V6/s320/4x4+keypad+interfacing+with+8051+uc.bmp&quot; width=&quot;430&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#3333ff;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;Assembly Language Program:&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt;ROW:MOV p2, #0FH ;C+4R = R1+4R0&lt;br /&gt;JB p2.0, NEXT&lt;br /&gt;MOV R0,#00H&lt;br /&gt;AJMP COLUMN&lt;br /&gt;NEXT:&lt;br /&gt;JB p2.1, NEXT1&lt;br /&gt;MOV R0,#01H&lt;br /&gt;AJMP COLUMN&lt;br /&gt;NEXT1:&lt;br /&gt;JB p2.2, NEXT2&lt;br /&gt;MOV R0,#02H&lt;br /&gt;AJMP COLUMN&lt;br /&gt;NEXT2:&lt;br /&gt;JB p2.3, ROW&lt;br /&gt;MOV R0,#03H&lt;br /&gt;COLUMN:&lt;br /&gt;MOV p2, #0F0H&lt;br /&gt;JB p2.4, NEXT3&lt;br /&gt;MOV R1,#00H&lt;br /&gt;AJMP DISPLAY&lt;br /&gt;NEXT3:&lt;br /&gt;JB p2.5, NEXT4&lt;br /&gt;MOV R1,#01H&lt;br /&gt;AJMP DISPLAY&lt;br /&gt;NEXT4:&lt;br /&gt;JB p2.6, NEXT5&lt;br /&gt;MOV R1,#02H&lt;br /&gt;AJMP DISPLAY&lt;br /&gt;NEXT5:&lt;br /&gt;JB p2.7, ROW&lt;br /&gt;MOV R1,#03H&lt;br /&gt;DISPLAY:&lt;br /&gt;MOV A, R0&lt;br /&gt;RL A&lt;br /&gt;RL A&lt;br /&gt;ADD A, R1&lt;br /&gt;ACALL CONVERT&lt;br /&gt;MOV P1, A&lt;br /&gt;AJMP ROW&lt;br /&gt;CONVERT:&lt;br /&gt;INC A&lt;br /&gt;MOVC A, @A+PC&lt;br /&gt;RET&lt;br /&gt;DB 00111111B&lt;br /&gt;DB 00000110B&lt;br /&gt;DB 01011011B&lt;br /&gt;DB 01001111B&lt;br /&gt;DB 01100110B&lt;br /&gt;DB 01101101B&lt;br /&gt;DB 01111101B&lt;br /&gt;DB 00000111B&lt;br /&gt;DB 01111111B&lt;br /&gt;DB 01101111B&lt;br /&gt;DB 01110111B&lt;br /&gt;DB 01111100B&lt;br /&gt;DB 00111001B&lt;br /&gt;DB 01011110B&lt;br /&gt;DB 01111001B&lt;br /&gt;DB 01110001B&lt;br /&gt;END&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://8051microcontroller.blogspot.com/feeds/3462281555209467233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3858630146716725915/3462281555209467233?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/3462281555209467233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/3462281555209467233'/><link rel='alternate' type='text/html' href='http://8051microcontroller.blogspot.com/2008/02/4x4-keypad-ineterfacing-with-8051-uc.html' title='4x4 keypad ineterfacing with 8051 uC'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8j3tIqm2J5YBhPr5QTcsCDvskOY4Gij49J5rYmilNTxuMbLFCoh0Xfp0Q12C9R8Il4dCd-mFBrfJ4OFXO_lZ5OZD2gJhKKyPW2Iu76uCW0j_9XR1xWPqT6QGLW59LMroIfb_n1yB7y3V6/s72-c/4x4+keypad+interfacing+with+8051+uc.bmp" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3858630146716725915.post-3848104000974052563</id><published>2008-02-28T04:00:00.003-05:00</published><updated>2008-04-25T06:42:52.551-04:00</updated><title type='text'>Good Programs</title><content type='html'>WRITE A PROGRAM TO PUT THE NUMBER 8DH IN RAM LOCATIONS 30H TO 34H WITH THREE DIFFERENT METHOD.&lt;br /&gt;&lt;br /&gt;    ; FIRST METHOD&lt;br /&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt; &lt;br /&gt; MOV 30H, #8DH&lt;br /&gt; MOV 31H, #8DH&lt;br /&gt; MOV 32H, #8DH&lt;br /&gt; MOV 33H, #8DH&lt;br /&gt; MOV 34H, #8DH&lt;br /&gt;&lt;br /&gt; END&lt;br /&gt;&lt;br /&gt;; SECOND METHOD&lt;br /&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt;MOV A, #8DH&lt;br /&gt; MOV 30H, A&lt;br /&gt; MOV 31H, A&lt;br /&gt; MOV 32H, A&lt;br /&gt; MOV 33H, A&lt;br /&gt; MOV 34H, A&lt;br /&gt;&lt;br /&gt; END&lt;br /&gt;&lt;br /&gt;; THIRD METHOD&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; ORG 0000H&lt;br /&gt; MOV SP, #30H&lt;br /&gt; MOV 30H, #8DH&lt;br /&gt; PUSH 30H&lt;br /&gt; PUSH 30H&lt;br /&gt; PUSH 30H&lt;br /&gt; PUSH 30H &lt;br /&gt; END  &lt;br /&gt;WRITE A PROGRAM WHICH DOUBLE THE NUMBER IN R2 AND PUT THE RESULT IN REGISTER R3 (LSB) AND R4 (MSB).&lt;br /&gt;&lt;br /&gt;  ORG 0000H&lt;br /&gt;  &lt;br /&gt;  MOV R2, #04H       ; STORE SAMPLE DATA IN R2&lt;br /&gt;  MOV A, R2&lt;br /&gt;  MOV B, #02H&lt;br /&gt;  MUL AB&lt;br /&gt;  MOV R3,A&lt;br /&gt;  MOV R4,B&lt;br /&gt;&lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DIVIDE THE DATA IN RAM LOCATION 1FH BY THE NUMBER 09H AND PLACE THE QUOTIENT IN R4 AND REMAINDER IN R5.&lt;br /&gt;      &lt;br /&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt;MOV 1FH, #04H       ; STORE SAMPLE DATA IN 1FH&lt;br /&gt;MOV A, 1FH&lt;br /&gt;MOV B, #09H&lt;br /&gt;DIV AB&lt;br /&gt;MOV R4,A&lt;br /&gt;MOV R5, B&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WRITE  A PROGRAM WHICH READS UNSIGNED NUMBER FROM PORT 2 AND MULTIPLIES IT WITH THE NUMBER IN R3 AND PUT THE RESULT IN EXTERNAL RAM LOCATION 10H(MSB) AND 11H(LSB).&lt;br /&gt;&lt;br /&gt;  ORG 0000H&lt;br /&gt;&lt;br /&gt;  MOV P2, #0FFH&lt;br /&gt;  MOV A, P2&lt;br /&gt;  MOV B, R3&lt;br /&gt;  MUL AB&lt;br /&gt;&lt;br /&gt;  MOV DPTR, #0011H&lt;br /&gt;  MOVX @DPTR, A&lt;br /&gt;&lt;br /&gt;  MOV DPTR, #0010H&lt;br /&gt;  MOV A, B&lt;br /&gt;  MOVX @DPTR, A&lt;br /&gt;&lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WRITE A PROGRAM THAT ADD THE UNSIGNED NUMBERS FOUND IN INTERNAL RAM LOCATION 25H, 26H AND 27H TOGETHER AND PUT THE RESULT IN RAM LOCATIONS 31H(LSB) AND 30(MSB).&lt;br /&gt;&lt;br /&gt; ORG 0000H&lt;br /&gt; &lt;br /&gt; MOV 25H, #0F0H&lt;br /&gt; MOV 26H, #0FH&lt;br /&gt;MOV 27H, #01H&lt;br /&gt;&lt;br /&gt; MOV 30H, #00H&lt;br /&gt; MOV 31H, #00H&lt;br /&gt; &lt;br /&gt; MOV A, 25H&lt;br /&gt; ADD A, 26H&lt;br /&gt; JNC NEXT&lt;br /&gt; INC 30H&lt;br /&gt;NEXT:&lt;br /&gt; ADD A, 27H&lt;br /&gt; MOV 31H,A&lt;br /&gt; JNC STOP&lt;br /&gt;INC 30H&lt;br /&gt;&lt;br /&gt;STOP: &lt;br /&gt; AJMP STOP &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WRITE A PROGRAM TO GET THE CONTENTS OF THE DPTR TO PC&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; ORG 0000H &lt;br /&gt; MOV DPTR, #1234H       ;STORE SAMPLE DATA IN DPTR&lt;br /&gt; PUSH DPL&lt;br /&gt; PUSH DPH&lt;br /&gt; RET   &lt;br /&gt;  &lt;br /&gt; END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WRITE A PROGRAM TO PUT A RANDOM NUMBER AT 3CH AND INCREMENT IT UNTILL IT EQUALS 2AH.&lt;br /&gt;&lt;br /&gt;  ORG 0000H&lt;br /&gt;&lt;br /&gt;  MOV 3CH, #04H      ;STORE SAMPLE DATA IN 3CH&lt;br /&gt;&lt;br /&gt;MAIN: INC 3CH&lt;br /&gt;  MOV A, 3CH&lt;br /&gt;   CJNE A, #2AH, MAIN&lt;br /&gt;  &lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WRITE A PROGRAM THAT SWAP THE NIBBLES OF R0 AND R1 SO THAT THE LOW NIBBLES OF R0 SWAPS WITH THE HIGH NIBBLES OF R1 AND HIGH NIBBLE OF R0 SWAPS WITH THE LOW NIBBLE OF R1.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;  ORG 0000H&lt;br /&gt;&lt;br /&gt;MOV R0, #12H       ; STORE SAMPLE DATA IN R0&lt;br /&gt;MOV R1, #34H       ; STORE SAMPLE DATA IN R1&lt;br /&gt;&lt;br /&gt;  MOV 30H, R0&lt;br /&gt;  MOV 31H, R1&lt;br /&gt;  &lt;br /&gt;  MOV A,30H&lt;br /&gt;  SWAP A&lt;br /&gt;  MOV R1, A&lt;br /&gt;&lt;br /&gt;  MOV A, 31H&lt;br /&gt;  SWAP A&lt;br /&gt;  MOV R0, A&lt;br /&gt;&lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WRITE A PROGRAM OF 8051 TO MAKE OR OPERATION OF TWO BYTES FROM ARRRAYS STARTING FROM EXTERNAL RAM LOCATION 4000H TO 4009H AND 5000H TO 5009H. STORE RESULT AT EXTERNAL RAM LOCATION 6000H TO 6009H. MAKE OR OPRATION WITHOUT ORL INSTRUCTION.&lt;br /&gt; &lt;br /&gt;  ORG 0000H   &lt;br /&gt;  MOV R0, #00H&lt;br /&gt;MAIN: &lt;br /&gt;  MOV DPL, R0&lt;br /&gt;  MOV DPH, #40H&lt;br /&gt;  MOVX A, @DPTR&lt;br /&gt;     CPL A&lt;br /&gt;      MOV 40H, A &lt;br /&gt;     &lt;br /&gt;  MOV DPH, #50H&lt;br /&gt;  MOVX A, @DPTR&lt;br /&gt;      CPL A&lt;br /&gt;      &lt;br /&gt;  ANL A, 40H&lt;br /&gt;  CPL A&lt;br /&gt;  MOV DPH, #60H&lt;br /&gt;  MOVX @DPTR, A&lt;br /&gt;&lt;br /&gt;  INC R0&lt;br /&gt;  CJNE R0, #0AH, MAIN&lt;br /&gt;&lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CONVERT A SERIES OF PACKED BCD NUMBERS LOCATED IN ROM LOCATION STARTING FROM 0300H TO 0304H INTO ASCII CODE. STORE RESULT AT INTERNAL RAM LOCATION STARTING FROM 40H.&lt;br /&gt;&lt;br /&gt;  ORG 0000H&lt;br /&gt;  MOV DPTR, #0300H&lt;br /&gt;  MOV R1,#40H&lt;br /&gt;&lt;br /&gt;MAIN: MOV A, #00H&lt;br /&gt;  MOVC A, @A+DPTR&lt;br /&gt;  MOV R0, A&lt;br /&gt;  ANL A, #0FH&lt;br /&gt;  ADD A,#30H&lt;br /&gt;  MOV @R1,A&lt;br /&gt;  &lt;br /&gt;  MOV A,R0&lt;br /&gt;  SWAP A&lt;br /&gt;  ANL A,#0FH&lt;br /&gt;  ADD A, #30H&lt;br /&gt;  INC R1&lt;br /&gt;  MOV @R1, A&lt;br /&gt;&lt;br /&gt;  INC R1 &lt;br /&gt;  INC DPTR&lt;br /&gt;&lt;br /&gt;  CJNE R1, #4AH, MAIN&lt;br /&gt;&lt;br /&gt;PASS:   AJMP PASS  &lt;br /&gt;&lt;br /&gt;  END&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;MAKE PROGRAM WHERE LOOPS RUN SO LED L1 IS &quot;ON&quot;, WHEN SWITCH S1 IS PRESS AND LED L2 IS &quot;ON&quot; WHEN SWITCH S2 IS PRESS.&lt;br /&gt;&lt;br /&gt;  ORG 0000H&lt;br /&gt; &lt;br /&gt;  SETB P3.0&lt;br /&gt;  SETB P3.1 &lt;br /&gt;&lt;br /&gt;START:  MOV C, P3.0&lt;br /&gt;  MOV P2.0, C&lt;br /&gt;  MOV C, P3.1&lt;br /&gt;  MOV P2.1, C&lt;br /&gt;  AJMP START&lt;br /&gt;&lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;INTERFACE ONE COMMON CATHODE TYPE SEVEN SEGMENT DISPLAY WITH PORT 1 AND DRAW THE NECESSARY HARDWARE DIAGRAM. THEN WRITE A PROGRAM THAT DISPLAYS PATTERN &#39;E&#39;  FOR 1 SECOND AND OFF FOR 1 SECOND ALSO, CONTINUOUSLY.&lt;br /&gt; &lt;br /&gt;  ORG 0000H&lt;br /&gt;  &lt;br /&gt;MAIN: &lt;br /&gt;  &lt;br /&gt;  MOV P2, #01111001b&lt;br /&gt;  ACALL DELAY&lt;br /&gt;&lt;br /&gt;  MOV P2, #00000000b&lt;br /&gt;  ACALL DELAY&lt;br /&gt;&lt;br /&gt;  AJMP MAIN &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;DELAY:   MOV R1, #07H  ; 1 Second delay loop&lt;br /&gt;LOOP3:   MOV R2, #00H&lt;br /&gt;LOOP2: MOV R3, #00H&lt;br /&gt;LOOP1: DJNZ R3, LOOP1&lt;br /&gt;  DJNZ R2, LOOP2&lt;br /&gt;  DJNZ R1, LOOP3&lt;br /&gt;  RET&lt;br /&gt;   &lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;USING SOFTWARE POLLED TIMER APPROACH WRITE A PROGRAM WHICH BLINKS LED CONNECED AT BIT 0 OF PORT 1. LED SHOULD REMAIN ON FOR 500MS AND OFF FOR 500MS. USE TIMER 0 TO GENERATE BASIC 1MS DELAY.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; ORG 0000H&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; MOV TMOD,#01H   ; 65536-1000=64536(FC18H)&lt;br /&gt; MOV TL0, #18H  ;ASSUME 12MHZ CRYSTAL FR.    MOV TH0, #0FCH&lt;br /&gt; SETB TR0   &lt;br /&gt; &lt;br /&gt; MOV DPTR,#000CH     ;200H=512D&lt;br /&gt;&lt;br /&gt;MAIN:&lt;br /&gt;JNB TF0, MAIN  &lt;br /&gt; MOV TL0, #18H  &lt;br /&gt; MOV TH0, #0FCH&lt;br /&gt; CLR TF0&lt;br /&gt;&lt;br /&gt; INC DPTR&lt;br /&gt;  MOV A, DPH&lt;br /&gt;  CJNE A, #02H, MAIN&lt;br /&gt;  CPL P1.0&lt;br /&gt;  MOV DPTR, #000CH&lt;br /&gt;  AJMP MAIN&lt;br /&gt;&lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WRITE A PROGRAM USING INTERRUPTS TO GENERATE A SQUARE WAVE OF 2KHZ ON PIN P1.5. USE TIMER 0 AND MODE 1. &lt;br /&gt;&lt;br /&gt;    ;ASSUME 12MHZ CRYSTAL FREQUENCY&lt;br /&gt;      ;1/2KHZ=0.5MS     &lt;br /&gt;      ; 65536-250 =65286 (FF06H)&lt;br /&gt;  &lt;br /&gt;  ORG 0000H&lt;br /&gt;   MOV TMOD,#01H     &lt;br /&gt;  SETB TR0&lt;br /&gt;&lt;br /&gt;START: MOV TL0, #06H &lt;br /&gt;  MOV TH0, #0FFH&lt;br /&gt;&lt;br /&gt;HERE: JNB TF0, HERE&lt;br /&gt;  CPL P1.5&lt;br /&gt;  AJMP START&lt;br /&gt;&lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  ORG 0000H    &lt;br /&gt;   &lt;br /&gt;MAIN:  &lt;br /&gt;  MOV TMOD,#10H    &lt;br /&gt;  ACALL DELAY&lt;br /&gt;&lt;br /&gt;PASS: AJMP PASS&lt;br /&gt; &lt;br /&gt;DELAY:&lt;br /&gt;      ;MC =3+3R1+2R1R2&lt;br /&gt;  MOV R1, #0C8H ;R1=200, R2=11&lt;br /&gt;L2:  MOV R2, #0BH&lt;br /&gt;L1:  DJNZ R2, L1&lt;br /&gt;  DJNZ R1, L2&lt;br /&gt;  RET&lt;br /&gt;     END&lt;br /&gt;&lt;br /&gt;WRITE A PROGRAM TO USE TIMER 1 TO INTERRUPT THE PROGRAM AFTER A DELAY OF 2 MS. (CRYSTAL FREQUENCY = 10 MHZ).&lt;br /&gt;  &lt;br /&gt;  ORG 0000H&lt;br /&gt;  AJMP MAIN ; 2000/1.2=1667,65536-1667=63869 (F97DH)&lt;br /&gt;  &lt;br /&gt;  ORG 001BH       &lt;br /&gt;  MOV TL1,#7DH  &lt;br /&gt;  MOV TH1, #0F9H&lt;br /&gt;  RETI&lt;br /&gt;&lt;br /&gt;MAIN:  MOV IE, #88H&lt;br /&gt;  MOV TMOD,#10H&lt;br /&gt;  MOV TL1, #7DH&lt;br /&gt;  MOV TH1, #0F9H   &lt;br /&gt;  SETB TR1&lt;br /&gt;&lt;br /&gt;TIMEPASS: LJMP TIMEPASS&lt;br /&gt;&lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WRITE AN ASEMBLY LANGUAGE PROGRAM TO MEASURE AN UNKNOWN FREQUENCY CONNECTED ON PIN P3.4(T0). USE TIMER 0 IN COUNTER MODE.&lt;br /&gt;&lt;br /&gt;     ORG 0000H&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;MAIN:  MOV TMOD,#05H   ; TIMER-0 IN MODE-1 AS COUNTER &lt;br /&gt;  MOV TL0, #00H&lt;br /&gt;  MOV TH0, #00H&lt;br /&gt;  SETB TR0&lt;br /&gt;  &lt;br /&gt;  ACALL DELAY   ;5+3R3+3R3R4+2R3R4R5&lt;br /&gt;  CLR TR0&lt;br /&gt;  MOV R0,TL0&lt;br /&gt;  MOV R1,TH0&lt;br /&gt;  &lt;br /&gt;  AJMP MAIN&lt;br /&gt;&lt;br /&gt;DELAY:  MOV R3, #08H   &lt;br /&gt;LOOP3: MOV R4, #00H&lt;br /&gt;LOOP2: MOV R5, #004H&lt;br /&gt;LOOP1: DJNZ R5, LOOP1&lt;br /&gt;  DJNZ R4, LOOP2&lt;br /&gt;  DJNZ R3, LOOP3 &lt;br /&gt;  RET&lt;br /&gt;&lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WRITE A PROGRAM WHICH CONTINUOUSLY READS FROM P0 AND SEND IT TO P1, WHILE SIMULTANEOUSLY CREATING SQUAREWAVE OF 5 KHZ ON PIN 2.1. USE TIMER 0 INTERRUPT SERVICE ROUTINE. INTIALIZE TIMER 0 IN MODE-2.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  ORG 0000H&lt;br /&gt;  AJMP MAIN  ;ASSUME 12MHZ CRYSTAL FR.&lt;br /&gt;      ;1/5KHZ=0.2MS     &lt;br /&gt;      ; 256-100 =156 (9CH)&lt;br /&gt;  &lt;br /&gt;  ORG 000BH&lt;br /&gt;  CPL P2.1  &lt;br /&gt;  RETI&lt;br /&gt;&lt;br /&gt;MAIN:  MOV IE, #82H&lt;br /&gt;  MOV TMOD,#02H &lt;br /&gt;  MOV TH0, #9CH   &lt;br /&gt;  SETB TR0&lt;br /&gt;&lt;br /&gt;SEND:  MOV P0, #0FFH&lt;br /&gt;  MOV A, P0&lt;br /&gt;  MOV P1, A&lt;br /&gt;  AJMP SEND&lt;br /&gt;&lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WRITE AN ALP USING INTERRUPTS TO DO FOLLOWING TASK,(1) MAKE TIMER TO GENERATE A SQUAREWAVE OF 4KHZ FREQUNCY ON P2.0, (2) ASSUME THAT INT1 PIN IS CONNECTED TO A SWITCH THAT IS NORMALLY HIGH, WHWNEVER IT GOES LOW, IT SHOULD READ PORT P1, COMPLEMENT THE DATA AND SEND IT TO PORT P2.&lt;br /&gt;&lt;br /&gt;  ORG 0000H&lt;br /&gt;  AJMP MAIN&lt;br /&gt;&lt;br /&gt;  ORG 000BH&lt;br /&gt;  CPL P2.0&lt;br /&gt;  RETI&lt;br /&gt;&lt;br /&gt;  ORG 0013H&lt;br /&gt;  AJMP IN_EXT&lt;br /&gt;&lt;br /&gt;MAIN:&lt;br /&gt;  MOV IE, #86H&lt;br /&gt;  MOV IP, #04H&lt;br /&gt;&lt;br /&gt;  MOV TMOD,#0AH &lt;br /&gt;  MOV TH0, #83H   &lt;br /&gt;  SETB TR0      &lt;br /&gt;&lt;br /&gt;;ASSUME 12MHZ CRYSTAL FREQUENCY&lt;br /&gt;;1/4KHZ=0.25MS, 125US FOR HALF PERID &lt;br /&gt;; 256-125 =131 (83H)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PASS:   AJMP PASS  &lt;br /&gt;  &lt;br /&gt;        &lt;br /&gt;IN_EXT:  MOV P1, #0FFH&lt;br /&gt;   MOV A, P1&lt;br /&gt;   CPL A&lt;br /&gt;   MOV P2, A&lt;br /&gt;   RETI&lt;br /&gt;   END&lt;br /&gt;MENTION THE STEPS IN PROGRAMMING THE 8051 TO TRANSFER CHARACTER BYTES SERIALLY BY METHOD OF POLLING. THEN WRITE A PROGRAM TO TRANSMITT &quot;NGU&quot; SERIALLY AT 2400 BAUDRATE. USE TIMER 1 TO SET BAUD RATE.&lt;br /&gt;  &lt;br /&gt;  ORG 0000H&lt;br /&gt;&lt;br /&gt;  MOV TMOD,#20H  &lt;br /&gt;  MOV SCON,#50H&lt;br /&gt;  MOV TH1,#0F4H&lt;br /&gt;  SETB TR1  &lt;br /&gt;&lt;br /&gt;    MOV A, #&#39;N&#39;&lt;br /&gt;     ACALL SEND_PC    &lt;br /&gt;     MOV A, #&#39;G&#39;&lt;br /&gt;     ACALL SEND_PC    &lt;br /&gt;     MOV A, #&#39;U&#39;&lt;br /&gt;     ACALL SEND_PC  &lt;br /&gt;&lt;br /&gt;PASS: AJMP PASS    &lt;br /&gt;&lt;br /&gt;SEND_PC: MOV SBUF, A&lt;br /&gt;HERE: JNB TI, HERE &lt;br /&gt;  CLR TI&lt;br /&gt;  RET&lt;br /&gt;&lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WRITE A PROGRAM WITH TWO ISRS FOR INT0 AND INT1 RESPECTIVELY SATISFYING FOLLOWING CONDITIONS. WHEN THERE IS NO INTERRUPT, MAINLINE PROGRAM SHOULD BLINK GREEN LED THROUGH PORT PIN P1.0 FOR 1 SECOND ON AND 1 SCOND OFF CONTINUOUSLY. WHEN EDGE TRIGGER INTERRUPT WILL COME AT INT0, GLOW RED LED THROUGH PORT PIN P1.1 FOR 1 SECOND, THEN TURN IT OFF AND RETURN TO MAINLINE. WHEN EDGE TRIGGER INTERRUPT WILL COME AT INT1, GLOW YELLOW LED THORUGH PORT PIN P1.2 FOR 1 SECOND, THEN TURN IT OFF AND RETURN TO MAINLINE PROGRAM. DRAW NECESSARY HARDWARE.&lt;br /&gt;&lt;br /&gt;      &lt;br /&gt;  ORG 0000H&lt;br /&gt;  AJMP MAIN&lt;br /&gt;&lt;br /&gt;  GREEN  EQU     P1.0&lt;br /&gt;  RED   EQU   P1.1&lt;br /&gt;  YELLOW EQU   P1.2&lt;br /&gt;  &lt;br /&gt;  ORG 0003H&lt;br /&gt;  AJMP ISR_IN0&lt;br /&gt;       &lt;br /&gt;  ORG 0013H&lt;br /&gt;  AJMP ISR_IN1&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;MAIN:   MOV IE,#85H&lt;br /&gt;  MOV TCON,#05H&lt;br /&gt;  MOV P1, #00H&lt;br /&gt; &lt;br /&gt;LOOP:  SETB GREEN&lt;br /&gt;  ACALL DELAY&lt;br /&gt;  CLR GREEN &lt;br /&gt;  ACALL DELAY&lt;br /&gt;  AJMP LOOP&lt;br /&gt;&lt;br /&gt;ISR_IN0:&lt;br /&gt;  SETB RED &lt;br /&gt;  ACALL DELAY&lt;br /&gt;  CLR RED&lt;br /&gt;  RETI&lt;br /&gt;&lt;br /&gt;ISR_IN1:&lt;br /&gt;  SETB YELLOW &lt;br /&gt;  ACALL DELAY&lt;br /&gt;  CLR YELLOW&lt;br /&gt;  RETI  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DELAY:     ; 1 SECOND DELAY&lt;br /&gt;  MOV R1, #08H  ;  5+3R1+3R1R2+2R1R2R3&lt;br /&gt;LOOP3:  MOV R2, #00H&lt;br /&gt;LOOP2: MOV R3, #00H&lt;br /&gt;LOOP1: DJNZ R3, LOOP1&lt;br /&gt;  DJNZ R2, LOOP2&lt;br /&gt;  DJNZ R1, LOOP3&lt;br /&gt;  RET &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;EXPLAIN WITH THE HELP OF DIAGRAM THE NECESSARY CIRCUIT TO INTERFACE 4X4 KEYPAD WITH 8051. DISCUSS THE LOGICAL STEPS TO DETECT THE KEY PRESSED AND ENCODE IT. WRITE AN ALPTO DISPLAY THE DETECTED KEY ON ONE 7-SEGMENT DISPLAY.&lt;br /&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;FIND_ROW:&lt;br /&gt;&lt;br /&gt; MOV P3, #0FH &lt;br /&gt; &lt;br /&gt; MOV R0,#00H&lt;br /&gt; JNB P3.0, FIND_COLUMN&lt;br /&gt;  MOV R0,#01H&lt;br /&gt; JNB P3.1, FIND_COLUMN&lt;br /&gt; MOV R0,#02H&lt;br /&gt; JNB P3.2, FIND_COLUMN&lt;br /&gt; MOV R0,#03H&lt;br /&gt; JNB P3.3, FIND_COLUMN&lt;br /&gt; AJMP FIND_ROW&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;  &lt;br /&gt;FIND_COLUMN:&lt;br /&gt; MOV P3, #0F0H &lt;br /&gt; &lt;br /&gt; MOV R1,#00H&lt;br /&gt; JNB P3.4, CALULATE_KEY&lt;br /&gt;  MOV R1,#01H&lt;br /&gt; JNB P3.5, CALULATE_KEY&lt;br /&gt; MOV R1,#02H&lt;br /&gt; JNB P3.6, CALULATE_KEY&lt;br /&gt; MOV R1,#03H&lt;br /&gt; JNB P3.7, CALULATE_KEY&lt;br /&gt; AJMP FIND_ROW&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CALULATE_KEY:&lt;br /&gt;&lt;br /&gt; MOV A, R0&lt;br /&gt; RL A&lt;br /&gt; RL A&lt;br /&gt; ADD A, R1&lt;br /&gt; ACALL CONVERT&lt;br /&gt; MOV P2, A&lt;br /&gt; AJMP FIND_ROW  &lt;br /&gt;&lt;br /&gt;CONVERT:&lt;br /&gt; INC A&lt;br /&gt; MOVC A, @A+PC&lt;br /&gt; RET &lt;br /&gt;&lt;br /&gt; DB 00111111B&lt;br /&gt; DB 00000110B&lt;br /&gt; DB 01011011B&lt;br /&gt; DB 01001111B&lt;br /&gt; DB 01100110B&lt;br /&gt; DB 01101101B&lt;br /&gt; DB 01111101B&lt;br /&gt; DB 00000111B&lt;br /&gt; DB 01111111B&lt;br /&gt; DB 01101111B&lt;br /&gt; DB 01110111B&lt;br /&gt; DB 01111100B&lt;br /&gt; DB 00111001B&lt;br /&gt; DB 01011110B&lt;br /&gt; DB 01111001B&lt;br /&gt; DB 01110001B&lt;br /&gt;&lt;br /&gt; END&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;INTERFACE LCD AND WRITE A PROGRAM TO DIPLAY “Hello India”.&lt;br /&gt;&lt;br /&gt;ORG 0000H&lt;br /&gt; &lt;br /&gt; MOV A, #3CH&lt;br /&gt; ACALL COMNWRT&lt;br /&gt;&lt;br /&gt; MOV A, #01H&lt;br /&gt; ACALL COMNWRT&lt;br /&gt; &lt;br /&gt; MOV A, #0EH&lt;br /&gt; ACALL COMNWRT&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt; MOV A, #06H&lt;br /&gt; ACALL COMNWRT&lt;br /&gt; &lt;br /&gt; MOV A, #84H&lt;br /&gt; ACALL COMNWRT&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; MOV A, #&#39;H&#39;&lt;br /&gt; ACALL DATAWRT&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; MOV A, #&#39;E&#39;&lt;br /&gt; ACALL DATAWRT&lt;br /&gt; &lt;br /&gt; MOV A, #&#39;L&#39;&lt;br /&gt; ACALL DATAWRT&lt;br /&gt; &lt;br /&gt; MOV A, #&#39;L&#39;&lt;br /&gt; ACALL DATAWRT&lt;br /&gt; &lt;br /&gt; MOV A, #&#39;O&#39;&lt;br /&gt; ACALL DATAWRT&lt;br /&gt;&lt;br /&gt; MOV A, #0C4H&lt;br /&gt; ACALL COMNWRT&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; MOV A, #&#39;I&#39;&lt;br /&gt; ACALL DATAWRT&lt;br /&gt; &lt;br /&gt; MOV A, #&#39;N&#39;&lt;br /&gt; ACALL DATAWRT&lt;br /&gt; &lt;br /&gt; MOV A, #&#39;D&#39;&lt;br /&gt; ACALL DATAWRT&lt;br /&gt; &lt;br /&gt; MOV A, #&#39;I&#39;&lt;br /&gt; ACALL DATAWRT&lt;br /&gt;&lt;br /&gt; MOV A, #&#39;A&#39;&lt;br /&gt; ACALL DATAWRT&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MAIN:AJMP MAIN&lt;br /&gt;&lt;br /&gt;COMNWRT:&lt;br /&gt; ACALL READY &lt;br /&gt; MOV P2, A &lt;br /&gt; CLR P1.5  ;RS&lt;br /&gt; CLR P1.6 ;R/W &lt;br /&gt; SETB P1.7 ;E&lt;br /&gt; NOP&lt;br /&gt; NOP&lt;br /&gt; NOP&lt;br /&gt; NOP &lt;br /&gt; CLR P1.7  ;E &lt;br /&gt; RET&lt;br /&gt;&lt;br /&gt;DATAWRT:&lt;br /&gt; ACALL READY   &lt;br /&gt; MOV P2, A  &lt;br /&gt; SETB P1.5   ;RS&lt;br /&gt; CLR P1.6 ;R/W&lt;br /&gt; SETB P1.7 ;E&lt;br /&gt; NOP&lt;br /&gt; NOP&lt;br /&gt; NOP&lt;br /&gt; NOP&lt;br /&gt; CLR P1.7 ;E  &lt;br /&gt; RET &lt;br /&gt; &lt;br /&gt;READY:&lt;br /&gt;  SETB P2.7&lt;br /&gt;  CLR P1.5  ;RS&lt;br /&gt;  SETB P1.6 ;R/W&lt;br /&gt;REPEAT: CLR P1.7 ;E&lt;br /&gt;  NOP&lt;br /&gt;  NOP&lt;br /&gt;  NOP&lt;br /&gt;  NOP&lt;br /&gt;  SETB P1.7        ;E&lt;br /&gt;  JB P2.7, REPEAT&lt;br /&gt;  CLR P1.7 ;E&lt;br /&gt;  RET&lt;br /&gt;  &lt;br /&gt;  END</content><link rel='replies' type='application/atom+xml' href='http://8051microcontroller.blogspot.com/feeds/3848104000974052563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3858630146716725915/3848104000974052563?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/3848104000974052563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3858630146716725915/posts/default/3848104000974052563'/><link rel='alternate' type='text/html' href='http://8051microcontroller.blogspot.com/2008/03/university-examination-programs.html' title='Good Programs'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>