Professional Documents
Culture Documents
Ta chn in tr 220 .
CHNG 3: VIT CHNG TRNH
I. Chng trnh cho PIC 18F4550:
Ta dng phn mm Mikro C lp trnh cho PIC.
u tin ta to 1 Project mi: File/New/Project
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 23
Step 1: ta chn ng dn lu project, v chn loi vi iu khin s dng, km theo l
khai bo tn s thch anh m mnh s dng, y ta dng PIC 18F4550 v tn s
thch anh l 20MHz.
Step 2: b qua v khng dng n.
Step 3: chn th vin cn dng, ta chn Include None (Advanced)
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 24
Step 4: ta tick vo vung v nhn Finish.
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 25
Lc ny 1 ca s Edit Project s hin ra, ta chn cc thng s nh trong hnh:
y ta c 2 cch chn tn s hot ng cho CPU, hnh v ta thy c 2 Option
l u vo xung nhp cho CPU. Vi Option 1 l: HSPLL v Option 2 l: XT, HS.
- Ta chn s dng HSPLL, tc l Option 1. Thch anh tht l 20MHz, qua b chia
PLLDIV c 4MHz v a qua b 96MHz PLL, u ra nhn c tn s
96MHz, ci ny s c chia 2 (nh hnh v) 96/2=48 MHz, vy l USB hot ng
vi xung nhp l 48MHz.
- Khi khai bo s dng HSPLL th XT,HS b v hiu, chnh v th chng ta s ly xung
nhp t b HSPLL cp cho CPU, nh hnh trn xung nhp s c a qua b chia
CPUDIV nh nht l 2, tc l 96/2=48MHz. iu ny c ngha l CPU s hot ng
vi xung nhp cao nht 48MHz, mc d u vo thch anh ch c 20MHz. V lc ny
iu quan trng l chng ta phi sa li gi tr thch anh t cho Project l 20MHz
thnh 48MHz mc d thch anh tht bn ngoi l 20MHz.
Ngoi ra chng ta cn phi Enable cho pin 18 ly in p 3.3V ti chn ny.
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 26
Tip theo ta tin hnh vit code.
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 27
Code:
sbit LCD_RS at RE0_bit;
sbit LCD_EN at RE2_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 28
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISE0_bit;
sbit LCD_EN_Direction at TRISE2_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
unsigned char readbuff[64] absolute 0x500;
unsigned char writebuff[64] absolute 0x540;
char cnt;
char kk,tam;
char i,j;
void interrupt(){
USB_Interrupt_Proc();
}
void main(void){
ADCON1 |= 0x0F;
CMCON |= 7;
TRISB = 0x00;
Lcd_Init();
HID_Enable(&readbuff,&writebuff);
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 29
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
while(1){
while(!HID_Read()) ;
for(cnt=0;cnt<64;cnt++)
writebuff[cnt]=readbuff[cnt];
if(writebuff[0]==0){
switch(writebuff[1]){
case 1: portb.b0=!portb.b0; break;
case 2: portb.b1=!portb.b1; break;
case 3: portb.b2=!portb.b2; break;
case 4: portb.b3=!portb.b3; break;
case 5: portb.b4=!portb.b4; break;
case 6: portb.b5=!portb.b5; break;
case 7: portb.b6=!portb.b6; break;
case 8: portb.b7=!portb.b7; break;
case 9: portb=0xFF; break;
case 10: portb=0x00; break;
default: break;
}}
else
{
char hang1[16];
char hang2[16];
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 30
for(i=0;i<16;i++) hang1[i]=writebuff[i+1];
for(j=16;j<32;j++) hang2[j-16]=writebuff[j+1];
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,hang1);
Lcd_Out(2,1,hang2);
}
while(!HID_Write(&writebuff,64)) ;
}}
Vy l xong phn code, ta tin hnh Desciption cho thit b.
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 31
- Lu n th mc to v Add vo Project.
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 32
Vy l xong phn Code, ta tin hnh Build (Ctrl+F9) vo np vo PIC.
II. Giao din C# trn my tnh:
Do HID c sn Driver trn my v t ci t, chng ta s khng cn quan tm n
Driver.
u tin chng ta to 1 project mi v Add th vin lin kt ng HIDLib.dll .
Trong ca s Solution Explorer, nhn chut phi vo References, chn Add
Reference
Sau ta tin hnh thit k giao din v vit Code:
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 33
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HIDLib;
namespace USBHID
{
public partial class Form1 : Form
{
HIDDevice dev = new HIDDevice();
byte[] data = new byte[64];
int i;
public Form1()
{
InitializeComponent();
dev.vid = 0x04D8;
dev.pid = 0x0003;
dev.in_size = 64;
dev.out_size = 64;
dev.Initialize();
}
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 34
protected override void WndProc(ref Message m)
{
dev.DeviceChange(ref m);
base.WndProc(ref m);
}
private void btn_onall_Click_1(object sender, EventArgs e)
{
if (dev.AttachedState)
{
data[0] = 0;
data[1]=9;
for (i = 2; i < 64; i++)
data[i] = 0;
if (!dev.Transmit(data)) MessageBox.Show("Error");
}
else MessageBox.Show("Disconnected!");
}
private void btn_offall_Click_1(object sender, EventArgs e)
{
if (dev.AttachedState)
{
data[0] = 0;
data[1] = 10;
for (i = 2; i < 64; i++)
data[i] = 0;
if (!dev.Transmit(data)) MessageBox.Show("Error");
}
else MessageBox.Show("Disconnected!");
}
private void btn1_Click(object sender, EventArgs e)
{
if (dev.AttachedState)
{
data[0] = 0;
data[1] = 1;
for (i = 2; i < 64; i++)
data[i] = 0;
if (!dev.Transmit(data)) MessageBox.Show("Error");
}
else MessageBox.Show("Disconnected!");
}
private void btn2_Click(object sender, EventArgs e)
{
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 35
if (dev.AttachedState)
{
data[0] = 0;
data[1] = 2;
for (i = 2; i < 64; i++)
data[i] = 0;
if (!dev.Transmit(data)) MessageBox.Show("Error");
}
else MessageBox.Show("Disconnected!");
}
private void btn3_Click(object sender, EventArgs e)
{
if (dev.AttachedState)
{
data[0] = 0;
data[1] = 3;
for (i = 2; i < 64; i++)
data[i] = 0;
if (!dev.Transmit(data)) MessageBox.Show("Error");
}
else MessageBox.Show("Disconnected!");
}
private void btn4_Click(object sender, EventArgs e)
{
if (dev.AttachedState)
{
data[0] = 0;
data[1] = 4;
for (i = 2; i < 64; i++)
data[i] = 0;
if (!dev.Transmit(data)) MessageBox.Show("Error");
}
else MessageBox.Show("Disconnected!");
}
private void btn_send_Click(object sender, EventArgs e)
{
if (dev.AttachedState)
{
data[0] = 1;
string chuoi;
chuoi = this.txt.Text;
if (chuoi.Length > 32) MessageBox.Show("Vui long nhap it hon 32 ky tu
!");
else for (i = 1; i <= chuoi.Length; i++)
{
data[i] = Convert.ToByte(chuoi[i-1]);
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 36
}
if (!dev.Transmit(data)) MessageBox.Show("Error");
}
else MessageBox.Show("Disconnected!");
}
private void btn5_Click(object sender, EventArgs e)
{
if (dev.AttachedState)
{
data[0] = 0;
data[1] = 5;
for (i = 2; i < 64; i++)
data[i] = 0;
if (!dev.Transmit(data)) MessageBox.Show("Error");
}
else MessageBox.Show("Disconnected!");
}
private void btn6_Click(object sender, EventArgs e)
{
if (dev.AttachedState)
{
data[0] = 0;
data[1] = 6;
for (i = 2; i < 64; i++)
data[i] = 0;
if (!dev.Transmit(data)) MessageBox.Show("Error");
}
else MessageBox.Show("Disconnected!");
}
private void btn7_Click(object sender, EventArgs e)
{
if (dev.AttachedState)
{
data[0] = 0;
data[1] = 7;
for (i = 2; i < 64; i++)
data[i] = 0;
if (!dev.Transmit(data)) MessageBox.Show("Error");
}
else MessageBox.Show("Disconnected!");
}
private void btn8_Click(object sender, EventArgs e)
{
if (dev.AttachedState)
{
data[0] = 0;
SVTH: L TN LC GVHD: NGUYN DUY THO
MCH GIAO TIP MY TNH QUA CNG USB TRANG 37
data[1] = 8;
for (i = 2; i < 64; i++)
data[i] = 0;
if (!dev.Transmit(data)) MessageBox.Show("Error");
}
else MessageBox.Show("Disconnected!");
}
}
}
TI LIU THAM KHO
1. https://sites.google.com/site/lhpscienceclub/
2. http://www.picvietnam.com/forum/forumdisplay.php?f=45
3. http://www.microchip.com/
4. USB in nutshell - Craig Peacock