<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog ngohaibac&#187; Microchip PIC</title>
	<atom:link href="http://www.ngohaibac.net/category/he-thong-nhung/microchip-pic/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ngohaibac.net</link>
	<description>Hãy chia sẻ để được chia sẻ.</description>
	<lastBuildDate>Sat, 15 Oct 2011 14:02:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Cơ bản về PIC và dsPIC, các phần mềm liên quan</title>
		<link>http://www.ngohaibac.net/co-ban-ve-pic-va-dspic-cac-phan-mem-lien-quan/</link>
		<comments>http://www.ngohaibac.net/co-ban-ve-pic-va-dspic-cac-phan-mem-lien-quan/#comments</comments>
		<pubDate>Sat, 16 May 2009 13:05:48 +0000</pubDate>
		<dc:creator>ngohaibac</dc:creator>
				<category><![CDATA[Microchip PIC]]></category>
		<category><![CDATA[dsPIC]]></category>
		<category><![CDATA[PIC]]></category>
		<category><![CDATA[Programmming]]></category>

		<guid isPermaLink="false">http://www.ngohaibac.net/?p=1220</guid>
		<description><![CDATA[Những kiến thức căn bản về vi điều khiển, vi xử lý tín hiệu số ban đầu rất quan trọng. Mình xin trích bài viết của anh nqnam về PIC và dsPIC cho các bạn. Bài viết rất hay, rất đáng để học tập. Mình copy lại đây cũng là để làm tư liệu sau [...]


Related posts:<ol><li><a href='http://www.ngohaibac.net/thong-bao-xoa-cac-bai-viet-lien-quan-den-ban-quyen/' rel='bookmark' title='Thông báo xóa các bài viết liên quan đến bản quyền'>Thông báo xóa các bài viết liên quan đến bản quyền</a></li>
<li><a href='http://www.ngohaibac.net/kidcad-phan-mem-ve-mach-mien-phi-tren-ubuntu/' rel='bookmark' title='Kicad: phần mềm vẽ mạch in miễn phí'>Kicad: phần mềm vẽ mạch in miễn phí</a></li>
<li><a href='http://www.ngohaibac.net/vai-video-demo-ve-dspic-rat-an-tuong/' rel='bookmark' title='Vài video demo về dsPIC khá ấn tượng'>Vài video demo về dsPIC khá ấn tượng</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>Những kiến thức căn bản về vi điều khiển, vi xử lý tín hiệu số ban đầu rất quan trọng. Mình xin trích bài viết của anh nqnam về PIC và dsPIC cho các bạn. Bài viết rất hay, rất đáng để học tập. Mình copy lại đây cũng là để làm tư liệu sau này, nhỡ chẳng may web anh Nam bị die lại quay sang hỏi mình =))</p>
<p>Giới thiệu, anh Nam là supermode của PICVietnam và Dientuvietnam.net, anh rất nhiệt tình và có kiến thức về thực hành rất kinh. Mình không tiếp xúc với anh Nam nhiều nhưng qua các bài viết của anh cũng hiểu được anh cẩn thận đến mức nào và uyên tâm tới đâu.</p>
<h2>Bắt đầu nào</h2>
<p>Hầu hết các mạch vi điều khiển của tôi hiện nay dùng PIC và dsPIC. Tôi đang tham gia diễn đàn <a href="http://www.picvietnam.com/">PIC Vietnam</a>, tại đó tôi trao đổi kinh nghiệm sử dụng PIC và dsPIC với những người dùng khác. Tôi dùng phần này của trang web để hệ thống hóa các kiến thức về PIC và dsPIC, cũng như cung cấp các thông tin về phần mềm và thiết kế phần cứng mà tôi sưu tầm được trên net.</p>
<h3>Cơ bản về PIC</h3>
<p>PIC nói chung là họ vi điều khiển 8-bit/16-bit, dựa trên kiến trúc Harvard sửa đổi, với tập lệnh rút gọn (do vậy PIC thuộc loại RISC). PIC được sản xuất từ dòng cơ bản như PIC10 hay PIC12, qua dòng cấp thấp PIC16, cho đến dòng cấp cao PIC18. Hiện nay hãng Microchip đã có các họ vi điều khiển 16-bit, gồm PIC24H và PIC24F. Hãng Microchip cũng vừa giới thiệu vào tháng 11 năm 2007 họ vi điều khiển 32-bit, PIC32MX, dựa trên lõi MIPS32 M4K.</p>
<h3>Cơ bản về dsPIC</h3>
<p>Chỉ xét riêng phần vi điều khiển, dsPIC giống như PIC24, là các vi điều khiển 16-bit, dựa trên kiến trúc Harvard sửa đổi, với tập lệnh rút gọn (như vậy dsPIC và PIC24 cũng thuộc loại RISC). dsPIC hiện nay gồm có hai dòng: dsPIC30F và dsPIC33F.</p>
<h3>Các phần mềm liên quan đến họ vi điều khiển PIC và dsPIC</h3>
<ul>
<li>WinPic Programmer-phần mềm để nạp chương trình cho mọi loại PIC, kể cả dsPIC, do Wolfgang Buescher, DL4YHF viết. Phần mềm miễn phí này cho phép tùy biến phần cứng (hỗ trợ các mạch nạp qua cổng nối tiếp và song song), và bổ sung chip được hỗ trợ thông qua tập tin cấu hình. Phiên bản mới nhất của phần mềm có thể download tại <a href="http://people.freenet.de/dl4yhf/winpicpr.html">http://people.freenet.de/dl4yhf/</a>.</li>
<li>WinPic800-phần mềm để nạp chương trình cho mọi loại PIC, kể cả dsPIC, do Sisco Benach Font viết. Phần mềm miễn phí này cho phép tùy biến phần cứng (hỗ trợ các mạch nạp qua cổng nối tiếp, song song, và USB), tự động nhận diện chip cần nạp, và có tốc độ rất nhanh. Phiên bản mới nhất của phần mềm có thể download tại <a href="http://www.winpic800.com/">http://www.winpic800.com</a>.</li>
<li>PICPgm Develop. Programmer-phần mềm để nạp chương trình cho PIC12F đến PIC18F, do Christian Stadler viết. Phần mềm miễn phí này cho phép tùy biến phần cứng (hỗ trợ các mạch nạp qua cổng nối tiếp, song song, và USB), và tự động nhận diện chip cần nạp. Phiên bản mới nhất của phần mềm có thể download tại <a href="http://www.members.aon.at/electronics/pic/picpgm/index.html">http://www.members.aon.at/electronics/</a>. Xem giới thiệu về mạch nạp PICPgm USB Programmer dưới đây.</li>
<li>OshonSoft Parallel Port Programmer-phần mềm để nạp chương trình cho PIC16F và PIC18F, do Vladimir Soso viết. Phần mềm miễn phí này gồm 2 chương trình nhỏ viết riêng cho PIC16F và PIC18F, cho phép tùy biến phần cứng (qua cổng song song). Riêng bản dành cho PIC18F cho phép bổ sung chip được hỗ trợ thông qua tập tin cấu hình. Phiên bản mới nhất của phần mềm có thể download tại <a href="http://www.oshonsoft.com/picprog.html">http://www.oshonsoft.com</a>.</li>
<li>melabs Programmer-phần mềm để nạp chương trình cho mọi loại PIC, kể cả dsPIC, của hãng melabs. Phần mềm này được phát triển để dùng chung với các mạch nạp của hãng melabs, thường là các mạch nạp có smart chip và cần firmware. Nhưng may mắn là phần mềm này lại hỗ trợ một mạch nạp đơn giản tương thích với mạch nạp Tait classic, giao tiếp qua cổng song song. Phần mềm này không phải miễn phí, nhưng bạn có thể download bản thử nghiệm beta miễn phí tại <a href="http://www.melabs.com/support/progsoft.htm">http://www.melabs.com</a>.</li>
<li>EPIC Win-phần mềm để nạp chương trình cho PIC16 và PIC18, của hãng melabs. Phần mềm này tương tự như melabs Programmer, được thiết kế để dùng riêng cho các mạch nạp của melabs, nhưng cũng hỗ trợ mạch nạp tương thích Tait classic qua cổng song song. Phần mềm này không phải miễn phí, nhưng bạn có thể download bản thử nghiệm beta miễn phí tại <a href="http://www.melabs.com/support/progsoft.htm">http://www.melabs.com</a>.</li>
<li>Các phần mềm của sprut-hỗ trợ việc nạp chương trình cho tất cả các PIC và dsPIC30F dùng bộ nhớ flash. Các phần mềm miễn phí này giao tiếp với các mạch nạp qua cổng song song. FlashOver12 dùng cho các chip có lõi 12-bit (hiện hỗ trợ 10 chip), PBrennerNG dùng cho các chip có lõi 14-bit (hiện hỗ trợ 58 chip), P18 dùng cho các chip 18F 16-bit (hiện hỗ trợ 88 chip), và dsProg dùng cho các chip dsPIC30F (hiện hỗ trợ 28 chip). Phiên bản mới nhất của các phần mềm có thể download tại <a href="http://www.sprut.de/">http://www.sprut.de</a>. Trang web viết bằng tiếng Đức, nhưng tôi tin là bạn có thể tìm được các phần mềm cần thiết. May mắn là các phần mềm có giao diện tiếng Anh.</li>
<li>US-Burn-phần mềm của sprut dùng với mạch nạp Brenner8/Brenner9 (được giới thiệu dưới đây), thông qua giao tiếp USB. Hiện nay danh sách chip được hỗ trợ đã có 356 loại khác nhau, từ PIC10F đến dsPIC33F. Theo kết quả thử nghiệm mới của tôi, hiện nay các dòng PIC cấp thấp, tầm trung, cấp cao, và dsPIC đều được hỗ trợ. Tốc độ của giải pháp này là khá nhanh, với phần mềm khá nhiều tính năng. Phiên bản mới nhất có thể download tại <a href="http://www.sprut.de/">http://www.sprut.de</a>.</li>
<li>PICkit 2 Programmer-phần mềm của Microchip dùng với mạch nạp/debug PICkit 2, thông qua giao tiếp USB. Hỗ trợ hầu như toàn bộ các chip flash của Microchip, từ PIC10F đến PIC32. Tốc độ của giải pháp này là nhanh, với phần mềm có đủ các tính năng cơ bản (riêng phần thông tin cấu hình thì chỉ hiển thị). Phiên bản mới nhất có thể download tại <a href="http://www.microchip.com/">http://www.microchip.com</a>.</li>
<li>MPLAB IDE-một IDE với trình hợp dịch, bộ mô phỏng. Hoàn toàn miễn phí và download tại <a href="http://www.microchip.com/">http://www.microchip.com</a>. Vì hãng Microchip thường xuyên cập nhật trang web, tôi sẽ không đưa ra liên kết cụ thể ở đây. Bạn hãy theo liên kết của MPLAB IDE để đến trang thông tin của nó, trong đó sẽ có liên kết để download.</li>
<li>CC5X-trình biên dịch C cho PIC tầm trung và cơ bản, của hãng BKND, tương thích với MPLAB IDE. Phiên bản miễn phí giới hạn 1 k (1024) lệnh trong mỗi module C, download tại <a href="http://www.bknd.com/cc5x/download.shtml">http://www.bknd.com</a>.</li>
<li>HI-TECH C PRO for the PIC10/PIC12/PIC16-trình biên dịch C cho PIC tầm trung và cơ bản, của hãng HI-TECH, tương thích với MPLAB IDE và HI-TIDE. Phiên bản miễn phí (Lite mode) giới hạn khả năng tối ưu mã, download tại <a href="http://www.htsoft.com/downloads/demos.php">http://www.htsoft.com</a>. Tôi chưa từng dùng trình biên dịch này.</li>
<li>MPLAB C18 SE-trình biên dịch C cho PIC cấp cao, tương thích với MPLAB IDE. Phiên bản miễn phí đầy đủ tính năng trong 60 ngày, sau đó giới hạn khả năng tối ưu mã, download tại <a href="http://www.microchip.com/">http://www.microchip.com</a>. Bạn hãy theo liên kết của Development Tools, rồi đến MPLAB C18 Compiler.</li>
<li>HI-TECH C PRO for the PIC18-trình biên dịch C cho PIC cấp cao, của hãng HI-TECH, tương thích với MPLAB IDE và HI-TIDE. Phiên bản miễn phí (Lite mode) giới hạn khả năng tối ưu mã, download tại <a href="http://www.htsoft.com/downloads/demos.php">http://www.htsoft.com</a>. Tôi chưa từng dùng trình biên dịch này.</li>
<li>MPLAB C30 SE-trình biên dịch C cho dsPIC và PIC24, tương thích với MPLAB IDE. Phiên bản miễn phí đầy đủ tính năng trong 60 ngày, sau đó giới hạn khả năng tối ưu mã, download tại <a href="http://www.microchip.com/">http://www.microchip.com</a>. Bạn hãy theo liên kết của Development Tools, rồi đến MPLAB C30 Compiler.</li>
<li>MPLAB C32 SE-trình biên dịch C cho PIC32, tương thích với MPLAB IDE. Phiên bản miễn phí đầy đủ tính năng trong 60 ngày, sau đó giới hạn khả năng tối ưu mã, download tại <a href="http://www.microchip.com/">http://www.microchip.com</a>.</li>
<li>HI-TECH C PRO for the PIC32-trình biên dịch C cho PIC32, của hãng HI-TECH, tương thích với MPLAB IDE và HI-TIDE. Phiên bản miễn phí (Lite mode) giới hạn khả năng tối ưu mã, download tại <a href="http://www.htsoft.com/downloads/demos.php">http://www.htsoft.com</a>. Tôi chưa từng dùng trình biên dịch này.</li>
</ul>
<h3>Các thiết kế phần cứng liên quan đến họ vi điều khiển PIC và dsPIC</h3>
<ul>
<li>JDM-mạch nạp rất đơn giản cho nhiều dòng PIC, giao tiếp với máy tính qua cổng nối tiếp, được rất nhiều phần mềm hỗ trợ. Mạch nguyên lý có thể xem tại <a href="http://www.jdm.homepage.dk/newpics.htm">http://www.jdm.homepage.dk</a></li>
<li>JDM Mod-mạch nạp dựa trên SI-Prog và tương thích JDM, giao tiếp với máy tính qua cổng nối tiếp, do tôi thiết kế (nhằm khắc phục vấn đề điện áp thấp của các cổng nối tiếp trong các máy laptop). Mạch nguyên lý có thể thấy ở hình 1.</li>
<li>Schaer+ Mod-mạch nạp dựa trên Schaer+, giao tiếp với máy tính qua cổng song song, do tôi sửa đổi, được đa số phần mềm hỗ trợ (vì thực chất tương thích với mạch nạp Tait classic). Mạch nguyên lý có thể thấy ở hình 2.</li>
<li>PICPgm USB-mạch nạp do Christian Stadler thiết kế, chỉ sử dụng một vi mạch FT245BL (hay FT245BM) và một mạch logic 7414. Tác giả mong muốn giải quyết triệt để bài toán "con gà và quả trứng" (để có được một mạch nạp, cần nạp chương trình cho một vi điều khiển sẽ được dùng trong ... mạch nạp đó). Kết quả thử nghiệm của tôi cho thấy tốc độ của mạch nạp vẫn còn thấp, đặc biệt là tốc độ đọc dữ liệu từ chip. Tuy nhiên, những ai quan tâm có thể tìm thấy sơ đồ mạch tại <a href="http://www.members.aon.at/electronics/pic/picpgm/index.html">http://www.members.aon.at/electronics/</a>.</li>
<li>Brenner8-mạch nạp do sprut thiết kế, dùng với phần mềm US-Burn đã giới thiệu ở trên. Mạch có tốc độ khá cao, hỗ trợ 207 loại PIC và dsPIC. Mạch nạp này sử dụng PIC18F2550 và một số linh kiện rời, trong đó điện cảm dùng trong mạch nâng áp có thể hơi khó tìm tại Việt Nam. Cần chú ý là mạch phải được calib trước khi gắn chip cần nạp vào, nếu không bạn có thể làm hỏng chip. Chương trình trên host PC và firmware cho PIC18F2550 là hoàn toàn miễn phí (đóng gói chung trong một tập tin nén), có thể download tại <a href="http://www.sprut.de/">http://www.sprut.de</a>.</li>
<li>Brenner9-mạch nạp do sprut thiết kế, dùng với phần mềm US-Burn đã giới thiệu ở trên. Mạch có tốc độ khá cao, hỗ trợ 143 loại PIC và dsPIC điện áp thấp (danh định là 3.3 V). Mạch nạp này sử dụng PIC18F2550 và một số linh kiện rời. Cần chú ý là mạch phải được calib trước khi gắn chip cần nạp vào, nếu không bạn có thể làm hỏng chip. Chương trình trên host PC và firmware cho PIC18F2550 là hoàn toàn miễn phí (đóng gói chung trong một tập tin nén), có thể download tại <a href="http://www.sprut.de/">http://www.sprut.de</a>.</li>
</ul>
<p><img src="http://www4.hcmut.edu.vn/%7Enqnam/Public/JDM_Mod.gif" alt="JDM Mod" align="middle" /><br />
Hình 1. Mạch nạp JDM Mod</p>
<p><img src="http://www4.hcmut.edu.vn/%7Enqnam/Public/Schaer_Mod.gif" alt="Schear+ Mod" align="middle" /><br />
Hình 2. Mạch nạp Schaer+ Mod</p>
<p>Các mạch nạp và phần mềm được giới thiệu ở đây đã được tôi thử nghiệm thực tế. Dưới đây là bảng tổng hợp (chưa đầy đủ) các kết quả thử nghiệm.</p>
<table border="1" align="center">
<tbody>
<tr>
<td align="center">No.</td>
<td align="center">PIC/dsPIC</td>
<td align="center">Package</td>
<td align="center">WIN PIC</td>
<td align="center">WinPic800</td>
<td align="center">OshonSoft</td>
<td align="center">PICPgm</td>
<td align="center">melabs Prog.</td>
<td align="center">EPIC Win</td>
<td align="center">US-Burn</td>
<td align="center">PICkit 2</td>
</tr>
<tr>
<td align="center">1</td>
<td>10F202</td>
<td align="center">DIP8</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">2</td>
<td>10F206</td>
<td align="center">DIP8</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">3</td>
<td>10F220</td>
<td align="center">DIP8</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">4</td>
<td>10F222</td>
<td align="center">DIP8</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">5</td>
<td>12F675</td>
<td align="center">DIP8</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">6</td>
<td>12F683</td>
<td align="center">DIP8</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">7</td>
<td>16F628A</td>
<td align="center">DIP18</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">8</td>
<td>16F648A</td>
<td align="center">DIP18</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">9</td>
<td>16F676</td>
<td align="center">DIP14</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S!</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">10</td>
<td>16F684</td>
<td align="center">DIP14</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">11</td>
<td>16F688</td>
<td align="center">DIP14</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">12</td>
<td>16F72</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">13</td>
<td>16F767</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">14</td>
<td>16F777</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">15</td>
<td>16HV785</td>
<td align="center">DIP20</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">16</td>
<td>16F819</td>
<td align="center">DIP18</td>
<td align="center">S!,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">17</td>
<td>16F872</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">18</td>
<td>16F873A</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">19</td>
<td>16F876</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">20</td>
<td>16F876A</td>
<td align="center">SDIP28</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">21</td>
<td>16F877A</td>
<td align="center">DIP40</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S(slow)</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">22</td>
<td>16F88</td>
<td align="center">DIP18</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">23</td>
<td>16F886</td>
<td align="center">DIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">24</td>
<td>16F887</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">25</td>
<td>16F913</td>
<td align="center">SDIP28</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">26</td>
<td>16F914</td>
<td align="center">DIP40</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">27</td>
<td>16F916</td>
<td align="center">SDIP28</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">28</td>
<td>16F917</td>
<td align="center">DIP40</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">29</td>
<td>18F1220</td>
<td align="center">DIP18</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">30</td>
<td>18F1320</td>
<td align="center">DIP18</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">31</td>
<td>18F1330</td>
<td align="center">DIP18</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">32</td>
<td>18F2220</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">33</td>
<td>18F2221</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">34</td>
<td>18F2320</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J,P</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">35</td>
<td>18F2321</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">36</td>
<td>18F2331</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">37</td>
<td>18F2420</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">38</td>
<td>18F2423</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">39</td>
<td>18F2431</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">40</td>
<td>18F2450</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">41</td>
<td>18F2455</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">42</td>
<td>18F2458</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">43</td>
<td>18F2480</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">44</td>
<td>18F24J10</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">45</td>
<td>18F24K20</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">46</td>
<td>18F2515</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">47</td>
<td>18F252</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">48</td>
<td>18F2520</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">49</td>
<td>18F2523</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">50</td>
<td>18F2525</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">51</td>
<td>18F2539</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">52</td>
<td>18F2550</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">53</td>
<td>18F2553</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">54</td>
<td>18F258</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">55</td>
<td>18F2580</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">56</td>
<td>18F2585</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">57</td>
<td>18F25J10</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">58</td>
<td>18F25K20</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">59</td>
<td>18F2610</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">60</td>
<td>18F2620</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">61</td>
<td>18F2680</td>
<td align="center">SDIP28</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">62</td>
<td>18F2682</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">63</td>
<td>18F2685</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">64</td>
<td>18F4220</td>
<td align="center">DIP40</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">65</td>
<td>18F4221</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">66</td>
<td>18F4320</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">67</td>
<td>18F4321</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">68</td>
<td>18F4331</td>
<td align="center">DIP40</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">69</td>
<td>18F442</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">70</td>
<td>18F4420</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">71</td>
<td>18F4423</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">72</td>
<td>18F4431</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">73</td>
<td>18F4450</td>
<td align="center">DIP40</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">74</td>
<td>18F4455</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">75</td>
<td>18F4458</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">76</td>
<td>18F4480</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">77</td>
<td>18F44J10</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">78</td>
<td>18F44K20</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">79</td>
<td>18F4515</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">80</td>
<td>18F452</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">81</td>
<td>18F4520</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">82</td>
<td>18F4523</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">83</td>
<td>18F4525</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">84</td>
<td>18F4539</td>
<td align="center">DIP40</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">85</td>
<td>18F4550</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">86</td>
<td>18F4553</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">87</td>
<td>18F458</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">88</td>
<td>18F4580</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">89</td>
<td>18F4585</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">90</td>
<td>18F45J10</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">91</td>
<td>18F45K20</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">92</td>
<td>18F4610</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">93</td>
<td>18F4620</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">94</td>
<td>18F4680</td>
<td align="center">DIP40</td>
<td align="center">S,J</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">95</td>
<td>18F4682</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">96</td>
<td>18F4685</td>
<td align="center">DIP40</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S,J</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">97</td>
<td>24FJ32GA002</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">98</td>
<td>24FJ64GA002</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">99</td>
<td>24HJ12GP201</td>
<td align="center">DIP18</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">100</td>
<td>24HJ12GP202</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">101</td>
<td>24HJ32GP202</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">102</td>
<td>24HJ128GP202</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">103</td>
<td>24HJ128GP502</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">104</td>
<td>30F1010</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">105</td>
<td>30F2010</td>
<td align="center">SDIP28</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">106</td>
<td>30F2011</td>
<td align="center">DIP18</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">107</td>
<td>30F2012</td>
<td align="center">SDIP28</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">108</td>
<td>30F2020</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">109</td>
<td>30F3010</td>
<td align="center">SDIP28</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">110</td>
<td>30F3011</td>
<td align="center">DIP40</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">111</td>
<td>30F3012</td>
<td align="center">DIP18</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">112</td>
<td>30F3013</td>
<td align="center">SDIP28</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">113</td>
<td>30F3014</td>
<td align="center">DIP40</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">114</td>
<td>30F4011</td>
<td align="center">DIP40</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">115</td>
<td>30F4012</td>
<td align="center">SDIP28</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">116</td>
<td>30F4013</td>
<td align="center">DIP40</td>
<td align="center">S</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">S</td>
<td align="center">-</td>
<td align="center">B</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">117</td>
<td>33FJ12GP201</td>
<td align="center">DIP18</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">118</td>
<td>33FJ12GP202</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">119</td>
<td>33FJ12MC201</td>
<td align="center">DIP20</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">120</td>
<td>33FJ12MC202</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">121</td>
<td>33FJ32GP202</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">122</td>
<td>33FJ32GP302</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">123</td>
<td>33FJ32MC202</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">124</td>
<td>33FJ32MC302</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">125</td>
<td>33FJ64MC202</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">126</td>
<td>33FJ64MC802</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">127</td>
<td>33FJ128MC202</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
<tr>
<td align="center">128</td>
<td>33FJ128MC802</td>
<td align="center">SDIP28</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">PK</td>
</tr>
</tbody>
</table>
<p>Chú thích: S-Schaer+, J-JDM, P-PICPgm USB, B-Brenner8, PK-PICkit 2. Các ô có ký hiệu '-' nghĩa là tổ hợp phần cứng và phần mềm đó không hỗ trợ chip tương ứng hay chưa được thử nghiệm.</p>
<p>Nguồn: <a href="http://www4.hcmut.edu.vn/~nqnam/uC.php#pic">http://www4.hcmut.edu.vn/~nqnam/uC.php#pic</a></p>
<img src="http://www.ngohaibac.net/?ak_action=api_record_view&id=1220&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.ngohaibac.net/thong-bao-xoa-cac-bai-viet-lien-quan-den-ban-quyen/' rel='bookmark' title='Thông báo xóa các bài viết liên quan đến bản quyền'>Thông báo xóa các bài viết liên quan đến bản quyền</a></li>
<li><a href='http://www.ngohaibac.net/kidcad-phan-mem-ve-mach-mien-phi-tren-ubuntu/' rel='bookmark' title='Kicad: phần mềm vẽ mạch in miễn phí'>Kicad: phần mềm vẽ mạch in miễn phí</a></li>
<li><a href='http://www.ngohaibac.net/vai-video-demo-ve-dspic-rat-an-tuong/' rel='bookmark' title='Vài video demo về dsPIC khá ấn tượng'>Vài video demo về dsPIC khá ấn tượng</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ngohaibac.net/co-ban-ve-pic-va-dspic-cac-phan-mem-lien-quan/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Thư viện giao tiếp RS232 cho PIC18 bằng HTPIC18</title>
		<link>http://www.ngohaibac.net/thu-vien-giao-tiep-rs232-cho-pic18-bang-htpic18/</link>
		<comments>http://www.ngohaibac.net/thu-vien-giao-tiep-rs232-cho-pic18-bang-htpic18/#comments</comments>
		<pubDate>Sun, 03 May 2009 07:14:08 +0000</pubDate>
		<dc:creator>ngohaibac</dc:creator>
				<category><![CDATA[Microchip PIC]]></category>
		<category><![CDATA[giao tiếp RS232]]></category>
		<category><![CDATA[PIC]]></category>
		<category><![CDATA[PIC18]]></category>
		<category><![CDATA[Vi điều khiển]]></category>

		<guid isPermaLink="false">http://www.ngohaibac.net/?p=1097</guid>
		<description><![CDATA[Đây là thư viện viết cho vi điều khiển PIC dòng PIC18 bằng HTPIC. Thư viện được tạo dựa vào Datasheet của PIC18. Đã test với PIC18F4680, PIC18F4431 File Header: UART.h // UART.h //============================ #ifndef _UART_H #define _UART_H //============================= #include &#34;pic18.h&#34; #include &#34;sysdef.h&#34; //============================= // Declare sosme functions void UART_Init&#40;unsigned int BaudRate&#41;; // Initialize for [...]


Related posts:<ol><li><a href='http://www.ngohaibac.net/pic16f887-dieu-khien-thoi-gian-dong-cat-mot-led-tu-pc-qua-uart/' rel='bookmark' title='PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART'>PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART</a></li>
<li><a href='http://www.ngohaibac.net/phan-tich-thuat-toan-thuc-hien-lenh-dieu-khien-pc-qua-rs232/' rel='bookmark' title='Phan tich thuat toan: thuc hien lenh dieu khien tu PC qua RS232'>Phan tich thuat toan: thuc hien lenh dieu khien tu PC qua RS232</a></li>
<li><a href='http://www.ngohaibac.net/huong-dan-lap-trinh-giao-tiep-rs232-tren-pc-bang-visual-c-60/' rel='bookmark' title='Hướng dẫn lập trình giao tiếp RS232 trên PC bằng Visual C++ 6.0'>Hướng dẫn lập trình giao tiếp RS232 trên PC bằng Visual C++ 6.0</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>Đây là thư viện viết cho vi điều khiển PIC dòng PIC18 bằng HTPIC. Thư viện được tạo dựa vào Datasheet của PIC18.</p>
<p>Đã test với PIC18F4680, PIC18F4431</p>
<p>File Header: UART.h</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// UART.h</span>
<span style="color: #666666; font-style: italic;">//============================</span>
<span style="color: #339933;">#ifndef _UART_H</span>
<span style="color: #339933;">#define _UART_H</span>
<span style="color: #666666; font-style: italic;">//=============================</span>
<span style="color: #339933;">#include &quot;pic18.h&quot;</span>
<span style="color: #339933;">#include &quot;sysdef.h&quot;</span>
<span style="color: #666666; font-style: italic;">//=============================</span>
<span style="color: #666666; font-style: italic;">// Declare sosme functions</span>
<span style="color: #993333;">void</span> UART_Init<span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> BaudRate<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// Initialize for UART</span>
<span style="color: #993333;">void</span> UART_PrChar<span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> UART_PrString<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span><span style="color: #339933;">*</span> str<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> UART_Read<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Read data from UART Port</span>
<span style="color: #993333;">void</span> UART_detectBaudRate<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Auto detect baud rate</span>
<span style="color: #339933;">#endif</span></pre></div></div>

<p>Giải thích các hàm:</p>
<ul>
<li> UART_Init: Khởi tạo module giao tiếp UART, tham số là tốc độ truyền BaudRate. Ví dụ: UART_Init(9600)</li>
<li>UART_PrChar: Gửi một kí tự ra cổng RS232. Ví dụ: char x = 'a'; UART_PrChar(x);</li>
<li>UART_PrString(const char* str): gửi 1 xâu kí tự ra cổng RS232. Ví dụ: UART_PrString("Anh yeu em");</li>
<li>unsigned char UART_Read(void) : Đọc 1 byte từ cổng COM</li>
<li>UART_detectBaudRate(void): Tự động xác định tốc độ baudrate được truyền xuống PIC18, Master phải truyền kí tự 'U' để PIC18 tự xác định và thiết lập tốc độ (cái này có trong datasheet nhá <img src='http://www.ngohaibac.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</li>
</ul>
<p>File thực thi: UART.c</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// UART.C</span>
<span style="color: #339933;"># include &quot;UART.h&quot;</span>
<span style="color: #339933;"># include &quot;pic18.h&quot;</span>
<span style="color: #339933;"># include &quot;sysdef.h&quot;</span>
<span style="color: #666666; font-style: italic;">// Initialize UART</span>
<span style="color: #993333;">void</span> UART_Init<span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> BaudRate<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> n<span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// Configure BaudRate</span>
	BRGH <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 				<span style="color: #666666; font-style: italic;">// Low speed.</span>
	BRG16 <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">// 16-Bit Baud Rate Generator - SPBRGH and SPBRG</span>
	<span style="color: #666666; font-style: italic;">// Baudrate = Fosc/[16(n+1)]  =&amp;gt; n = ((Fosc/Baudrate)&amp;gt;&amp;gt;4) - 1;  n = SPBRGH: SPBRG;</span>
	n <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>Fosc<span style="color: #339933;">/</span>BaudRate<span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	SPBRG <span style="color: #339933;">=</span> n<span style="color: #339933;">;</span>
	SPBRGH <span style="color: #339933;">=</span> n<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #0000dd;">8</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// Enable the asyncchronous serial port.</span>
	SYNC <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">// Asynchronous mode</span>
	SPEN <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">// Serial port enable.</span>
	TRIS_TX <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	TRIS_RX <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//Configure for Transmitter mode.	</span>
&nbsp;
	TXEN  <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> 				<span style="color: #666666; font-style: italic;">// Transmit enable</span>
<span style="color: #666666; font-style: italic;">//Configure for Receiver mode</span>
	CREN <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">// Enable the reception</span>
<span style="color: #666666; font-style: italic;">//Interrupt</span>
	RCIF <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	RCIE <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">// Reception Interrupt Enable</span>
	GIE <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">// Global Interrupt Enable</span>
	PEIE <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">// Perapheral Interrupt Enable</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">//===========================</span>
&nbsp;
<span style="color: #993333;">void</span> UART_PrChar<span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> a<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>TRMT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	TXREG <span style="color: #339933;">=</span> a<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">//====================================</span>
<span style="color: #993333;">void</span> UART_PrString<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span><span style="color: #339933;">*</span> str<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>str<span style="color: #009900;">&#41;</span>
		UART_PrChar<span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>str <span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">//=================================================</span>
<span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> UART_Read<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span>RCREG<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">//===============================================</span>
<span style="color: #993333;">void</span> UART_detectBaudRate<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	TXSTA 	<span style="color: #339933;">=</span> <span style="color: #208080;">0b00100100</span><span style="color: #339933;">;</span>
	RCSTA 	<span style="color: #339933;">=</span> <span style="color: #208080;">0b10010000</span><span style="color: #339933;">;</span>
<span style="color: #339933;">#if defined(_18F4680)</span>
	BAUDCON <span style="color: #339933;">=</span> <span style="color: #208080;">0b00001001</span><span style="color: #339933;">;</span>
<span style="color: #339933;">#endif</span>
<span style="color: #339933;">#if defined(_18F4431)</span>
	BAUDCTL <span style="color: #339933;">=</span> <span style="color: #208080;">0b00001001</span><span style="color: #339933;">;</span>
<span style="color: #339933;">#endif</span>
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>ABDEN<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #339933;">#if defined(_18F4680)</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>ABDOVF <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> ABDOVF <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #339933;">#endif</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Tất cả tham số của bộ UART được định nghĩa trong SysDef.h của mình:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// SysDef.h</span>
<span style="color: #666666; font-style: italic;">//</span>
<span style="color: #666666; font-style: italic;">// System Defination for specific IC</span>
<span style="color: #666666; font-style: italic;">//</span>
<span style="color: #339933;">#ifndef SYSDEF_H</span>
<span style="color: #339933;">#define SYSDEF_H</span>
<span style="color: #666666; font-style: italic;">// Crystal</span>
<span style="color: #339933;">#define	Fosc	20000000	</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// UART Module</span>
<span style="color: #339933;">#define TX			RC6</span>
<span style="color: #339933;">#define RX 			RC7</span>
<span style="color: #339933;">#define TRIS_TX		TRISC6</span>
<span style="color: #339933;">#define TRIS_RX		TRISC7</span>
&nbsp;
<span style="color: #339933;">#define	UART_Data	TMR1H	// UART Data temporary</span>
&nbsp;
<span style="color: #339933;">#endif // EOF</span></pre></div></div>

<p>Tải thư viện về: <a class="downloadlink" href="http://www.ngohaibac.net/download/pic18_uart_lib.zip" title=" downloaded 920 times" >PIC18_UART_LIb (920)</a></p>
<h2>Cách dùng thư viện</h2>
<p>Copy các file thư viện này vào trong thư mục Project của bạn, ở file nào muốn dùng thư viện thì thêm header vào:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;UART.h&quot;</span></pre></div></div>

<p>Chúc các bạn thành công.</p>
<img src="http://www.ngohaibac.net/?ak_action=api_record_view&id=1097&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.ngohaibac.net/pic16f887-dieu-khien-thoi-gian-dong-cat-mot-led-tu-pc-qua-uart/' rel='bookmark' title='PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART'>PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART</a></li>
<li><a href='http://www.ngohaibac.net/phan-tich-thuat-toan-thuc-hien-lenh-dieu-khien-pc-qua-rs232/' rel='bookmark' title='Phan tich thuat toan: thuc hien lenh dieu khien tu PC qua RS232'>Phan tich thuat toan: thuc hien lenh dieu khien tu PC qua RS232</a></li>
<li><a href='http://www.ngohaibac.net/huong-dan-lap-trinh-giao-tiep-rs232-tren-pc-bang-visual-c-60/' rel='bookmark' title='Hướng dẫn lập trình giao tiếp RS232 trên PC bằng Visual C++ 6.0'>Hướng dẫn lập trình giao tiếp RS232 trên PC bằng Visual C++ 6.0</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ngohaibac.net/thu-vien-giao-tiep-rs232-cho-pic18-bang-htpic18/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Phần mềm mô phỏng điện tử Proteus</title>
		<link>http://www.ngohaibac.net/ph%e1%ba%a7n-m%e1%bb%81m-mo-ph%e1%bb%8fng-di%e1%bb%87n-t%e1%bb%ad-proteus/</link>
		<comments>http://www.ngohaibac.net/ph%e1%ba%a7n-m%e1%bb%81m-mo-ph%e1%bb%8fng-di%e1%bb%87n-t%e1%bb%ad-proteus/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 02:06:09 +0000</pubDate>
		<dc:creator>ngohaibac</dc:creator>
				<category><![CDATA[Hệ thống nhúng]]></category>
		<category><![CDATA[Microchip PIC]]></category>
		<category><![CDATA[Mô phỏng mạch điện tử]]></category>
		<category><![CDATA[Proteus]]></category>

		<guid isPermaLink="false">http://www.ngohaibac.net/?p=1034</guid>
		<description><![CDATA[Tình hình là khi xóa bài viết này xong thì lượng truy cập vào website của mình vẫn rất nhiều với từ khóa Proteus và bài viết về Proteus hôm trước mà mình đã viết. Cũng xin nói trước là mình không khuyến khích sử dụng các phần mềm vi phạm bản quyền, nhưng với [...]


Related posts:<ol><li><a href='http://www.ngohaibac.net/mf-tai-lieu-huong-dan-proteus/' rel='bookmark' title='[MF] Tài liệu hướng dẫn Proteus'>[MF] Tài liệu hướng dẫn Proteus</a></li>
<li><a href='http://www.ngohaibac.net/hoc-tieng-han-voi-rosetta-ston/' rel='bookmark' title='Học tiếng Hàn với Rosetta Stone'>Học tiếng Hàn với Rosetta Stone</a></li>
<li><a href='http://www.ngohaibac.net/mot-so-trang-chia-se-ebook-phan-mem-rat-hay/' rel='bookmark' title='Một số trang web chia sẻ ebook, phần mềm rất là hay'>Một số trang web chia sẻ ebook, phần mềm rất là hay</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>Tình hình là khi xóa bài viết này xong thì lượng truy cập vào website của mình vẫn rất nhiều với từ khóa Proteus và bài viết về Proteus hôm trước mà mình đã viết. Cũng xin nói trước là mình không khuyến khích sử dụng các phần mềm vi phạm bản quyền, nhưng với mục đích học tập dành cho các bạn thì có lẽ là okie, các bạn chịu hoàn toàn trách nhiệm khi sử dụng phần mềm, cũng như các vấn đề liên quan đến bản quyền của phần mềm đó.</p>
<p>Về phần mềm thì có thể tải về<a href="http://rapidshare.com/files/194153811/Proteus_7.4_Sp3_Full.rar" target="_blank"> tại đây</a> . (Rảnh mình sẽ đưa lên box.net tải cho nhanh). Nếu cái trên k dc thì <a href="http://mihd.net/0qyn6kf" target="_blank">cái này</a> và<a href="http://mihd.net/pukfvr7" target="_blank"> thuốc này</a>.</p>
<p>Cập nhật phiên bản mới (từ sonsivri):</p>
<ol>
<li>Proteus 7.6 SP4 Link : <a href="http://rapidshare.com/files/337924325/76SP4.rar.html" target="_blank">http://rapidshare.com/files/337924325/76SP4.rar.html</a> - Install Proteus</li>
<li>Patch : <a href="http://rapidshare.com/files/340295051/Proteus.pro.7.6.sp4-patch_V2.rar" target="_blank">http://rapidshare.com/files/340295051/Proteus.pro.7.6.sp4-patch_V2.rar</a> - Patch version 2</li>
<li>due to unpatched files you need this <a href="http://rapidshare.com/files/341584733/fix.rar" target="_blank">http://rapidshare.com/files/341584733/fix.rar</a> - 1st update</li>
<li>To fix error with PWM replace pic16.dll with <a href="http://rapidshare.com/files/360728086/pic16.DLL" target="_blank">http://rapidshare.com/files/360728086/pic16.DLL</a> - 2nd update</li>
</ol>
<p>Chú ý, nếu bạn sử dụng Windows Vista hoặc Windows 7 cần chạy setup dưới quyền administrator</p>
<p>Note: Hãy comment ở bên dưới, nếu các bạn không down dc bằng rapidshare, tôi sẽ up lên mediafire cho các bạn.</p>
<p><strong>Các tutorials:</strong></p>
<p><a class="sblabel" href="http://www.vagam.dieukhien.net/discuss.php?thid=4821"><strong>Proteus</strong> tutorial by Trietnguyen</a></p>
<p>( do giảng viên Nguyễn Minh Triết - Đại học SPKT TPHCM hồi còn sinh viên hướng dẫn <img src='http://www.ngohaibac.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p>Cũng rất dễ dàng tìm các tutorials nếu các bạn search Google UK với từ khóa: Proteus tutorials.</p>
<p>Thư viện mô phỏng dành cho Microchip PIC các bạn có thể download tại luồng sau bên PICVietnam: <a href="http://www.picvietnam.com/forum/showthread.php?t=2396" target="_blank">http://www.picvietnam.com/forum/showthread.php?t=2396</a></p>
<p>Chúc các bạn thành công.</p>
<img src="http://www.ngohaibac.net/?ak_action=api_record_view&id=1034&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.ngohaibac.net/mf-tai-lieu-huong-dan-proteus/' rel='bookmark' title='[MF] Tài liệu hướng dẫn Proteus'>[MF] Tài liệu hướng dẫn Proteus</a></li>
<li><a href='http://www.ngohaibac.net/hoc-tieng-han-voi-rosetta-ston/' rel='bookmark' title='Học tiếng Hàn với Rosetta Stone'>Học tiếng Hàn với Rosetta Stone</a></li>
<li><a href='http://www.ngohaibac.net/mot-so-trang-chia-se-ebook-phan-mem-rat-hay/' rel='bookmark' title='Một số trang web chia sẻ ebook, phần mềm rất là hay'>Một số trang web chia sẻ ebook, phần mềm rất là hay</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ngohaibac.net/ph%e1%ba%a7n-m%e1%bb%81m-mo-ph%e1%bb%8fng-di%e1%bb%87n-t%e1%bb%ad-proteus/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Vài video demo về dsPIC khá ấn tượng</title>
		<link>http://www.ngohaibac.net/vai-video-demo-ve-dspic-rat-an-tuong/</link>
		<comments>http://www.ngohaibac.net/vai-video-demo-ve-dspic-rat-an-tuong/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 04:58:55 +0000</pubDate>
		<dc:creator>ngohaibac</dc:creator>
				<category><![CDATA[Microchip PIC]]></category>
		<category><![CDATA[dsPIC]]></category>
		<category><![CDATA[PIC]]></category>

		<guid isPermaLink="false">http://www.ngohaibac.net/?p=411</guid>
		<description><![CDATA[dsPIC visual tracking using a CMOS camera! Các bạn có thể xem các video khác trong cùng chủ đề này ở youtube. Chúc các bạn thành công. Related posts:FPGA Demo Tuyển tập video cùng nhau học tiếng Hàn Quốc (Phần 4) Tuyển tập video cùng nhau học tiếng Hàn Quốc (Phần 2)


Related posts:<ol><li><a href='http://www.ngohaibac.net/fpga-demo/' rel='bookmark' title='FPGA Demo'>FPGA Demo</a></li>
<li><a href='http://www.ngohaibac.net/video-cung-nhau-hoc-tieng-han-quoc-phan-4/' rel='bookmark' title='Tuyển tập video cùng nhau học tiếng Hàn Quốc (Phần 4)'>Tuyển tập video cùng nhau học tiếng Hàn Quốc (Phần 4)</a></li>
<li><a href='http://www.ngohaibac.net/tuyen-tap-video-cung-nhau-hoc-tieng-han-quoc-phan-2/' rel='bookmark' title='Tuyển tập video cùng nhau học tiếng Hàn Quốc (Phần 2)'>Tuyển tập video cùng nhau học tiếng Hàn Quốc (Phần 2)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p><a href="http://www.ngohaibac.net/vai-video-demo-ve-dspic-rat-an-tuong/"><em>Click here to view the embedded video.</em></a></p>
<p><a href="http://www.ngohaibac.net/vai-video-demo-ve-dspic-rat-an-tuong/"><em>Click here to view the embedded video.</em></a></p>
<p style="text-align: center;"><strong>dsPIC visual tracking using a CMOS camera!</strong></p>
<p style="text-align: center;">
<p style="text-align: left;">Các bạn có thể xem các video khác trong cùng chủ đề này ở youtube.</p>
<p style="text-align: left;">Chúc các bạn thành công.</p>
<img src="http://www.ngohaibac.net/?ak_action=api_record_view&id=411&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.ngohaibac.net/fpga-demo/' rel='bookmark' title='FPGA Demo'>FPGA Demo</a></li>
<li><a href='http://www.ngohaibac.net/video-cung-nhau-hoc-tieng-han-quoc-phan-4/' rel='bookmark' title='Tuyển tập video cùng nhau học tiếng Hàn Quốc (Phần 4)'>Tuyển tập video cùng nhau học tiếng Hàn Quốc (Phần 4)</a></li>
<li><a href='http://www.ngohaibac.net/tuyen-tap-video-cung-nhau-hoc-tieng-han-quoc-phan-2/' rel='bookmark' title='Tuyển tập video cùng nhau học tiếng Hàn Quốc (Phần 2)'>Tuyển tập video cùng nhau học tiếng Hàn Quốc (Phần 2)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ngohaibac.net/vai-video-demo-ve-dspic-rat-an-tuong/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Microcontroller Based Applied Digital Control</title>
		<link>http://www.ngohaibac.net/microcontroller-based-applied-digital-control/</link>
		<comments>http://www.ngohaibac.net/microcontroller-based-applied-digital-control/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 23:55:33 +0000</pubDate>
		<dc:creator>ngohaibac</dc:creator>
				<category><![CDATA[Download tài liệu]]></category>
		<category><![CDATA[Hệ thống nhúng]]></category>
		<category><![CDATA[Microchip PIC]]></category>
		<category><![CDATA[PIC]]></category>

		<guid isPermaLink="false">http://www.ngohaibac.net/?p=308</guid>
		<description><![CDATA[Chào các bạn. Cuốn này có ở thư viện trường mình, xuất bản năm 2006, đọc khá hay. Sau đây là lời giới thiệu của amazon.com . Combines the theory and the practice of applied digital control. This book presents the theory and application of microcontroller based automatic control systems. Microcontrollers are single-chip computers which [...]


Related posts:<ol><li><a href='http://www.ngohaibac.net/mf-tai-lieu-fpga/' rel='bookmark' title='[MF] Tài liệu FPGA'>[MF] Tài liệu FPGA</a></li>
<li><a href='http://www.ngohaibac.net/bai-giang-digital-control-cua-prof-jee-hwan-ry/' rel='bookmark' title='Bài giảng Digital Control của Prof. Jee-Hwan Ryu'>Bài giảng Digital Control của Prof. Jee-Hwan Ryu</a></li>
<li><a href='http://www.ngohaibac.net/mot-so-tai-lieu-ngon-ngu-mo-ta-phan-cung-vhdl-va-verilog/' rel='bookmark' title='Một số tài liệu ngôn ngữ mô tả phần cứng VHDL, Verilog'>Một số tài liệu ngôn ngữ mô tả phần cứng VHDL, Verilog</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>Chào các bạn.</p>
<p><a href="http://www.freebookspot.net/upload/Microcontroller%20Based%20Applied%20Digital%20Control%2027.05.2007%200_00_00.jpg" rel="lightbox"><img class="alignnone" title="Microcontroller Based Applied Digital Control" src="http://www.freebookspot.net/upload/Microcontroller%20Based%20Applied%20Digital%20Control%2027.05.2007%200_00_00.jpg" alt="" width="150" height="223" /></a></p>
<p>Cuốn này có ở thư viện trường mình, xuất bản năm 2006, đọc khá hay. Sau đây là lời giới thiệu của amazon.com <img src='http://www.ngohaibac.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<blockquote><p>Combines the theory and the practice of applied digital control.</p>
<p>This book presents the theory and application of microcontroller based automatic control systems. Microcontrollers are single-chip computers which can be used to control real-time systems. Low-cost, single chip and easy to program, they have traditionally been programmed using the assembly language of the target processor. Recent developments in this field mean that it is now possible to program these devices using high-level languages such as BASIC, PASCAL, or C. As a result, very complex control algorithms can be developed and implemented on the microcontrollers.</p>
<p>Presenting a detailed treatment of how microcontrollers can be programmed and used in digital control applications, this book:</p>
<p>* Introduces the basic principles of the theory of digital control systems.<br />
* Provides several working examples of real working mechanical, electrical and fluid systems.<br />
* Covers the implementation of control algorithms using microcontrollers.<br />
* Examines the advantages and disadvantages of various realization techniques.<br />
* Describes the use of MATLAB in the analysis and design of control systems.<br />
* Explains the sampling process, z-transforms, and the time response of discrete-time systems in detail.</p>
<p>Practising engineers in industry involved with the design and implementation of computer control systems will find Microcontroller Based Applied Digital Control an invaluable resource. In addition, researchers and students in control engineering and electrical engineering will find this book an excellent research tool.</p>
<p>Although there are many books on microcontrollers and many books on control theory, this book, which combines microcontrollers with control theory, is flexible enough to allow lecturers to teach a class with either a microcontroller class as a prerequisite, a controls class as a prerequisite, or both as prerequisites. The text features a special focus on digital applications of microcontrollers.</p></blockquote>
<p>Download <a href="http://cid-6eb956faea77192b.skydrive.live.com/self.aspx/Automatic%20Control/Microcontroller%20Based%20Applied%20Digital%20Control.pdf" target="_blank">tại đây</a> (SkyDriver)</p>
<p>Chúc các bạn thành công.</p>
<img src="http://www.ngohaibac.net/?ak_action=api_record_view&id=308&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.ngohaibac.net/mf-tai-lieu-fpga/' rel='bookmark' title='[MF] Tài liệu FPGA'>[MF] Tài liệu FPGA</a></li>
<li><a href='http://www.ngohaibac.net/bai-giang-digital-control-cua-prof-jee-hwan-ry/' rel='bookmark' title='Bài giảng Digital Control của Prof. Jee-Hwan Ryu'>Bài giảng Digital Control của Prof. Jee-Hwan Ryu</a></li>
<li><a href='http://www.ngohaibac.net/mot-so-tai-lieu-ngon-ngu-mo-ta-phan-cung-vhdl-va-verilog/' rel='bookmark' title='Một số tài liệu ngôn ngữ mô tả phần cứng VHDL, Verilog'>Một số tài liệu ngôn ngữ mô tả phần cứng VHDL, Verilog</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ngohaibac.net/microcontroller-based-applied-digital-control/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Phương pháp quét Keypad ma trận dùng ngắt Timer</title>
		<link>http://www.ngohaibac.net/phuong-phap-quet-keypad-ma-tran-ban-phim-dung-ngat-timer/</link>
		<comments>http://www.ngohaibac.net/phuong-phap-quet-keypad-ma-tran-ban-phim-dung-ngat-timer/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 13:17:29 +0000</pubDate>
		<dc:creator>ngohaibac</dc:creator>
				<category><![CDATA[Microchip PIC]]></category>
		<category><![CDATA[PIC]]></category>

		<guid isPermaLink="false">http://www.ngohaibac.net/phuong-phap-quet-keypad-ma-tran-ban-phim-dung-ngat-timer/</guid>
		<description><![CDATA[Chào các bạn. Mình không biết phương pháp này các bạn biết chưa, hoặc đã ai post chưa. Nhưng đó là mình suy nghĩ và code ra chứ không hề copy ý tưởng hay code của ai khác . Phương pháp dựa trên dùng ngắt Timer0 dùng cho PIC16F887 do đó sẽ rất là tối [...]


Related posts:<ol><li><a href='http://www.ngohaibac.net/cam-nang-ngu-phap-tieng-han-thuc-dung-file-pdf/' rel='bookmark' title='Cẩm nang ngữ pháp tiếng Hàn Quốc thực dụng (file .pdf)'>Cẩm nang ngữ pháp tiếng Hàn Quốc thực dụng (file .pdf)</a></li>
<li><a href='http://www.ngohaibac.net/tong-hop-ngu-phap-tieng-han-thuc-dung-1-to-6/' rel='bookmark' title='Tổng hợp ngữ pháp tiếng Hàn thực dụng - 1 to 6'>Tổng hợp ngữ pháp tiếng Hàn thực dụng - 1 to 6</a></li>
<li><a href='http://www.ngohaibac.net/chuyen-ma-tran-gf-sang-ma-tran-binh-thuong-de-xu-ly-du-lieu/' rel='bookmark' title='Chuyển ma trận GF sang ma trận b&#236;nh thường để xử l&#253; dữ liệu'>Chuyển ma trận GF sang ma trận b&#236;nh thường để xử l&#253; dữ liệu</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>Chào các bạn.</p>
<p>Mình không biết phương pháp này các bạn biết chưa, hoặc đã ai post chưa. Nhưng đó là mình suy nghĩ và code ra chứ không hề copy ý tưởng hay code của ai khác <img src='http://www.ngohaibac.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<p>Phương pháp dựa trên dùng ngắt Timer0 dùng cho PIC16F887 do đó sẽ rất là tối ưu, tất nhiên có thể dùng cho tất cả các loại PIC và vi điều khiển khác.</p>
<p>Cấu tạo của Keypad:</p>
<p><a href="http://esd.cs.ucr.edu/labs/calc/keypad.gif" rel="shadowbox[sbpost-171];player=img;" target="_blank"><img src="http://esd.cs.ucr.edu/labs/calc/keypad.gif" alt="" /></a></p>
<p>Nội dung của phương pháp này như sau, rất đơn giản giống tư tưởng của các phương pháp scan truyền thống:</p>
<p>B1. Cho các cột = 1</p>
<p>B2. Đọc các hàng, nếu hàng nào = 1, thì sau khoảng 10 đến 15ms thì lại đọc tiếp. Nếu vẫn = 1 thì à, đúng là phím bấm rồi, ke ke. Như vậy xác định được hàng nào rồi nha. Cho vào biến row_num.</p>
<p>B3. Cho row_num = 1, đọc các cột xem, cột nào = 1 thì đó là cột bấm đó, gán vào biến col_num. Chờ khi phím nhả thì gọi hàm thực hiện theo từng phím key_function();</p>
<p>Rất đơn giản như thế nhưng mình thực hiện rất tối ưu, các bạn có thể tham khảo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> scanKeypad<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> i<span style="color: #339933;">;</span>        <span style="color: #666666; font-style: italic;">// Define i as register later</span>
    <span style="color: #666666; font-style: italic;">// if state 0 then set column to 1, and see the change of row</span>
    <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>progress<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
         <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">:</span>
               <span style="color: #666666; font-style: italic;">// set all column (4 low bit) as output, and row as input, and write '1' to column</span>
               tris_keypad    <span style="color: #339933;">=</span>  <span style="color: #208080;">0xF0</span><span style="color: #339933;">;</span>
               port_keypad <span style="color: #339933;">|=</span> <span style="color: #208080;">0x0F</span><span style="color: #339933;">;</span>
               <span style="color: #666666; font-style: italic;">// if value of row diffirent than 0,then set progress to 1</span>
              <span style="color: #666666; font-style: italic;">// and set Tcycle = 10</span>
              <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>port_keypad <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #208080;">0xF0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                     <span style="color: #666666; font-style: italic;">// Determine next state</span>
                      progress <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
                      cycle_1  <span style="color: #339933;">=</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">;</span>
               <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
                      progress <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
&nbsp;
         <span style="color: #666666; font-style: italic;">// Progress 1, check after 10 ms</span>
         <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">:</span>
               cycle_1<span style="color: #339933;">--;</span>
              <span style="color: #666666; font-style: italic;">// when cycle_1 = 0,then check again</span>
               <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>cycle_1 <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                     <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>port_keypad <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #208080;">0xF0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                     <span style="color: #666666; font-style: italic;">// Determine which row equal 1</span>
                           <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">7</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #0000dd;">3</span><span style="color: #339933;">;</span> i<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                               <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span>port_keypad <span style="color: #339933;">&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                                     row_num <span style="color: #339933;">=</span> i<span style="color: #339933;">-</span><span style="color: #0000dd;">3</span><span style="color: #339933;">;</span>
                                      <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
                                <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
                          <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
                         <span style="color: #666666; font-style: italic;">//Determine next state</span>
                        progress <span style="color: #339933;">=</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
                     <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
                           progress <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>        <span style="color: #666666; font-style: italic;">// Start state</span>
                     <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
                 <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
                 <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
&nbsp;
           <span style="color: #666666; font-style: italic;">// Progress 2, to determind the column</span>
           <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">:</span>
                 <span style="color: #666666; font-style: italic;">//Set row tris to 0,</span>
                 <span style="color: #666666; font-style: italic;">// row_num corespond to (row_num + 3) bit in port_keypad</span>
                tris_keypad <span style="color: #339933;">^=</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #009900;">&#40;</span>row_num <span style="color: #339933;">+</span> <span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>        <span style="color: #666666; font-style: italic;">// clear tris bit of row to 0, as output</span>
                tris_keypad    <span style="color: #339933;">|=</span> <span style="color: #208080;">0x0F</span><span style="color: #339933;">;</span>                    <span style="color: #666666; font-style: italic;">// Set all pin of column as input(0 to 3)</span>
                port_keypad <span style="color: #339933;">!=</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #009900;">&#40;</span>row_num <span style="color: #339933;">+</span> <span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span><span style="color: #0000dd;">4</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span>port_keypad <span style="color: #339933;">&amp;</span>  <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                          col_num <span style="color: #339933;">=</span> i<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
                          <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
                           <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
                       <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
                 <span style="color: #666666; font-style: italic;">// Wait for user release key</span>
               <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>port_keypad <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;&amp;</span>lt<span style="color: #339933;">;</span>i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                      <span style="color: #666666; font-style: italic;">// Do all function of keypad after scan sucessfully</span>
                       key_function<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                     <span style="color: #666666; font-style: italic;">//Determind the next state</span>
                      progress <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
                     <span style="color: #666666; font-style: italic;">//cycle_2  = 0xFF;</span>
                 <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
           <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
                   <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
           <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Bài toán của mình chỉ thực hiện sau khi nhấn phím nên mình mới chờ khi nhả phím. Còn để xác định phím hold hay là nhấn thì dùng thêm process thứ 3, sau thời gian khoảng 250ms nữa hoặc hơn tùy bạn, kiểm tra lại trạng thái của phím bấm đó, nếu thấy vẫn = 1 thì tức là trạng thái hold, còn lại là trạng thái nhấn phím.</p>
<p>Các biến được dùng trong hàm quét phím có thể được khai báo bằng Macro và khai báo biến global.Mình dùng các thanh ghi làm biến, các bạn chú ý dùng để không trùng vào các module đang dùng.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//Define for keypad on PORTD</span>
<span style="color: #339933;">#define port_keypad PORTD</span>
<span style="color: #339933;">#define tris_keypad TRISD</span>
&nbsp;
<span style="color: #339933;">#define progress    TXREG        //process variable</span>
<span style="color: #339933;">#define row_num        TMR1L        // Index of row</span>
<span style="color: #339933;">#define col_num        CCPR2L        // Index of column</span>
&nbsp;
<span style="color: #339933;">#define cycle_1        CCPR2H        // 10ms&lt;/td&gt;</span></pre></td></tr></table></div>

<p>Vậy chỉ cần thay PORTD bằng bất kì port nào khác mà keypad nối vào là được.</p>
<p>Còn hàm key_function() dùng để thực hiện các lệnh của phím, tùy các bạn.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> key_function<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>row_num<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
           <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">:</span>
                  <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>col_num<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
           <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">:</span>        <span style="color: #666666; font-style: italic;">//Key 1</span>
           <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">:</span>        <span style="color: #666666; font-style: italic;">// Key 2</span>
           <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">:</span>        <span style="color: #666666; font-style: italic;">// Key 3</span>
&nbsp;
           ………………….
       <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Chú ý: các bạn gọi hàm này trong hàm ngắt của Timer, bao nhiêu ms hay ns là tùy bạn.<br />
<strong><br />
Update 30/01/2009<br />
</strong><br />
Sửa lại code với tag pre cho đẹp, vì cái lúc trước quên không cho tag vào mà chỉ cho vào 1 table nên không đọc hiểu được code.</p>
<p>Chúc các bạn thành công.</p>
<img src="http://www.ngohaibac.net/?ak_action=api_record_view&id=171&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.ngohaibac.net/cam-nang-ngu-phap-tieng-han-thuc-dung-file-pdf/' rel='bookmark' title='Cẩm nang ngữ pháp tiếng Hàn Quốc thực dụng (file .pdf)'>Cẩm nang ngữ pháp tiếng Hàn Quốc thực dụng (file .pdf)</a></li>
<li><a href='http://www.ngohaibac.net/tong-hop-ngu-phap-tieng-han-thuc-dung-1-to-6/' rel='bookmark' title='Tổng hợp ngữ pháp tiếng Hàn thực dụng - 1 to 6'>Tổng hợp ngữ pháp tiếng Hàn thực dụng - 1 to 6</a></li>
<li><a href='http://www.ngohaibac.net/chuyen-ma-tran-gf-sang-ma-tran-binh-thuong-de-xu-ly-du-lieu/' rel='bookmark' title='Chuyển ma trận GF sang ma trận b&#236;nh thường để xử l&#253; dữ liệu'>Chuyển ma trận GF sang ma trận b&#236;nh thường để xử l&#253; dữ liệu</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ngohaibac.net/phuong-phap-quet-keypad-ma-tran-ban-phim-dung-ngat-timer/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Phan tich thuat toan: thuc hien lenh dieu khien tu PC qua RS232</title>
		<link>http://www.ngohaibac.net/phan-tich-thuat-toan-thuc-hien-lenh-dieu-khien-pc-qua-rs232/</link>
		<comments>http://www.ngohaibac.net/phan-tich-thuat-toan-thuc-hien-lenh-dieu-khien-pc-qua-rs232/#comments</comments>
		<pubDate>Sat, 12 Jul 2008 14:52:08 +0000</pubDate>
		<dc:creator>ngohaibac</dc:creator>
				<category><![CDATA[Giao tiếp RS232]]></category>
		<category><![CDATA[Microchip PIC]]></category>
		<category><![CDATA[Microprocessing]]></category>
		<category><![CDATA[PIC]]></category>
		<category><![CDATA[RS232]]></category>

		<guid isPermaLink="false">http://www.ngohaibac.net/phan-tich-thuat-toan-thuc-hien-lenh-dieu-khien-pc-qua-rs232/</guid>
		<description><![CDATA[Chào các bạn. Không biết ai đã đọc bài viết của mình PIC16F887 – Điều khiển thời gian đóng cắt một led từ PC qua UART chưa. Trong này, mình có thực hiện đặt thời gian đóng cắt từ PC bằng lệnh với cú pháp. Txyzt#: trong đó  xyzt là thời gian tính theo hệ [...]


Related posts:<ol><li><a href='http://www.ngohaibac.net/pic16f887-dieu-khien-thoi-gian-dong-cat-mot-led-tu-pc-qua-uart/' rel='bookmark' title='PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART'>PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART</a></li>
<li><a href='http://www.ngohaibac.net/lap-trinh-c-cho-vi-dieu-khien-van-de-khai-bao-bien/' rel='bookmark' title='Lập trình C cho vi điều khiển: vấn đề khai báo biến'>Lập trình C cho vi điều khiển: vấn đề khai báo biến</a></li>
<li><a href='http://www.ngohaibac.net/phuong-phap-quet-keypad-ma-tran-ban-phim-dung-ngat-timer/' rel='bookmark' title='Phương pháp quét Keypad ma trận dùng ngắt Timer'>Phương pháp quét Keypad ma trận dùng ngắt Timer</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>Chào các bạn.</p>
<p>Không biết ai đã đọc bài viết của mình <a href="http://www.ngohaibac.net/pic16f887-dieu-khien-thoi-gian-dong-cat-mot-led-tu-pc-qua-uart/" target="_blank">PIC16F887 – Điều khiển thời gian đóng cắt một led từ PC qua UART</a> chưa. Trong này, mình có thực hiện đặt thời gian đóng cắt từ PC bằng lệnh với cú pháp.</p>
<p>Txyzt#: trong đó  xyzt là thời gian tính theo hệ hexa.</p>
<p>Đây là đoạn chương trình xử lý ngắt UART:</p>
<table border="1" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="400" valign="top">void RxIntFcn(void){<br />
UART_Data = UART_Read();<br />
UART_PrChar(UART_Data);<br />
// Detect set time command<br />
// as format: Txy#<br />
switch (progress){<br />
case 0:                //Initialize<br />
if(UART_Data == 'T')<br />
progress = 1;<br />
else<br />
progress = 0;<br />
switch(UART_Data){<br />
case '1':<br />
//RB6       = 1;<br />
led1_cntL = 0x6F; // 1/9 s = 111 ms<br />
led1_cntH = 1;<br />
break;<br />
case '2':<br />
//RB6       = 1;<br />
led1_cntL = 0xDE; // 2/9<br />
led1_cntH = 0;<br />
break;<br />
case '3':<br />
//RB5      = 1;<br />
led1_cntL = 0x4D;    // 1s = 1000 = 0x03E8<br />
led1_cntH = 0x1;<br />
break;<br />
case '4':<br />
//RB5      = 1;<br />
led1_cntL = 0xBC;    // 5s = 5000 = 0x1388<br />
led1_cntH = 0x01;<br />
break;<br />
case '5':<br />
//RB5      = 1;<br />
led1_cntL = 0x2B;    // 5s = 5000 = 0x1388<br />
led1_cntH = 0x02;<br />
break;<br />
case '6':<br />
//RB5      = 1;<br />
led1_cntL = 0x9A;    // 5s = 5000 = 0x1388<br />
led1_cntH = 0x02;<br />
break;<br />
case '7':<br />
//RB5      = 1;<br />
led1_cntL = 0x09;    // 5s = 5000 = 0x1388<br />
led1_cntH = 0x03;<br />
&amp;<br />
#160;                   break;<br />
case '8':<br />
//RB5      = 1;<br />
led1_cntL = 0x78;    // 5s = 5000 = 0x1388<br />
led1_cntH = 0x03;<br />
break;<br />
case '9':<br />
//RB5      = 1;<br />
led1_cntL = 0xE7;    // 5s = 5000 = 0x1388<br />
led1_cntH = 0x03;<br />
break;<br />
case '0':<br />
//RB5      = 1;<br />
led1_cntL = 0xE8;    // 5s = 5000 = 0x1388<br />
led1_cntH = 0x03;<br />
break;<br />
default:<br />
PORTB   &amp;= 0x80;<br />
};<br />
break;<br />
case 1:                // Received 'T' character<br />
// Determind next state<br />
if (ishexa(UART_Data) == 1){<br />
progress = 2;<br />
// Write data to acc1<br />
acc1     = ascii2num(UART_Data);<br />
}<br />
else{<br />
UART_PrString(" Command error");<br />
progress = 0;<br />
};<br />
break;<br />
case 2:                // Received 'x' character<br />
if (ishexa(UART_Data) == 1){<br />
progress = 3;<br />
// Write data to acc2<br />
acc2     = ascii2num(UART_Data);<br />
}<br />
else{<br />
UART_PrString(" Command error");<br />
progress = 0;<br />
};<br />
break;<br />
case 3:                // Received 'x' character<br />
if (ishexa(UART_Data) == 1){<br />
progress = 4;<br />
// Write data to acc2<br />
acc3     = ascii2num(UART_Data);<br />
}<br />
else{<br />
UART_PrString(" Command error");<br />
progress = 0;<br />
};<br />
break;<br />
case 4:                // Received 'x' character<br />
if (ishexa(UART_Data) == 1){<br />
progress = 5;</p>
<p>;            // Write data to acc2<br />
acc4     = ascii2num(UART_Data);<br />
}<br />
else{<br />
UART_PrString(" Command error");<br />
progress = 0;<br />
};<br />
break;<br />
case 5:<br />
if (UART_Data == '#'){<br />
progress = 0;<br />
// Write 'OK' statement<br />
UART_PrString(" Timer is set");<br />
// Update data from ACC to led1_counter_acc<br />
led1_cnt_acc1 = (acc1&lt;&lt;4) | acc2;<br />
led1_cnt_acc2 = (acc3&lt;&lt;4) | acc4;<br />
}<br />
else{<br />
UART_PrString(" Command error");<br />
progress = 0;<br />
};<br />
break;<br />
default: progress = 0;<br />
break;<br />
};</p>
<p>// On, off command<br />
switch(UART_Data){<br />
case 'P':        // On led<br />
// Update led1_counter<br />
led1_cntH = led1_cnt_acc1;<br />
led1_cntL = led1_cnt_acc2;<br />
break;<br />
case 'S':<br />
// Clear led1_counter content<br />
led1_cntH = 0;<br />
led1_cntL = 0;<br />
break;<br />
};<br />
}</td>
</tr>
</tbody>
</table>
<p>Thuật toán mình sử dụng rất đơn giản: dùng một biến progress là biến quá trình. Mặc định giá trị này là 0, khi nhận dc đúng kí tự T thì biến sẽ có giá trị = 1. Khi đó, nó sẽ kiểm tra tiếp theo có phải gõ vào là chữ số từ 0 đến 9, và từ A đến F hay không.Mỗi trạng thái, khi nhận đúng đều chuyển từ giá trị string sang giá trị số, ví dụ: kí tự ‘0’ chuyển thành giá trị unsigned char là 1. Xem hàm này trong hàm system.h. Nếu đúng thì progress tiếp tục tăng đến trạng thái kiểm tra tiếp theo, nếu không nó sẽ báo lỗi “Command Error” gửi lên PC.</p>
<p>Tiếp tục, đến cuối cùng khi nhận xong kí tự # thì tức là đã nhận đúng lệnh và thực hiện gán dữ liệu để lấy ra byte cao và byte thấp của giá trị nhập vào.</p>
<p>Đây là hàm system.h</p>
<table border="1" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="400" valign="top">bit ishexa(unsigned char a){<br />
if ((a &gt;= ‘0′ &amp;&amp; a&lt;= ‘9′) || (a&gt;= ‘A’ &amp;&amp; a&lt;= ‘F’))<br />
return 1;<br />
else return 0;<br />
};</p>
<p>// Convert from ASCII to number<br />
unsigned char ascii2num(unsigned char a){<br />
if( a &gt;= ‘0′ &amp;&amp; a&lt;= ‘9′)<br />
return (a-’0′);<br />
else<br />
return (a-’A’ + 0×0A);<br />
}</td>
</tr>
</tbody>
</table>
<p>Hi vọng phân tích của mình làm các bạn hiểu được cách để thực hiện các lệnh điều khiển từ PC hiệu quả.</p>
<p>Chúc các bạn thành công.</p>
<img src="http://www.ngohaibac.net/?ak_action=api_record_view&id=168&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.ngohaibac.net/pic16f887-dieu-khien-thoi-gian-dong-cat-mot-led-tu-pc-qua-uart/' rel='bookmark' title='PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART'>PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART</a></li>
<li><a href='http://www.ngohaibac.net/lap-trinh-c-cho-vi-dieu-khien-van-de-khai-bao-bien/' rel='bookmark' title='Lập trình C cho vi điều khiển: vấn đề khai báo biến'>Lập trình C cho vi điều khiển: vấn đề khai báo biến</a></li>
<li><a href='http://www.ngohaibac.net/phuong-phap-quet-keypad-ma-tran-ban-phim-dung-ngat-timer/' rel='bookmark' title='Phương pháp quét Keypad ma trận dùng ngắt Timer'>Phương pháp quét Keypad ma trận dùng ngắt Timer</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ngohaibac.net/phan-tich-thuat-toan-thuc-hien-lenh-dieu-khien-pc-qua-rs232/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART</title>
		<link>http://www.ngohaibac.net/pic16f887-dieu-khien-thoi-gian-dong-cat-mot-led-tu-pc-qua-uart/</link>
		<comments>http://www.ngohaibac.net/pic16f887-dieu-khien-thoi-gian-dong-cat-mot-led-tu-pc-qua-uart/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 15:10:42 +0000</pubDate>
		<dc:creator>ngohaibac</dc:creator>
				<category><![CDATA[Microchip PIC]]></category>

		<guid isPermaLink="false">http://www.ngohaibac.net/pic16f887-dieu-khien-thoi-gian-dong-cat-mot-led-tu-pc-qua-uart/</guid>
		<description><![CDATA[Chào các bạn. Nay ngồi code cho con PIC16F887 để điều khiển đèn halogen, thực ra chính là điều khiển một chân rồi qua TIP122 và relay để điều khiển đèn thôi (vì dòng tải lên tới 10A). Mình thấy cách viết hay nên chia sẻ với các bạn. Dùng để lưu trữ luôn. Để [...]


Related posts:<ol><li><a href='http://www.ngohaibac.net/phan-tich-thuat-toan-thuc-hien-lenh-dieu-khien-pc-qua-rs232/' rel='bookmark' title='Phan tich thuat toan: thuc hien lenh dieu khien tu PC qua RS232'>Phan tich thuat toan: thuc hien lenh dieu khien tu PC qua RS232</a></li>
<li><a href='http://www.ngohaibac.net/thu-vien-giao-tiep-rs232-cho-pic18-bang-htpic18/' rel='bookmark' title='Thư viện giao tiếp RS232 cho PIC18 bằng HTPIC18'>Thư viện giao tiếp RS232 cho PIC18 bằng HTPIC18</a></li>
<li><a href='http://www.ngohaibac.net/lap-trinh-c-cho-vi-dieu-khien-van-de-khai-bao-bien/' rel='bookmark' title='Lập trình C cho vi điều khiển: vấn đề khai báo biến'>Lập trình C cho vi điều khiển: vấn đề khai báo biến</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>Chào các bạn.</p>
<p>Nay ngồi code cho con PIC16F887 để điều khiển đèn halogen, thực ra chính là điều khiển một chân rồi qua TIP122 và relay để điều khiển đèn thôi (vì dòng tải lên tới 10A).</p>
<p>Mình thấy cách viết hay nên chia sẻ với các bạn. Dùng để lưu trữ luôn.</p>
<p>Để điều khiển thời gian dùng lệnh:</p>
<blockquote><p>Txyzt# : trong đó: xyzt là thời gian viết theo hệ hexa. Đơn vị là ms</p>
<p>S: stop led</p>
<p>P: play led</p>
</blockquote>
<p>Đầu tiền là file UART.c và UART.h có chứa các định nghĩa và thực thi dành cho cổng UART. Tất nhiên có thể áp dụng cho mọi loại PIC16.</p>
<table cellspacing="0" cellpadding="2" width="400" border="1">
<tbody>
<tr>
<td valign="top" width="400">
<p>// UART.h            <br />//=======================================================================================             <br />#ifndef _UART_H             <br />#define _UART_H             <br />//========================================================================================             <br />#include &quot;pic.h&quot;             <br />#include &quot;sysdef.h&quot; </p>
<p>//========================================================================================            <br />// Declare sosme functions             <br />void UART_Init(unsigned int BaudRate);&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Initialize for UART             <br />void UART_PrChar(unsigned char a);             <br />void UART_PrString(const char* str);             <br />unsigned char UART_Read(void);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Read data from UART Port             <br />//void UART_detectBaudRate(void);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Auto detect baud rate             <br />#endif</p>
</td>
</tr>
</tbody>
</table>
<p>Tiếp theo là hàm thực thi UART.c    </p>
<table cellspacing="0" cellpadding="2" width="400" border="1">
<tbody>
<tr>
<td valign="top" width="400">
<p>// UART.h            <br /># include &quot;UART.h&quot;             <br /># include &quot;pic.h&quot;             <br /># include &quot;sysdef.h&quot; </p>
<p>//========================================================================================            <br />// Initialize UART             <br />void UART_Init(unsigned int BaudRate){             <br />&#160;&#160;&#160; unsigned int n; </p>
<p>// Configure BaudRate            <br />&#160;&#160;&#160; BRGH = 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Low speed.             <br />&#160;&#160;&#160; BRG16 = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 16-Bit Baud Rate Generator - SPBRGH and SPBRG </p>
<p>&#160;&#160;&#160; // Baudrate = Fosc/[16(n+1)]&#160; =&gt; n = ((Fosc/Baudrate)&gt;&gt;4) - 1;&#160; n = SPBRGH: SPBRG;            <br />&#160;&#160;&#160; n = ((Fosc/BaudRate)&gt;&gt;4) - 1;             <br />&#160;&#160;&#160; SPBRG = n;             <br />&#160;&#160;&#160; SPBRGH = n&gt;&gt;8;             <br />// Enable the asyncchronous serial port.             <br />&#160;&#160;&#160; SYNC = 0 ;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Asynchronous mode&#160;&#160;&#160; <br />&#160;&#160;&#160; SPEN = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Serial port enable.             <br />&#160;&#160;&#160; TRIS_TX = 0;             <br />&#160;&#160;&#160; TRIS_RX = 1; </p>
<p>//Configure for Transmitter mode.&#160;&#160;&#160; <br />&#160;&#160;&#160; TXEN&#160; = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Transmit enable </p>
<p>//Configure for Receiver mode            <br />&#160;&#160;&#160; CREN = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Enable the reception </p>
<p>&#160;&#160;&#160; RCIF = 0;            <br />&#160;&#160;&#160; RCIE = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Reception Interrupt Enable             <br />&#160;&#160;&#160; GIE = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Global Interrupt Enable             <br />&#160;&#160;&#160; PEIE = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Perapheral Interrupt Enable             <br />}&#160;&#160;&#160; </p>
<p>//=====================================================================================            <br />void UART_PrChar(unsigned char a){             <br />&#160;&#160;&#160; while(!TRMT);             <br />&#160;&#160;&#160; TXREG = a;             <br />}&#160;&#160;&#160; </p>
<p>//=====================================================================================            <br />void UART_PrString(const char* str){             <br />&#160;&#160;&#160; while(*str)             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; UART_PrChar(*str ++);             <br />}&#160;&#160;&#160; </p>
<p>//=====================================================================================            <br />unsigned char UART_Read(void){             <br />&#160;&#160;&#160; return (RCREG);             <br />}&#160;&#160;&#160; </p>
<p>//====================================================================================            <br />// Only avaiable for PIC18             <br />/*             <br />void UART_detectBaudRate(void){             <br />&#160;&#160;&#160; TXSTA&#160;&#160;&#160;&#160; = 0b00100100;             <br />&#160;&#160;&#160; RCSTA&#160;&#160;&#160;&#160; = 0b10010000;             <br />&#160;&#160;&#160; BAUDCON = 0b00001001;             <br />&#160;&#160;&#160; while(ABDEN){             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(ABDOVF == 1) ABDOVF = 0;             <br />&#160;&#160;&#160; };             <br />}             <br />*/</p>
</td>
</tr>
</tbody>
</table>
<p>Tiếp theo là sysdef.h dùng để định nghĩa các biến dành cho hệ thống:    </p>
<table cellspacing="0" cellpadding="2" width="400" border="1">
<tbody>
<tr>
<td valign="top" width="400">
<p>// Define some useful values </p>
<p>#define&#160;&#160;&#160; Fosc&#160;&#160;&#160; 20000000&#160;&#160;&#160; //&#160; Frequency of Crystal </p>
<p>// Define some temp signals            <br />#define led1&#160;&#160;&#160;&#160;&#160;&#160;&#160; RB7//RD2//RB7 </p>
<p>#define&#160;&#160;&#160; led1_cntL&#160;&#160;&#160; TMR2&#160;&#160;&#160; // Led1 counter as 16 bit,            <br />#define led1_cntH&#160;&#160;&#160; ADRESH </p>
<p>#define&#160;&#160;&#160; UART_Data&#160;&#160;&#160; CCPR2H&#160;&#160;&#160; // UART Data temporary&#160;&#160;&#160; </p>
<p>// Define 8 bit acc            <br />#define acc1&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; TMR1L             <br />#define acc2&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; TMR1H             <br />#define acc3&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ANSELH             <br />#define acc4&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; EEADRL             <br />#define led1_cnt_acc1&#160;&#160;&#160; CCPR1H             <br />#define led1_cnt_acc2&#160;&#160;&#160; CCPR1L </p>
<p>#define progress&#160;&#160;&#160;&#160;&#160;&#160;&#160; SSPADD            <br />// Define for UART Module             <br />#define TX&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; RC6             <br />#define RX&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; RC7             <br />#<br />
define TRIS_TX&#160;&#160;&#160;&#160;&#160;&#160;&#160; TRISC6             <br />#define TRIS_RX&#160;&#160;&#160;&#160;&#160;&#160;&#160; TRISC7</p>
</td>
</tr>
</tbody>
</table>
<p>Tiếp theo là system.h định nghĩa các hàm hệ thống: </p>
<table cellspacing="0" cellpadding="2" width="400" border="1">
<tbody>
<tr>
<td valign="top" width="400">
<p>bit ishexa(unsigned char a){            <br />&#160;&#160;&#160; if ((a &gt;= '0' &amp;&amp; a&lt;= '9') || (a&gt;= 'A' &amp;&amp; a&lt;= 'F'))             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return 1;             <br />&#160;&#160;&#160; else return 0;             <br />}; </p>
<p>// Convert from ASCII to number            <br />unsigned char ascii2num(unsigned char a){             <br />&#160;&#160;&#160; if( a &gt;= '0' &amp;&amp; a&lt;= '9')             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return (a-'0');             <br />&#160;&#160;&#160; else             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return (a-'A' + 0x0A);             <br />}</p>
</td>
</tr>
</tbody>
</table>
<p>Cuối cùng là hàm Main.c là hàm chính:    </p>
<table cellspacing="0" cellpadding="2" width="400" border="1">
<tbody>
<tr>
<td valign="top" width="400">
<p>/*;========================================================            <br />/*; Ten chuong trinh&#160;&#160;&#160; : Test IO             <br />; Nguoi thuc hien&#160;&#160;&#160; : Ngo Hai Bac (NOHB)             <br />; Ngay thuc hien&#160;&#160;&#160; : 27/06/07             <br />; Phien ban&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 1.0&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />; Mo ta phan cung&#160;&#160;&#160; : Dung PIC18F2525/2620/4525/4620 - thach anh 20MHz             <br />; Trinh dich&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : HTPIC 18V9.50&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />;----------------------------------------------------------------             <br />; Ngay hoan thanh&#160;&#160;&#160; :             <br />; Ngay kiem tra&#160;&#160;&#160; :             <br />; Nguoi kiem tra&#160;&#160;&#160; :             <br />;----------------------------------------------------------------             <br />; Chu thich&#160;&#160;&#160; :&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />;========================================================*/             <br />// Include             <br /># include &quot;pic.h&quot;             <br /># include &quot;sysdef.h&quot;             <br /># include &quot;UART.h&quot;             <br /># include &quot;system.h&quot; </p>
<p>// configuration            <br />__CONFIG(HS &amp; PWRTEN &amp; BOREN &amp; LVPDIS &amp; WDTDIS ); </p>
<p>// Receiver Interrupt Function            <br />void RxIntFcn(void);             <br />void Timer0IntFcn(void);             <br />// Interrupt Function             <br />void interrupt MyInt&#160; (void) {             <br />&#160;&#160;&#160; if (RCIE &amp;&amp; RCIF){             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; RCIF = 0;             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; RxIntFcn();&#160;&#160;&#160; <br />&#160;&#160;&#160; };             <br />&#160;&#160;&#160; if (T0IE &amp;&amp; T0IF){             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; T0IF&#160;&#160;&#160;&#160; = 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Clear interrupt flag             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; TMR0&#160;&#160;&#160; = 100;             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Timer0IntFcn();             <br />&#160;&#160;&#160; };             <br />}             <br />// Init function             <br />void System_Init(void);             <br />/*=====================================================================================             <br />&#160;&#160;&#160; Main function             <br />=====================================================================================*/             <br />void main(){             <br />&#160;&#160;&#160; System_Init();&#160;&#160;&#160; <br />&#160;&#160;&#160; UART_Init(9600);             <br />&#160;&#160;&#160; //UART_detectBaudRate(); </p>
<p>&#160;&#160;&#160; while(1);            <br />} </p>
<p>//=====================================================================================            <br />// Implementation of some functions             </p>
<p>void RxIntFcn(void){           <br />&#160;&#160;&#160; UART_Data = UART_Read();            <br />&#160;&#160;&#160; UART_PrChar(UART_Data);            <br />&#160;&#160;&#160; // Detect set time command            <br />&#160;&#160;&#160; // as format: Txy#            <br />&#160;&#160;&#160; switch (progress){            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; case 0:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //Initialize            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(UART_Data == 'T')            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; progress = 1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; progress = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; switch(UART_Data){            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; case '1':             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //RB6&#160;&#160;&#160;&#160;&#160;&#160; = 1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL = 0x6F; // 1/9 s = 111 ms            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH = 1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; case '2':             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //RB6&#160;&#160;&#160;&#160;&#160;&#160; = 1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL = 0xDE; // 2/9            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; case '3':&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //RB5&#160;&#160;&#160;&#160;&#160; = 1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL = 0x4D;&#160;&#160;&#160; // 1s = 1000 = 0x03E8            <br />&#160;&#160;&#160;&#160<br />
;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH = 0x1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; case '4':&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //RB5&#160;&#160;&#160;&#160;&#160; = 1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL = 0xBC;&#160;&#160;&#160; // 5s = 5000 = 0x1388            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH = 0x01;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; case '5':&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //RB5&#160;&#160;&#160;&#160;&#160; = 1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL = 0x2B;&#160;&#160;&#160; // 5s = 5000 = 0x1388            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH = 0x02;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; case '6':&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //RB5&#160;&#160;&#160;&#160;&#160; = 1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL = 0x9A;&#160;&#160;&#160; // 5s = 5000 = 0x1388            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH = 0x02;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; case '7':&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //RB5&#160;&#160;&#160;&#160;&#160; = 1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL = 0x09;&#160;&#160;&#160; // 5s = 5000 = 0x1388            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH = 0x03;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; case '8':&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //RB5&#160;&#160;&#160;&#160;&#160; = 1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL = 0x78;&#160;&#160;&#160; // 5s = 5000 = 0x1388            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH = 0x03;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; case '9':&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //RB5&#160;&#160;&#160;&#160;&#160; = 1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL = 0xE7;&#160;&#160;&#160; // 5s = 5000 = 0x1388            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH = 0x03;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; case '0':&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //RB5&#160;&#160;&#160;&#160;&#160; = 1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL = 0xE8;&#160;&#160;&#160; // 5s = 5000 = 0x1388            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH = 0x03;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; default:            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; PORTB&#160;&#160; &amp;= 0x80;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; };            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; case 1:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Received 'T' character            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Determind next state            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (ishexa(UART_Data) == 1){            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; progress = 2;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Write data to acc1            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; acc1&#160;&#160;&#160;&#160; = ascii2num(UART_Data);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else{            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UART_PrString(&quot; Command error&quot;);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; progress = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; };            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; case 2:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Received 'x' character            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (ishexa(UART_Data) == 1){            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; progress = 3;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Write data to acc2            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; acc2&#160;&#160;&#160;&#160; = ascii2num(UART_Data);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else{            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UART_PrString(&quot; Command error&quot;);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; progress = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; };            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; case 3:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Received 'x' character            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (ishexa(UART_Data) == 1){            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; progress = 4;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Write data to acc2            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; acc3&#160;&#160;&#160;&#160; = ascii2num(UART_Data);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else{            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UART_PrString(&quot; Command error&quot;);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; progress = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; };            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; case 4:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Received 'x' character            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (ishexa(UART_Data) == 1){            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; progress = 5;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Write data to acc2            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; acc4&#160;&#160;&#160;&#160; = ascii2num(UART_Data);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else{            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UART_PrString(&quot; Command error&quot;);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; progress = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; };            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; case 5:            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (UART_Data == '#'){            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; progress = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Write 'OK' statement            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UART_PrString(&quot; Timer is set&quot;);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Update data from ACC to led1_counter_acc            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cnt_acc1 = (acc1&lt;&lt;4) | acc2;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cnt_acc2 = (acc3&lt;&lt;4) | acc4;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else{            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UART_PrString(&quot; Command error&quot;);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; progress = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; };            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; default: progress = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160; }; </p>
<p>&#160;&#160;&#160; // On, off command           <br />&#160;&#160;&#160; switch(UART_Data){            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; case 'P':&#160;&#160;&#160;&#160;&#160;&#160;&#160; // On led            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Update led1_counter            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH = led1_cnt_acc1;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL = led1_cnt_acc2;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; case 'S':            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Clear led1_counter content            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;            <br />&#160;&#160;&#160; };            <br />}</p>
<p>// Timer0 interrupt function            <br />void Timer0IntFcn(void){&#160;&#160;&#160; <br />&#160;&#160;&#160; // Control led1&#160;&#160;&#160; <br />&#160;&#160;&#160; led1 = 1;             <br />&#160;&#160;&#160; if (led1_cntL == 0){             <br />&#1<br />
60;&#160;&#160;&#160;&#160;&#160;&#160; if (led1_cntH == 0)             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1 = 0;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; else {             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntH --;             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; led1_cntL --;             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; };             <br />&#160;&#160;&#160; }             <br />&#160;&#160;&#160; else&#160;&#160;&#160; led1_cntL--;&#160;&#160;&#160; <br />}             <br />// Initialize the system             <br />void System_Init(void){             <br />// Init for ports             <br />&#160;&#160;&#160; // PortA as output             <br />&#160;&#160;&#160; OPTION = 0b00000000;             <br />&#160;&#160;&#160; ADCON1&#160;&#160;&#160; = 0x07;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; /*Configure all ADC pins&#160; to be digital inputs*/             <br />&#160;&#160;&#160; TRISA&#160;&#160;&#160; = 0x00;             <br />&#160;&#160;&#160; PORTA&#160;&#160;&#160; = 0xFF; </p>
<p>&#160;&#160;&#160; // PortB as output            <br />&#160;&#160;&#160; TRISB&#160;&#160;&#160; = 0x00;             <br />&#160;&#160;&#160; PORTB&#160;&#160;&#160; = 0x00;             <br />&#160;&#160;&#160; // PortD as input             <br />&#160;&#160;&#160; TRISD&#160;&#160; = 0x00;             <br />&#160;&#160;&#160; TRISD&#160;&#160; = 0x00;             <br />// Init for Timer0             <br />&#160;&#160;&#160; //Init TCON Register             <br />&#160;&#160;&#160; /* </p>
<p>&#160;&#160;&#160; T0CS&#160;&#160;&#160; = 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Internal instruction cycle clock (CLKO)            <br />&#160;&#160;&#160; TOSE&#160;&#160;&#160; = 0;             <br />&#160;&#160;&#160; PSA&#160;&#160;&#160;&#160;&#160;&#160;&#160; = 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Timer0 is assigned. Timer0 clock input comes from prescaler output             <br />&#160;&#160;&#160; T0PS2&#160;&#160; = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Scale value = 100 -&gt; 32             <br />&#160;&#160;&#160; T0PS1&#160;&#160; = 0;             <br />&#160;&#160;&#160; T0PS0&#160;&#160; = 0;             <br />&#160;&#160;&#160; */             <br />&#160;&#160;&#160; OPTION&#160;&#160;&#160; = 0b00000100;             <br />&#160;&#160;&#160; // Init timer0             <br />&#160;&#160;&#160; TMR0&#160;&#160;&#160; = 100;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //1000 us = 0.2us * 5000 = 0.2us * 32(pre) * 156&#160;&#160;&#160; <br />&#160;&#160;&#160; T0IE&#160;&#160;&#160; = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // enable Timer0 interrupt             <br />&#160;&#160;&#160; T0IF&#160;&#160;&#160; = 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Clear Timer0 interrupt flag </p>
<p>// Init for counters            <br />&#160;&#160;&#160; led1_cntH = 0;             <br />&#160;&#160;&#160; led1_cntL = 0;             <br />&#160;&#160;&#160; led1_cnt_acc1 = 0;             <br />&#160;&#160;&#160; led1_cnt_acc2 = 0;             <br />&#160;&#160;&#160; progress&#160;&#160;&#160;&#160;&#160; = 0;             <br />} </p>
</td>
</tr>
</tbody>
</table>
<p>Chúc các bạn thành công.</p>
<img src="http://www.ngohaibac.net/?ak_action=api_record_view&id=166&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.ngohaibac.net/phan-tich-thuat-toan-thuc-hien-lenh-dieu-khien-pc-qua-rs232/' rel='bookmark' title='Phan tich thuat toan: thuc hien lenh dieu khien tu PC qua RS232'>Phan tich thuat toan: thuc hien lenh dieu khien tu PC qua RS232</a></li>
<li><a href='http://www.ngohaibac.net/thu-vien-giao-tiep-rs232-cho-pic18-bang-htpic18/' rel='bookmark' title='Thư viện giao tiếp RS232 cho PIC18 bằng HTPIC18'>Thư viện giao tiếp RS232 cho PIC18 bằng HTPIC18</a></li>
<li><a href='http://www.ngohaibac.net/lap-trinh-c-cho-vi-dieu-khien-van-de-khai-bao-bien/' rel='bookmark' title='Lập trình C cho vi điều khiển: vấn đề khai báo biến'>Lập trình C cho vi điều khiển: vấn đề khai báo biến</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ngohaibac.net/pic16f887-dieu-khien-thoi-gian-dong-cat-mot-led-tu-pc-qua-uart/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Kết nối USB ICD2,PICKit,...  với Piklab trong Ubuntu OS</title>
		<link>http://www.ngohaibac.net/ket-noi-usb-icd2-pickit2-voi-piklab-trong-ubuntu-os/</link>
		<comments>http://www.ngohaibac.net/ket-noi-usb-icd2-pickit2-voi-piklab-trong-ubuntu-os/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 11:57:11 +0000</pubDate>
		<dc:creator>ngohaibac</dc:creator>
				<category><![CDATA[Microchip PIC]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.ngohaibac.net/?p=145</guid>
		<description><![CDATA[Chào các bạn. Trên hệ điều hành Windows, chúng ta có MPLab để làm việc với các chú Microchip PIC thì trên Ubuntu có Piklab, nhưng với các mạch nạp như ICD USB, PICKit ... sẽ phải dùng như thế nào ?? Làm sao để chương trình Piklab kết nối được với những mạch nạp [...]


Related posts:<ol><li><a href='http://www.ngohaibac.net/hieu-ung-compiz-fusion-trong-ubuntu-804/' rel='bookmark' title='Hiệu ứng Compiz Fusion trong Ubuntu 8.04'>Hiệu ứng Compiz Fusion trong Ubuntu 8.04</a></li>
<li><a href='http://www.ngohaibac.net/chup-anh-man-hinh-trong-ubuntu-904/' rel='bookmark' title='Chụp ảnh màn hình trong Ubuntu 9.04'>Chụp ảnh màn hình trong Ubuntu 9.04</a></li>
<li><a href='http://www.ngohaibac.net/mot-vai-phan-mem-rat-tot-trong-ubuntu/' rel='bookmark' title='Một vài phần mềm đọc .pdf rất tốt trong Ubuntu'>Một vài phần mềm đọc .pdf rất tốt trong Ubuntu</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>Chào các bạn.</p>
<p>Trên hệ điều hành Windows, chúng ta có MPLab để làm việc với các chú Microchip PIC thì trên Ubuntu có Piklab, nhưng với các mạch nạp như ICD USB, PICKit ... sẽ phải dùng như thế nào ?? Làm sao để chương trình Piklab kết nối được với những mạch nạp này.</p>
<p>Sau một hồi tìm hiểu em đã connect thành công mạch Piklab với ICD2 trong Ubuntu 8.04 LTS. Cách làm như sau.</p>
<p>1. Tạo một file <strong>026_microchip.rules </strong> trên Desktop với nội dung như sau:</p>
<p><span id="more-145"></span></p>
<pre class="alt2" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 146px; text-align: left;" dir="ltr">#PICKit
SYSFS{idVendor}=="04d8", SYSFS{idProduct}=="0032", MODE="0660", GROUP="<span style="color: red;">ngohaibac</span>"
#PICKit2
SYSFS{idVendor}=="04d8", SYSFS{idProduct}=="0033", MODE="0660", GROUP="<span style="color: red;">ngohaibac</span>"
#ICD2
SYSFS{idVendor}=="04d8", SYSFS{idProduct}=="8000", MODE="0660", GROUP="<span style="color: red;">ngohaibac</span>"
#ICD21
SYSFS{idVendor}=="04d8", SYSFS{idProduct}=="8001", MODE="0660", GROUP="<span style="color: red;">ngohaibac</span>"</pre>
<p>Trong đó, ngohaibac là tên của group user mà mình đang dùng, vì thế sẽ thay bằng tên group của máy bạn.</p>
<p>2. Copy file này vào trong thư mục <strong>/etc/udev/rules.d</strong> bằng quyền root. Do đó, phải dùng lệnh <strong>su</strong> để chuyển quyền root, và dùng lệnh <strong>cp</strong> để copy.</p>
<pre class="alt2" style="border: 1px inset; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 50px; text-align: left;" dir="ltr">su
cp  026_microchip.rules /home/ngohaibac/Desktop /etc/udev/rules.d</pre>
<p>3. Mở Piklab lên và cấu hình phần programmer cho nó. Vào menu <strong>Programmer -&gt; Settings</strong> vào tab <strong>Programmer Selection</strong> chọn USB Port và thư mục Fireware trỏ đến thư mục <strong>C:/Program Files/Microchip/ICD2</strong> khi cài MPLab trong Windows. Nói chung nếu ổ C của bạn format là NTFS thì nên copy thư mục ICD2 vào phân vùng FAT32 hoặc vào trong thư mục nào đó của Ubuntu.</p>
<p>Thế là xong, ke ke.</p>
<p>Quay vào trong chương trình Piklab và chọn thử Bank Select xem ke ke. Mình đã thử và connect với ICD2 thành công.</p>
<p>Chúc các bạn thành công.</p>
<p>Tham khảo</p>
<p><a href="http://piklab.sourceforge.net/files/libusb_udev_hotplug.txt" target="_blank">http://piklab.sourceforge.net/files/...ev_hotplug.txt</a><br />
<a href="http://piklab.wiki.sourceforge.net/USB+Port+Problems" target="_blank">http://piklab.wiki.sourceforge.net/USB+Port+Problems</a><br />
<a id="thread_title_10819" href="http://dientuvietnam.net/forums/showthread.php?t=10819">PIC/dsPIC trên Linux - Piklab trong Ubuntu 8.04++</a></p>
<img src="http://www.ngohaibac.net/?ak_action=api_record_view&id=145&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.ngohaibac.net/hieu-ung-compiz-fusion-trong-ubuntu-804/' rel='bookmark' title='Hiệu ứng Compiz Fusion trong Ubuntu 8.04'>Hiệu ứng Compiz Fusion trong Ubuntu 8.04</a></li>
<li><a href='http://www.ngohaibac.net/chup-anh-man-hinh-trong-ubuntu-904/' rel='bookmark' title='Chụp ảnh màn hình trong Ubuntu 9.04'>Chụp ảnh màn hình trong Ubuntu 9.04</a></li>
<li><a href='http://www.ngohaibac.net/mot-vai-phan-mem-rat-tot-trong-ubuntu/' rel='bookmark' title='Một vài phần mềm đọc .pdf rất tốt trong Ubuntu'>Một vài phần mềm đọc .pdf rất tốt trong Ubuntu</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ngohaibac.net/ket-noi-usb-icd2-pickit2-voi-piklab-trong-ubuntu-os/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quản l&#253; v&#224; build Project với tr&#236;nh dịch HTPIC bằng Visual C++.Net 2005</title>
		<link>http://www.ngohaibac.net/quan-ly-va-build-project-voi-trinh-dich-htpic-bang-visual-cnet-2005/</link>
		<comments>http://www.ngohaibac.net/quan-ly-va-build-project-voi-trinh-dich-htpic-bang-visual-cnet-2005/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 00:26:40 +0000</pubDate>
		<dc:creator>ngohaibac</dc:creator>
				<category><![CDATA[Microchip PIC]]></category>
		<category><![CDATA[Visual C++]]></category>
		<category><![CDATA[PIC]]></category>

		<guid isPermaLink="false">http://www.ngohaibac.net/quan-ly-va-build-project-voi-trinh-dich-htpic-bang-visual-cnet-2005/</guid>
		<description><![CDATA[Ch&#224;o c&#225;c bạn. B&#224;i n&#224;y m&#236;nh viết l&#226;u rồi nhưng thấy rất hay n&#234;n post lại cho c&#225;c bạn. C&#225;c bạn d&#249;ng qua Visual C++ 6.0 v&#224; Visual C++.Net đều thấy t&#225;c dụng quản l&#253; Project v&#224; gợi &#253; code rất l&#224; hay. Khi d&#249;ng ta sẽ kh&#244;ng sợ qu&#234;n h&#224;m n&#224;y, h&#224;m kia.Quản l&#253; [...]


Related posts:<ol><li><a href='http://www.ngohaibac.net/beginning-visual-c-2005-c%e1%bb%a7a-ivor-horton/' rel='bookmark' title='Beginning Visual C++ 2005 của Ivor Horton'>Beginning Visual C++ 2005 của Ivor Horton</a></li>
<li><a href='http://www.ngohaibac.net/thu-vien-giao-tiep-rs232-cho-pic18-bang-htpic18/' rel='bookmark' title='Thư viện giao tiếp RS232 cho PIC18 bằng HTPIC18'>Thư viện giao tiếp RS232 cho PIC18 bằng HTPIC18</a></li>
<li><a href='http://www.ngohaibac.net/huong-dan-lap-trinh-giao-tiep-rs232-tren-pc-bang-visual-c-60/' rel='bookmark' title='Hướng dẫn lập trình giao tiếp RS232 trên PC bằng Visual C++ 6.0'>Hướng dẫn lập trình giao tiếp RS232 trên PC bằng Visual C++ 6.0</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>Ch&#224;o c&#225;c bạn.</p>
<p>B&#224;i n&#224;y m&#236;nh viết l&#226;u rồi nhưng thấy rất hay n&#234;n post lại cho c&#225;c bạn.</p>
<p>C&#225;c bạn d&#249;ng qua Visual C++ 6.0 v&#224; Visual C++.Net đều thấy t&#225;c dụng quản l&#253; Project v&#224; gợi &#253; code rất l&#224; hay. Khi d&#249;ng ta sẽ kh&#244;ng sợ qu&#234;n h&#224;m n&#224;y, h&#224;m kia.Quản l&#253; được cả một Project to vật v&#227; <img title="Big Grin" border="0" alt="" src="http://www.picvietnam.com/forum/images/smilies/biggrin.gif" />.</p>
<p>Sau đ&#226;y xin hướng dẫn c&#225;c bạn c&#225;ch quản lý và build m&#244;̣t Project cho PIC16F877A với trình dịch HTPIC bằng Visual C++.Net.</p>
<p>Để l&#224;m điều n&#224;y, đầu ti&#234;n bạn phải dịch qua một Project đơn giản bằng MPLAB với tr&#236;nh dịch HTPIC đ&#243;. Sẽ hiểu ra vấn đề. </p>
<p>Project của m&#236;nh c&#243; c&#225;c file sau: <b>main.c, UART.c, UART.h.</b> T&#234;n Project l&#224; <b>UART     <br /></b>    <br />Khi m&#236;nh dịch một Project m&#236;nh thấy n&#243; thực hiện c&#225;c command sau:</p>
<blockquote><pre>Executing: &quot;c:\program files\HT-PICC\BIN\PICC.EXE&quot; -C -E&quot;main.cce&quot; &quot;main.c&quot; -O&quot;main.obj&quot; -Zg9 -O -ASMLIST -Q -MPLAB -16F877A

Executing: &quot;c:\program files\HT-PICC\BIN\PICC.EXE&quot; -C -E&quot;UART.cce&quot; &quot;UART.c&quot; -O&quot;UART.obj&quot; -Zg9 -O -ASMLIST -Q -MPLAB -16F877A

Executing: &quot;c:\program files\HT-PICC\BIN\PICC.EXE&quot; -E&quot;UART.lde&quot; &quot;G:\My Projects\PIC_Projects\PIC16F877A\UART\main.obj&quot; &quot;G:\My Projects\PIC_Projects\PIC16F877A\UART\UART.obj&quot; -M&quot;UART.map&quot; -O&quot;UART.cof&quot; -O&quot;UART.hex&quot; -Q -MPLAB -16F877A</pre>
</blockquote>
<p>khi đ&#243; m&#236;nh t&#243;m lược lại th&#224;nh:</p>
<blockquote>
<pre><b>&quot;c:\program files\HT-PICC\BIN\PICC.EXE&quot;</b> -C -E&quot;main.cce&quot; &quot;main.c&quot; -O&quot;main.obj&quot; -Zg9 -O -ASMLIST -Q -MPLAB -<b>16F877A</b>

&quot;c:\program files\HT-PICC\BIN\PICC.EXE&quot; -C -E&quot;UART.cce&quot; &quot;UART.c&quot; -O&quot;UART.obj&quot; -Zg9 -O -ASMLIST -Q -MPLAB -<b>16F877A</b>

&quot;c:\program files\HT-PICC\BIN\PICC.EXE&quot; -E&quot;UART.lde&quot; &quot;main.obj&quot; &quot;UART.obj&quot; -M&quot;UART.map&quot; -O&quot;UART.cof&quot; -O&quot;UART.hex&quot; -Q -MPLAB -<b>16F877A</b></pre>
</blockquote>
<p>Như vậy 16F877A l&#224; t&#234;n của chip m&#224; m&#236;nh muốn dịch. D&#242;ng đầu ti&#234;n ch&#237;nh l&#224; dịch ra file <b>main.obj,</b> d&#242;ng 2 dịch ra file <b>uart.obj,</b> d&#242;ng 3 dịch ra file <b>UART.hex</b> l&#224; xong.</p>
<p>Vậy c&#243; bao nhi&#234;u file .c th&#236; c&#243; bấy nhi&#234;u lệnh như d&#242;ng đầu ti&#234;n. C&#242;n d&#242;ng cuối c&#249;ng l&#224; kế hợp để tạo ra file .Hex.</p>
<p>Chi tiết mời bạn xem manual của c&#225;c tr&#236;nh dịch phần <b>command line </b>tại trang <a href="http://htsoft.com">http://htsoft.com</a>.</p>
<p>Tiếp theo, bạn mở Visual Studio 2005 l&#234;n nh&#233;. V&#224; l&#224;m theo hướng dẫn.</p>
<p align="center"><a href="http://i36.photobucket.com/albums/e46/ngohaibac/PIC16F877A/BAC_0051.gif" rel="shadowbox[sbpost-138];player=img;" target="_blank"><img border="0" alt="" src="http://i36.photobucket.com/albums/e46/ngohaibac/PIC16F877A/BAC_0051.gif" /></a></p>
<p align="center"><b><i></i></p>
<p align="center">H&#236;nh 1: V&#224;o File -&gt; New Project</p>
<p align="center">
<p>  </b></p>
<p align="center"><a href="http://i36.photobucket.com/albums/e46/ngohaibac/PIC16F877A/BAC_0052.gif" rel="shadowbox[sbpost-138];player=img;" target="_blank"><img border="0" alt="" src="http://i36.photobucket.com/albums/e46/ngohaibac/PIC16F877A/BAC_0052.gif" width="526" height="383" /></a></p>
<p><b><i></i></p>
<p align="center">H&#236;nh 2: Chọn MakeFile Project v&#224; nơi lưu file</p>
</p>
<p>  </b></p>
<p><a href="http://i36.photobucket.com/albums/e46/ngohaibac/PIC16F877A/BAC_0054.gif" rel="shadowbox[sbpost-138];player=img;" target="_blank"><img border="0" alt="" src="http://i36.photobucket.com/albums/e46/ngohaibac/PIC16F877A/BAC_0053.gif" width="542" height="388" /></a></p>
<p><b><i></i></p>
<p align="center">H&#236;nh 3: Make File Application Wizard</p>
<p>  </b></p>
<p>Khi đ&#243; bạn quan t&#226;m đến 3 &#244; trống: </p>
<ul>
<li>Build command line </li>
<li>Clear command </li>
<li>Rebuild command line </li>
<li>Include search path </li>
</ul>
<p><b><br />
    <br />Build command line:</b> sẽ thực hiện c&#225;c lệnh trong &#244; trống n&#224;y khi nhấn v&#224;o Buidl -&gt; Build.</p>
<p>Bạn điền v&#224;o nội dung như tr&#234;n:</p>
<blockquote>
<pre>&quot;c:\program files\HT-PICC\BIN\PICC.EXE&quot; -C -E&quot;main.cce&quot; &quot;main.c&quot; -O&quot;main.obj&quot; -Zg9 -O -ASMLIST -Q -MPLAB -16F877A

&quot;c:\program files\HT-PICC\BIN\PICC.EXE&quot; -C -E&quot;UART.cce&quot; &quot;UART.c&quot; -O&quot;UART.obj&quot; -Zg9 -O -ASMLIST -Q -MPLAB -16F877A

&quot;c:\program files\HT-PICC\BIN\PICC.EXE&quot; -E&quot;UART.lde&quot; &quot;main.obj&quot; &quot;UART.obj&quot; -M&quot;UART.map&quot; -O&quot;UART.cof&quot; -O&quot;UART.hex&quot; -Q -MPLAB -16F877A</pre>
</blockquote>
<p><b>Rebuild command line</b> th&#236; tương tự như thế .</p>
<p><b>Include search path</b> l&#224; t&#234;n đường dẫn đến thư mục <b>Include </b>của tr&#236;nh bi&#234;n dịch HTPIC. Với m&#225;y m&#236;nh l&#224;: <b>C:\Program Files\HT-PICC\include</b></p>
<p>Sau đ&#243; c&#225;c bạn th&#234;m c&#225;c file v&#224;o Project v&#224; dịch b&#236;nh thường như l&#224;m với MPLAB.<br />
  <br />Sau khi đ&#227; tạo Project bạn muốn thay đổi lại command th&#236; l&#224;m như sau:</p>
<p><a href="http://i36.photobucket.com/albums/e46/ngohaibac/PIC16F877A/BAC_0054.gif" rel="shadowbox[sbpost-138];player=img;" target="_blank"><img border="0" alt="" src="http://i36.photobucket.com/albums/e46/ngohaibac/PIC16F877A/BAC_0054.gif" /></a></p>
<p>
  <br /><a href="http://i36.photobucket.com/albums/e46/ngohaibac/PIC16F877A/BAC_0055.gif" rel="shadowbox[sbpost-138];player=img;" target="_blank"><img border="0" alt="" src="http://i36.photobucket.com/albums/e46/ngohaibac/PIC16F877A/BAC_0055.gif" width="537" height="373" /></a></p>
<p>
  <br /><a href="http://i36.photobucket.com/albums/e46/ngohaibac/PIC16F877A/BAC_0056.gif" rel="shadowbox[sbpost-138];player=img;" target="_blank"><img border="0" alt="" src="http://i36.photobucket.com/albums/e46/ngohaibac/PIC16F877A/BAC_0056.gif" /></a></p>
<p>Như vậy, quan trọng nhất của việc d&#249;ng Visual C++ l&#224; c&#225;c bạn phải biết được nội dung của<b> command line</b> để bi&#234;n dịch nh&#233;.</p>
<p>Do đ&#243;, b&#226;y giờ c&#243; lẽ ch&#250;ng ta chỉ thảo luận về c&#225;i n&#224;y nhỉ <img title="Big Grin" border="0" alt="" src="http://www.picvietnam.com/forum/images/smilies/biggrin.gif" />.</p>
<p>Bạn dơnload manual tại đ&#226;y: <a href="http://htsoft.com/downloads/manuals.php">http://htsoft.com/downloads/manuals.php</a></p>
<p><font color="#0000ff" size="4">C18</font></p>
<p>C18 mình cài vào thư mục: C:\Program Files\Microchip\MPLAB C18\</p>
<p>Với C18 bạn dùng <b>build command line</b> sau:</p>
<blockquote>
<pre>&quot;C:\Program Files\Microchip\MPLAB C18\bin\mcc18.exe&quot; -p=18F2620 &quot;<b>main.c</b>&quot; -fo=&quot;<b>main.o</b>&quot; -w3 -Oa -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-</pre>
</blockquote>
<p>Đ&#234;̉ bi&#234;n dịch các file .c mà chúng ta code. Lặp lại dòng này chỉ thay main.c bằng t&#234;n các file khác th&#244;i.</p>
<blockquote>
<pre>&quot;C:\Program Files\Microchip\MPLAB C18\bin\mplink.exe&quot; /l&quot;C:\Program Files\Microchip\MPLAB C18\lib&quot; &quot;C:\Program Files\Microchip\MPLAB C18\lkr\<b>18f2620.lkr</b>&quot; &quot;main.o&quot; /m&quot;IO_C18.map&quot; /w /o&quot;<b>IO_C18.cof</b>&quot;</pre>
</blockquote>
<p>Còn đ&#226;y là l&#234;̣nh cu&#244;́i cùng. <b>Rebuild command line</b> cũng gi&#244;́ng như tr&#234;n.</p>
<p>Còn search path thì th&#234;m vào các dòng :</p>
<blockquote>
<pre>C:\Program Files\Microchip\MPLAB C18\h
C:\Program Files\Microchip\MPLAB C18\lib</pre>
</blockquote>
<p>Ch&#250;c c&#225;c bạn th&#224;nh c&#244;ng.</p>
<p><font color="#0000ff" size="4">Tham khảo</font></p>
<p>ngohaibac,<a title="" href="http://www.picvietnam.com/forum//showthread.php?t=1308" target="_blank"> Quản lý và build Project bằng Visual C++.Net</a> , <a title="" href="http://www.picvietnam.com">www.picvietnam.com</a>, 2007</p>
<img src="http://www.ngohaibac.net/?ak_action=api_record_view&id=138&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.ngohaibac.net/beginning-visual-c-2005-c%e1%bb%a7a-ivor-horton/' rel='bookmark' title='Beginning Visual C++ 2005 của Ivor Horton'>Beginning Visual C++ 2005 của Ivor Horton</a></li>
<li><a href='http://www.ngohaibac.net/thu-vien-giao-tiep-rs232-cho-pic18-bang-htpic18/' rel='bookmark' title='Thư viện giao tiếp RS232 cho PIC18 bằng HTPIC18'>Thư viện giao tiếp RS232 cho PIC18 bằng HTPIC18</a></li>
<li><a href='http://www.ngohaibac.net/huong-dan-lap-trinh-giao-tiep-rs232-tren-pc-bang-visual-c-60/' rel='bookmark' title='Hướng dẫn lập trình giao tiếp RS232 trên PC bằng Visual C++ 6.0'>Hướng dẫn lập trình giao tiếp RS232 trên PC bằng Visual C++ 6.0</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ngohaibac.net/quan-ly-va-build-project-voi-trinh-dich-htpic-bang-visual-cnet-2005/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

