PDA

View Full Version : USB kho qua!


sontt
20-04-2007, 04:05 PM
Minh dang thu lam module USB trong pic8F4550 ma mai khong lam duoc. Da thu dung firmware cua microchip va mot so nguon khac nhung van chua thanh cong.Ma cai schematic toi thay mot so so do tren mang co khac nhau doi chut ve tu dien va tro . Bac nao da thanh cong voi module nay co the giup do minh duoc khong: schematic, code,chuong trinh giao tiep voi PC, driver. Minh vo cung cam on.

tranhuyky
20-04-2007, 04:56 PM
vào phần Giao tiếp USB, CAN, I2C, SPI, USART xem có ví dụ đó
http://www.picvietnam.com/forum/showthread.php?p=7549#post7549

doianhve
20-06-2007, 01:41 PM
Các bạn ạ.Tôi khóc dở mếu dở với trang Web này.Tôi hỳ hục đánh hướng dẫn lập trình USB mất 1h.Định gửi thì nó báo lỗi mạng.Thế là mất sạch thế mới đau.

doianhve
20-06-2007, 01:45 PM
Nhưng ko sao.Tôi tuy mất hứng nhưng cũng sẽ gửi đến bạn các File mà có hướng dẫn tuy không cụ thể lắm nhưng bảo đảm nạp vào là chạy.Vì tôi chạy thử rùi mà.Má up thế quái nào nhỉ.Phần mềm để test là Windriver của http://jungo.com(Tôi sẽ up cho bạn tài liệu hướng dẫn lập trình bằng tiếng việt).Up thế nào đây.

doianhve
20-06-2007, 01:50 PM
Thôi đành làm cách cổ điển vậy.Nhớ tạo một Foder sau: D:/Pic_USB
File chính:Truyền một Xung Sin lên PC theo chuẩn Bulk endpoint81
----------------------tên là Main.C-------------------------------
////////////////////////////////////////////////////////////////////////////////
// Chu y: //
// *) De tien trong viec lap trinh va ve do thi tren PC chung ta can: //
// truoc khi chuan hoa mau can chon tan so cho thiet bi //
// bang cach gui len mot thong tin mac dinh Vd gui len chu "Tan So": //
// sau do la gui tiep 4 byte chon tan so cho thiet bi //
// *) Truyen bulk thi kich thuoc toi da chi 64byte(Full_speed) //
// 512(hight_Speed) nen ta chi co the truyen toi da //
// la 64byte=chi so mang //
// *) Toc do truyen toi da dat duoc la:1.216Mbytes/s
////////////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CP UDIV1,VREGEN
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#DEFINE USB_HID_DEVICE FALSE
// Khai bao che do cho cac pipe line
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //Chon che do Bulk cho USB EndIn 0x81
#define USB_EP2_TX_ENABLE USB_ENABLE_BULK //Chon che do Bulk cho USB EndIn 0x82
#define USB_EP3_TX_ENABLE USB_ENABLE_BULK //Chon che do Bulk cho USB EndIn 0x83
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //Endpoint Out01
//Kich thuoc toi da cho bo dem truyen=64Bytes
#define USB_EP1_TX_SIZE 64
#define USB_EP2_TX_SIZE 64
#define USB_EP3_TX_SIZE 64
#define USB_EP1_RX_SIZE 8 //Kich thuoc nhan toi da=8Bytes
/////////////////////////////////////////////////////////////////////////////
// D+----------------D+ //
// D-----------------D- //
// 100nF //
// Vdd--------||------Vss //
/////////////////////////////////////////////////////////////////////////////
//------->>>........------->>>........Phai thay doi duong dan truoc khi Compiler......------->>>........
#include <D:\Pic_USB\pic18_usb.h>
#include <D:\Pic_USB\Bulk.h> //Khai bao cac thong tin va dinh dang cho USB
#include <D:\Pic_USB\usb.c> //Su dung cac thu tuc va ham de truyen USB
#define SINE_TABLE_SIZE 256
const char sine_table[SINE_TABLE_SIZE]={
127, 130, 133, 136, 139, 142, 145, 148, 151, 154, 157, 160, 163, 166, 169,
172, 175, 178, 181, 184, 186, 189, 192, 195, 197, 200, 202, 205, 207, 210,
212, 214, 216, 219, 221, 223, 225, 227, 229, 230, 232, 234, 236, 237, 239,
240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 250, 251, 252, 252, 253,
253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 252, 252, 251, 250, 250,
249, 248, 247, 246, 245, 244, 242, 241, 240, 238, 237, 235, 234, 232, 230,
228, 226, 224, 222, 220, 218, 216, 214, 211, 209, 207, 204, 202, 199, 197,
194, 191, 189, 186, 183, 180, 178, 175, 172, 169, 166, 163, 160, 157, 154,
151, 148, 145, 142, 138, 135, 132, 129, 127, 124, 121, 118, 114, 111, 108,
105, 102, 99, 96, 93, 90, 87, 84, 81, 78, 75, 73, 70, 67, 64,
62, 59, 56, 54, 51, 49, 46, 44, 42, 39, 37, 35, 33, 31, 29,
27, 25, 23, 22, 20, 18, 17, 15, 14, 12, 11, 10, 9, 8, 7,
6, 5, 4, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12,
13, 14, 16, 17, 19, 21, 22, 24, 26, 28, 30, 32, 34, 36, 38,
41, 43, 45, 48, 50, 53, 55, 58, 60, 63, 66, 69, 71, 74, 77,
80, 83, 86, 89, 92, 95, 98, 101, 104, 107, 110, 113, 116, 119, 122, 125
};
void main(void) {
int8 i;
int8 out_data[1];
///----------------------tao mot bang thong bao truoc khi gui du lieu de chon tan so Hz lay mau-------------
char Str[31]; // tao mot mang String gom co
//strcpy(str,"Nguyen Duc Hung_DL1_K47_DHBKHN."); //Chuoi String co 31 ki tu
///---------------------------------------------------------------------------------------------------------
//out_data[0]=i;
usb_init(); // Day la ham xac dinh cau hinh phan cung USB cua Pic:Che do pullup trong.Phai co neu ko la ko chay
//usb_task();
//usb_puts(1,out_data,1,50); //usb_puts(endpoint,out_data,len(out_data),Timeout); ___len(out_data)=chi so mang
// Muon dung Endpoint nao thi phai khai bao trong bulk.C
//delay_ms(5000);
//usb_puts(1,Str,31,50);
while (true)
{
i=0;
while(i<=254)
{
//delay_ms(100);
out_data[0]=1;//sine_table[i];
usb_task(); //Day la ham co tac dung luon de y den USB dang su dung trong he thong
usb_puts(1,out_data,1,50); // Ham truyen gia tri thu duoc theo mot mang
// khong gioi han.Xem cu the trong usb.h.Du lieu truyen theo mang
++i;
}
i=0;
while(i<=254)
{
//delay_ms(100);
out_data[0]=2;//sine_table[i];
usb_task(); //Day la ham co tac dung luon de y den USB dang su dung trong he thong
usb_puts(2,out_data,1,50); // Ham truyen gia tri thu duoc theo mot mang
// khong gioi han.Xem cu the trong usb.h.Du lieu truyen theo mang
++i;
}
i=0;
while(i<=254)
{
//delay_ms(100);
out_data[0]=3;//sine_table[i];
usb_task(); //Day la ham co tac dung luon de y den USB dang su dung trong he thong
usb_puts(3,out_data,1,50); // Ham truyen gia tri thu duoc theo mot mang
// khong gioi han.Xem cu the trong usb.h.Du lieu truyen theo mang
++i;
}

} // sau khi qua cau lenh While() ko the truen USb dc nua ????????????????
//Delay_ms(2000);
//usb_task();
//usb_puts(1,Str,31,50);
}

doianhve
20-06-2007, 01:52 PM
File tiếp theo để định dạng cấu hình:
---------------------ten Bulk.c-------------------
#IFNDEF __USB_DESCRIPTORS__
#DEFINE __USB_DESCRIPTORS__
#include <D:\Pic_USB\usb.h>
#DEFINE USB_TOTAL_CONFIG_LEN 46 //46 config+interface+class+endpoint

//Thong tin ve cau truc cua thiet bi
char const USB_CONFIG_DESC[] = {
//config_descriptor for config index 1
USB_DESC_CONFIG_LEN, //length of descriptor size
USB_DESC_CONFIG_TYPE, //constant CONFIGURATION (0x02)
USB_TOTAL_CONFIG_LEN,0, //size of all data returned for this config
1, //number of interfaces this device supports
0x01, //identifier for this configuration. (IF we had more than one configurations)
0x00, //index of string descriptor for this configuration
0xC0, //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 reserved and bit7=1
0x32, //maximum bus power required (maximum milliamperes/2) (0x32 = 100mA)

//interface descriptor 0 alt 0
USB_DESC_INTERFACE_LEN, //length of descriptor
USB_DESC_INTERFACE_TYPE, //constant INTERFACE (0x04)
0x00, //number defining this interface (IF we had more than one interface)
0x00, //alternate setting
4, //So Endpoint su dung trong chuong trinh(khong tinh Endpint 0 la Endpoint Control)
0xFF, //class code, FF = vendor defined
0xFF, //subclass code, FF = vendor
0xFF, //protocol code, FF = vendor
0x00, //index of string descriptor for interface

//endpoint 81
USB_DESC_ENDPOINT_LEN, //length of descriptor
USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (0x05)
0x81, //endpoint number and direction (0x81 = EP1 IN)
0x02, //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
USB_EP1_TX_SIZE,0x00, //maximum packet size supported Max=64
0x01, //thoi gan hoi vong (polling) chi dung trong Ngat
//Endpoin 82
USB_DESC_ENDPOINT_LEN, //length of descriptor
USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (0x05)
0x82, //endpoint number and direction (0x82 = EP1 IN)
0x02, //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
USB_EP2_TX_SIZE,0x00, //maximum packet size supported Max=64
0x01,
//Endpoin 83
USB_DESC_ENDPOINT_LEN, //length of descriptor
USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (0x05)
0x83, //endpoint number and direction (0x83 = EP1 IN)
0x02, //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
USB_EP3_TX_SIZE,0x00, //maximum packet size supported Max=64
0x01,
//endpoint descriptor
USB_DESC_ENDPOINT_LEN, //length of descriptor
USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (0x05)
0x01, //endpoint number and direction (0x01 = EP1 OUT)
0x02, //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
USB_EP1_RX_SIZE,0x00, //maximum packet size supported
0x01, //polling interval in ms. (for interrupt transfers ONLY)

};
#define USB_NUM_HID_INTERFACES 0

//the maximum number of interfaces seen on any config
//for example, if config 1 has 1 interface and config 2 has 2 interfaces you must define this as 2
#define USB_MAX_NUM_INTERFACES 1

//define how many interfaces there are per config. [0] is the first config, etc.
const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={1};

#if (sizeof(USB_CONFIG_DESC) != USB_TOTAL_CONFIG_LEN)
#error USB_TOTAL_CONFIG_LEN not defined correctly
#endif


//////////////////////////////////////////////////////////////////
/// //
/// Dinh dang thiet bi USB //
/// De hieu ro hon phan nay xin doc USBcomplete.Pdf kem theo //
//////////////////////////////////////////////////////////////////


char const USB_DEVICE_DESC[] ={
USB_DESC_DEVICE_LEN, //the length of this report=18.Chuan cua USB
0x01, //constant DEVICE (0x01)
0x10,0x01, //usb version in bcd
0x00, //class code (if 0, interface defines class. FF is vendor defined)
0x00, //subclass code
0x00, //protocol code
USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8).La endpoint Control
//-------------------------------------------------------------
//__vendor id va product id la ma san pham duoc host nhan ra:kich thuoc la 2 bytes
0x07,0x20, //vendor id la ma cong ty duoc dang ki tren: http:// usb.org__VD:0x07,0x20,=2007
0x04,0x01, //product id la ma san pham ___VD:0x04,0x01,=0104
//-------------------------------------------------------------
0x00,0x01, //device release number
0x01, //index of string description of manufacturer. therefore we point to string_1 array (see below)
0x02, //index of string descriptor of the product
0x00, //index of string descriptor of serial number
USB_NUM_CONFIGURATIONS //number of possible configurations
};

///////////////////////////////////////////////////////////////////////////////////////////
/// Day la dong thong bao cho Host biet hiet bi ma no tim thay.Ding dang thiet bi //
/// String 0 :Ngon ngu the dien,va chung ta phai ding nghia //
///////////////////////////////////////////////////////////////////////////////////////////
const char USB_STRING_DESC_OFFSET[]={0,4,12};

#define USB_STRING_DESC_COUNT sizeof(USB_STRING_DESC_OFFSET)

char const USB_STRING_DESC[]={
//string 0____________Ngon ngu hien thi
4, //length of string index
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
0x09,0x04, //Microsoft Defined for US-English
//string 1____________Ten thiet bi se duoc hien thi tren Host
8, //length of string index
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
'D',0,
'L',0,
'1',0,
//string 2____________noi dung thong bao tren tastbar khi cam thiet bi vao PC
42, //_____Do dai cua chuoi thong bao thiet bi.Tinh ca so 0=So_ki_tu*2+2.neu thua se co loi ki tu
USB_DESC_STRING_TYPE, //________Dung de truyen hay thong bao cho CCS biet do la String
'D',0,
'o',0,
' ',0,
'A',0,
'n',0,
' ',0,
'T',0,
'o',0,
't',0,
' ',0,
'N',0,
'g',0,
'h',0,
'i',0,
'e',0,
'p',0,
' ',0,
'K',0,
'4',0,
'7',0,
};


#ENDIF

doianhve
20-06-2007, 02:00 PM
Tôi cop từ CCS sang lên bị nhảy dòng.Các bạn phải chỉnh cận thận mới chạy được
Còn 2File usb.h và pic18_usb.h và usb.c cứ cop từ phần Driver trong CCS sang thu mực mục D:\Pic_USB là được.
Khi bạn đã dịch ra rồi thì sẽ thấy kết quả ngay
Tôi gửi cho các bạn một doạn mã code Hex.bạn thử nạp xem phần cứng có làm chuẩn không.Nếu chuẩn sẽ thây thông tin như khi bạn cắm USB vào máy ngay.
-----------------------------------Luu dạng File Hex---------------
:020000040000FA
:040000008EEF06F089
:08000800056ED8CF06F0E950A7
:10001000076EEA50086EE150096EE2500A6ED95040
:100020000B6EDA500C6EF350146EF450156EFA50DD
:10003000166EE0500D6E000100500F6E0150106EF4
:100040000250116E0350126E0450136EA0AA2CEFD2
:1000500000F0A1BAAAEF04F00F50006E1050016E2C
:100060001150026E1250036E1350046E0D50E06E6C
:100070000D8E0750E96E0850EA6E0950E16E0A5085
:10008000E26E0B50D96E0C50DA6E1450F36E1550B0
:10009000F46E1650FA6E055006C0D8FF1000F76ACD
:1000A000AE0FF66E000EF7220900F55012000401A3
:1000B0000101000000000000000000000000F76ADD
:1000C000CE0FF66E000EF7220900F5501200040163
:1000D00000000000000000000000000000000DAE65
:1000E00003D0F2CF0EF0F29EF76A000FF66E010E0B
:1000F000F7220900F5500DAE02D00EBEF28E1200AE
:100100000840404000000000000000000000000027
:10011000F76A200FF66E010EF7220900F550120063
:1001200008080000000000000000000000000000BF
:10013000F76A400FF66E010EF7220900F550120023
:1001400009022E00010100C0320904000004FFFF73
:10015000FF000705810240000107058202400001FF
:100160000705830240000107050102080001F76A44
:100170007E0FF66E010EF7220900F5501200010005
:10018000F76A900FF66E010EF7220900F550120083
:100190001201100100000008072004010001010203
:1001A0000001F76AB20FF66E010EF7220900F55052
:1001B000120000040C00F76AC60FF66E010EF7225B
:1001C0000900F550120004030904080344004C0020
:1001D00031002A0344006F00200041006E0020001F
:1001E00054006F00740020004E0067006800690032
:1001F0006500700020004B00340037006D92699458
:100200006894B4EF04F06A6A6892BCEF04F0676B1C
:1002100067530AE1036A6751240FE96E000E032059
:10022000EA6EEF6A672BF4D71A6A010E1B6E196A21
:10023000000C010E6D6F6D510F080EE3700E6D25F1
:10024000016E0F0E036ED8B0032A01C0E9FF03C090
:10025000EAFFEF6A6D2BEFD71F6A1E6A000C080ECB
:100260000401016F050E036F026B880E006F046BB3
:10027000050E076F080E066F0001000C6A6A686AB7
:100280009F0E6B6E390E696E6E6AC1DFD2DF160E7D
:10029000706E68A602D06896FCD76D98E0DF030EFA
:1002A0001D6EC1EF04F0698468986D82C6EF04F09A
:1002B000689CCBEF04F070A002D0D1DF7090689AF8
:1002C000D0EF04F06BC020F0000C6B6BFBDF000C78
:1002D000696B235227E06951070824E31C50000A88
:1002E00005E0020A08E0010A0BE00FD0036A225081
:1002F0001FDF6A6F0AD0036A22505DDF6A6F05D084
:10030000036A22503DDF6A6F00D0222A230669511A
:10031000692B036A080FE96E050E0320EA6E6AC0B6
:10032000EFFFD7D7235204E16951080801E0196AA9
:1003300069C06BF0C7DF000C226A1C6A050103511B
:10034000010A000105E0030A08E0010A09E015D0EE
:10035000120E236E030E1C6E11D02E0E236E0ED0C5
:10036000020E1C6E036A0501025100011ADF226EA3
:10037000036A225020DF236E01D00CD00501075301
:1003800005E12350065D02E206C523F0010E196E59
:1003900000019EDFA8EF02F0685304E1040E1D6E19
:1003A00048DF8DD0050E1D6E6B6F100E6A6F010E4B
:1003B000696F69510F08D8A082D06C6B036A6951CC
:1003C0007EDE000A35E0040E6C6F6951080DF350B3
:1003D000010F016E040E036ED8B0032A01C0E9FFBD
:1003E00003C0EAFF036A695193DEEF6E6951080D9D
:1003F000F350020F016E040E036ED8B0032A01C041
:10040000E9FF03C0EAFF6BC0ECFFED526AC0EFFFEB
:10041000036A69517DDE6A27000E6B236951080D5E
:10042000F3CF01F0040E01C0E9FFEA6E880EEF6E13
:10043000036A695134DE000A28E06C836951080DB3
:10044000F350060F016E040E036ED8B0032A01C0EC
:10045000E9FF03C0EAFF6BC0ECFFED526AC0EFFF9B
:10046000036A69513CDE6A27000E6B236951080D4F
:10047000F350040F016E040E036ED8B0032A01C0BE
:10048000E9FF03C0EAFF400EEF6E6C51060802E17F
:100490000E0E6C6F036A695102DE020801E06C897E
:1004A000700E6925016E0F0E036ED8B0032A01C0CD
:1004B000E9FF03C0EAFF6CC0EFFF692B7AD7A4EF16
:1004C00002F005010151000A00010DE0010A14E0EB
:1004D000020A1BE0060A21E0030A25E00E0A24E0D6
:1004E000010A28E034D01BC008F50501096B020E93
:1004F00000016B6FE7DE2CD00501022D04D0010E48
:100500001B160001E2DE000123D00501022D04D0FC
:100510001B820001DADE1CD00001020E196E02C53A
:1005200021F0D3DE15D008D71AC008F5010E6B6F85
:10053000C9DE0ED005010251010807E302C51AF019
:1005400002C568F0000128D7C0DE000101D000D04C
:10055000B2EF03F01AC068F005010151000A000172
:1005600005E00A0A0BE0010A24E032D00501086B1D
:10057000096B020E00016B6FA5DE2BD0685318E0EB
:10058000010E685D036AF3DD016E0501045DD8A00C
:1005900002D000010DD0036A0451240FE96E000E51
:1005A0000320EA6EEFCF08F5010E00016B6F8ADEC3
:1005B00010D068530CE0036A05010451240FE96E62
:1005C000000E0320EA6E02C5EFFF00017EDE01D0BF
:1005D00000D0B2EF03F0699168BF6981689F69A19B
:1005E0000BD0036A68515BDD000A02E1000E01D006
:1005F000010E016E0BD00AD0036A685160DD000A5B
:1006000002E1000E01D0010E016E00D078EF03F080
:10061000699168BF6981689F69A110D06851080D10
:10062000F350040F016E040E036ED8B0032A01C00C
:10063000E9FF03C0EAFF880EEF6E09D06851080D8C
:10064000F3CF01F0040E01C0E9FFEA6EEF6A87EF15
:1006500003F0699168BF6981689F69A110D06851F2
:10066000080DF350040F016E040E036ED8B0032A78
:1006700001C0E9FF03C0EAFF840EEF6E0AD06851A3
:10068000080DF3CF01F0040E01C0E9FFEA6E840EFD
:10069000EF6E8CEF03F0699168BF6981689F69A173
:1006A00010D06851080DF350040F016E040E036E54
:1006B000D8B0032A01C0E9FF03C0EAFFEFCF6AF018
:1006C0000AD06851080DF3CF01F0040E01C0E9FF14
:1006D000EA6EEFCF6AF06AAF02D06AB502D0000EC0
:1006E00001D0010E016E95EF03F004C568F073D7D9
:1006F000015226E005010151010A000105E0020A4C
:1007000008E0030A0BE01BD004C568F081D7DDDDEB
:1007100017D004C568F09DD7D8DD12D00501086B4D
:10072000096B04C568F00001B6D7015204E0010E60
:100730000501086F0001020E6B6FC4DD01D000D00F
:10074000B2EF03F0196A050100517F0B000A0001A6
:1007500005E0010A04E0030A03E003D0B2D6FAD6AA
:10076000C4D700D050EF04F06851080DF3CF01F06A
:10077000040E01C0E9FFEA6EEFCF6AF0695102088A
:1007800006E16AAD02D0696B02D0010E696F695152
:10079000040812E1840E6A6F6851080DF350040FCB
:1007A000016E040E036ED8B0032A01C0E9FF03C036
:1007B000EAFF840EEF6E0FD06951030803E1800E4B
:1007C0006A6F09D0692D03D0C80E6A6F04D06953CF
:1007D00002E1880E6A6F036A010E026E6851006EB4
:1007E00005E0D89002360336002EFBD70250FF0AF0
:1007F000006EFF0E031A00501E1603501F1668519C
:10080000080DF350010F016E040E036ED8B0032AD9
:1008100001C0E9FF03C0EAFF036A685179DCEF6EAB
:100820006851080DF3CF01F0040E01C0E9FFEA6E34
:100830006AC0EFFF000C685301E111DD75EF04F0B1
:1008400069C06EFF695303E0040E1D6E02D0020EF4
:100850001D6E30EF04F01A6A196A21C069F0F0D7F2
:100860003CEF04F0685308E1192C02D031DD04D0CC
:100870001950020801E1EFD77FEF04F06C30676F89
:10088000673367331F0E67176C5232E10401005162
:100890003C0B340823E1FF0E206E046B000152D79D
:1008A000205205E1686B010E696F5EDF0BD0203CC2
:1008B00005D0686B040E696F57DF04D0686B030EB8
:1008C000696F52DF203C01D006D020C005F4C80E6D
:1008D0000401046F00016D9808D0040100513C0B25
:1008E000040804E10001686BA6D7040130D00001C0
:1008F0006C5004081AE1FF0E206E686BB3D7203CE1
:1009000001D00FD020C005F404C467F067AD04D057
:10091000880E0401046F03D0C80E0401046F03D0D5
:1009200000019DDC040113D000016CB40FD0036AF8
:10093000010E026E6751006E05E0D8900236033654
:10094000002EFBD702501E1203501F12040100019B
:10095000D5EF04F01D5201E129D0685227E068A4C8
:1009600003D069A401D04AD46DA201D01FD068A2DF
:1009700003D069A201D047D468A003D069A001D0F8
:100980007DD468A803D069A801D08DD468AC03D009
:1009900069AC01D08DD468AA03D069AA01D08BD4E8
:1009A00068A604D069A602D069D76896A19A2CEFF0
:1009B00000F0140E6F6E6C6A1D6A186AF2BE188E13
:1009C000F29E25DC18BEF28E1F6A1E6A01EF05F04A
:1009D0006D6A696A6D86010E1D6EF2EF04F06DB6E8
:1009E00001D0F6D71D2C0BD06DBA09D0686A696AA0
:1009F000A08AC00EF212110E696E020E1D6E000C5E
:100A0000D8D7EDDF1D500208FCE1A5EF06F0616BC1
:100A1000626B010E636FDA6AD96A666B590E656F95
:100A2000EA6A5D0EE96E66C0E2FF65C0E1FF63C081
:100A300064F0D890E550EE02F3506123F450622345
:100A4000642FF7D761C0DEFF62C061F0626BD8B07F
:100A5000622B652BD8B4662B632B63510508E0E14C
:100A6000000C5F50080DF350040F016E040E036E6E
:100A7000D8B0032A01C0E9FF03C0EAFFEFCF63F05B
:100A800063BF43D05F50080DF350050F016E040E95
:100A9000036ED8B0032A01C0E9FF03C0EAFF60C0BB
:100AA000EFFF5F50080DF350040F016E040E036E4C
:100AB000D8B0032A01C0E9FF03C0EAFFEFCF62F01C
:100AC0006151020806E162AD02D0616B02D0010EF5
:100AD000616F612D03D0C80E626F04D0615302E1D3
:100AE000880E626F5F50080DF350040F016E040E04
:100AF000036ED8B0032A01C0E9FF03C0EAFF62C059
:100B0000EFFF010E016E03D000D0000E016ECDEF9D
:100B100005F05750080DF350040F016E040E036EDC
:100B2000D8B0032A01C0E9FF03C0EAFFEFCF5FF0AE
:100B30005FBE36D05750080DF350060F016E040EFD
:100B4000036ED8B0032A01C0E9FF03C0EAFFECCF6F
:100B500003F0ED52EFCF5DF003C05EF05C6A5A50D7
:100B60005C5C14E258C0E9FF59C0EAFFEFCF61F0C6
:100B70005EC0EAFF5DC0E9FF61C0EFFF5D2AD8B447
:100B80005E2A582AD8B4592A5C2AE9D757C05FF0A0
:100B90005AC060F05BC061F064D7015003D000D050
:100BA000000E016E000C4C6A4D6A036A46506FECF1
:100BB00000F0506E4D504A5C64E303E149504C5CD8
:100BC00060E2586A576A566A4BC055F058C05CF0EC
:100BD00057C05BF056C05AF04BC059F0606B5F6A6B
:100BE000030E5E6EE80E5D6E12DF03C054F002C0AD
:100BF00053F001C052F000C051F04C50495C556EAA
:100C00004D504A58566E565203E15550505C03E21F
:100C100050C04FF003D04C50495C4F6E4C504724AD
:100C2000556E4D504820566E46C057F0596E55C00F
:100C300058F04FC05AF0020E5B6E6BDF01B002D06D
:100C40004E9001D04E804EB00DD00000000000004C
:100C500000000000FF0E5126D8A05226D8A053262F
:100C6000D8A054264EB008D05152D8E15252D6E105
:100C70005352D4E15452D2E150504C26000E4D2232
:100C800099D749504C5C45E14A504D5C42E1586A65
:100C9000576A566A4BC055F058C05CF057C05BF0BD
:100CA00056C05AF04BC059F0606B5F6A030E5E6E1F
:100CB000E80E5D6EACDE03C054F002C053F001C01C
:100CC00052F000C051F046C057F0596A586A5A6A4B
:100CD000020E5B6E1EDF01B002D04E9001D04E803E
:100CE0004EB00DD000000000000000000000FF0E1C
:100CF0005126D8A05226D8A05326D8A054264EB0AC
:100D000008D05152E0E15252DEE15352DCE154523C
:100D1000DAE1000E4EB0010E016E000CF86AD09EB2
:100D20000D8EEA6AE96AC150C00B0F09C16E070E49
:100D3000B46EB450A19CB896810EAF6E260EAC6E08
:100D4000900EAB6E1D6A236A5BD6256A2550FE089D
:100D500010E3010E266E43DE010E466E486A260E33
:100D6000476E4A6A010E496E320E4B6E1CDF252A11
:100D7000EDD7256A2550FE0810E3020E266E2FDE01
:100D8000020E466E486A260E476E4A6A010E496E8A
:100D9000320E4B6E08DF252AEDD7256A2550FE0856
:100DA00010E3030E266E1BDE030E466E486A260E07
:100DB000476E4A6A010E496E320E4B6EF4DE252AEA
:060DC000EDD7C3D70300CC
:020000040030CA
:0E000000240E3F1E008381000FC00FE00F4052
:00000001FF
;PIC18F4550

------------------------Hết-------------
Chúc bạn thành công. Nếu có gì thắc mắc có thể liên lạc với tôi theo: ngduchungdhbk@gmail.com