PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 08-07-2014, 12:18 AM   #1
pitpro09
Nhập môn đệ tử
 
Tham gia ngày: Jun 2014
Bài gửi: 3
:
PIC16F877A và LM 35 nhờ giúp đở

Hiện tại em đang làm cái mạch điều khiển tắt mở thiết bị bằng VB6 dựa vào nhiệt độ đo được. Mọi thứ chạy ok chỉ tội PIC không đo đúng nhiệt độ, nó chạy tùm lum hết. Moih người giúp e chỉ cách viết hàm nhiệt độ cho PIC16F877A bằng CSS và cách truyền nó lên VB. Đồng thời trên VB chỉ e cách nhận và hiển thị giá trị nhiệt độ đúng với nhé. Xin chân thanh cảm ơn. E đã cày cả tuần, tìm cả đống công thức bỏ vào nó cũng sai tè le.
Sau đây là code C của e mọi người chỉ e chổ sai với nhé:
//-----------------------------------------------//
//-----------------------------------------------//
#include <16f877a.h>
#include <DEF_877A.h>
#DEVICE *=16 ADC=10
#use delay(clock=20000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
#bit b0 = portb.0 //NUT NHAN TB01
#bit b1 = portb.1 //NUT NHAN TB02
#bit b2 = portb.2 //NUT NHAN TB03
#bit b3 = portb.3 //NUT NHAN TB04
#bit b4 = portb.4 //NUT NHAN TB05
#bit b5 = portb.5 //NUT NHAN OFF ALL
#bit b6 = portb.6 //DU TRU
#bit b7 = portb.7 //DU TRU
#bit d0 = portd.0 //DIEU KHIEN TB01
#bit d1 = portd.1 //DIEU KHIEN TB02
#bit d2 = portd.2 //DIEU KHIEN TB03
#bit d3 = portd.3 //DIEU KHIEN TB04
#bit d4 = portd.4 //DIEU KHIEN TB05 CAP 1
#bit d5 = portd.5 //DIEU KHIEN TB05 CAP 2
#bit d6 = portd.6 //DU TRU
#bit d7 = portd.7 //DU TRU
#bit e0 = porte.0 //LED BAO NHAN DU LIEU TU MAY TINH
#bit e1 = porte.1 //LED BAO GUI DU LIEU LEN MAY TINH
#bit e2 = porte.2 //LED CANH BAO NHIET DO
char i;
unsigned dem, value;
void dieukhien();
void capnhat();
void baodong();
void receive();
void main()
{

//**********************************
// KHOI TAO

//**********************************
set_tris_d(0);
output_d(0xff);
set_tris_b(255);
set_tris_e(0b000);
output_e(0b111);
enable_interrupts(int_rda);
enable_interrupts(global);
setup_adc(adc_clock_internal);
setup_adc_ports(AN0);
set_adc_channel(1);

//**********************************
// LED dich trai - phai

//**********************************
if (PortE == 0b111) //LED PortE deu tat
{
delay_ms(300);
e0 = 0;
delay_ms(300);
e0 = 1; e1 = 0;
delay_ms(300);
e1 = 1; e2 = 0;
delay_ms(300);
e2 = 1;
delay_ms(300);
e2 = 0;
delay_ms(300);
e2 = 1; e1 = 0;
delay_ms(300);
e1 = 1; e0 = 0;
delay_ms(300);
e0 = 1;
delay_ms(300);
}

//**********************************
// Nut Nhan Dieu Khien

//**********************************
while(true)
{
if (b0 == 0) //Nut nhan tb 1
{
delay_ms(50);
if (b0 == 0)
{
while (b0 == 0)
{}
d0 = !d0;
}
}
if (b1 == 0) //Nut nhan tb 2
{
delay_ms(50);
if (b1 == 0)
{
while (b1 == 0)
{}
d1 = !d1;
}
}
if (b2 == 0) //Nut nhan tb 3
{
delay_ms(50);
if (b2 == 0);
{
while (b2 == 0)
{}
d2 = !d2;
}
}
if (b3 == 0) //Nut nhan tb 4
{
delay_ms(50);
if (b3 == 0);
{
while (b3 == 0)
{}
d3 = !d3;
}
}
if (b4 == 0) //Nut nhan tb 5
{
delay_ms(50);
if (b4 == 0)
{
while (b4 == 0)
{}
if (d4 == d5 == 1)
{
d4 = 0;
d5 = 1;
}
else if ((d4 == 0) && (d5 == 1))
{
d4 = 1;
d5 = 0;
}
else if ((d4 == 1) && (d5 == 0))
{
d4 = 1;
d5 = 1;
}
}
}
if (b5 == 0) //Nut nhan tat tat ca
{
delay_ms(50);
if (b5 == 0)
{
while (b5 == 0)
{}
portd = (255);
e2 = 1; //LED 3
}
}
}
}

//**********************************
// Dieu Khien Thiet Bi

//**********************************
void dieukhien()
{
switch (i)
{
case 'n':
capnhat();
break;
case 'r':
baodong();
break;
case '1':
d0 = 0; //tb 1 bat
break;
case '2':
d0 = 1; //tb1 tat
break;
case '3':
d1 = 0; //tb 2 bat
break;
case '4':
d1 = 1; // tb2 tat
break;
case '5':
d2 = 0; //tb 3 bat
break;
case '6':
d2 = 1; //tb 3 tat
break;
case '7':
d3 = 0; //tb 4 bat
break;
case '8':
d3 = 1; //tb 4 tat
break;
case '9':
d4 = 0; // tb 5 bat cap 1
d5 = 1;
break;
case 'a':
d5 = 0;
d4 = 1; // tb 5 bat cap 2
break;
case 'b':
d4 = 1; //tb 5 tat
d5 = 1;
break;
}
}

//**********************************
// Cap Nhat Trang Thai

//**********************************
void capnhat()
{
e1 = 0; //Bat Led 2
if (d0 == 1) //Kiem tra tb 1
{ printf("c");}
else
{printf("d");}
delay_ms(5);
if (d1 == 1) //Kiem tra tb 2
{ printf("e");}
else
{printf("f");}
delay_ms(5);
if (d2 == 1) //Kiem tra tb 3
{ printf("g");}
else
{printf("h");}
delay_ms(5);
if (d3 == 1) //Kiem tra tb 4
{ printf("i");}
else
{printf("j");}
delay_ms(5);
if (d4 == d5 == 1) //Kiem tra tb 5
{ printf("k");}
else if ((d4 == 0) && (d5 == 1))
{printf("l");}
else if ((d4 == 1) && (d5 == 0))
{printf("m");}
delay_ms(5);
//**********************************
// Gui Gia Tri Nhiet Do

//**********************************
dem = read_adc();
value=dem/2.048;
printf("%u",value);
delay_ms(100);
//**********************************
// Gui Gia Tri Bao Ket Noi

//**********************************
printf("o");
delay_ms(5);
e1 = 1; //Tat LED 2
}

//**********************************
// Bao Dong

//**********************************
void baodong()
{
e2 = 0; //Bat LED 3
}

//**********************************
// Ngat Rs232

//**********************************
#int_RDA
void receive()
{
e0 = 0; //Bat LED 1
i=getc();
dieukhien();
e0 = 1; //Tat LED 1
}
pitpro09 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2014, 08:25 PM   #2
pitpro09
Nhập môn đệ tử
 
Tham gia ngày: Jun 2014
Bài gửi: 3
:
không ai chỉ e với huuuu
pitpro09 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-07-2014, 10:04 PM   #3
hangocminh1989
Đệ tử 6 túi
 
Tham gia ngày: Apr 2009
Bài gửi: 132
:
code của em nhìn hung nhỉ muốn giúp thế nào nữa đây bạn? bạn đã thử phần help trên ccs chưa? mình làm cũng lâu rồi nên bây giờ cũng không nhớ nhiều nữa. bây giờ mình hướng dẫn lại các bước chi tiết cho bạn làm thế này nhé :
1: viết 1 chương trình chỉ gửi dữ liệu từ pic lên PC thôi => đảm bảo cho pic và pc có thể nhận ra nhau và pc nhận được data của pic. => viết vb để hiển thị => done
2: viết 1 chương trình ngắt rs232 (có thể là 1 nút bấm, bấm vào đó là nhảy vào ngắt, trong ngắt chỉ truyền 1 số nào đó lên pc và hiển thị ra vb) => đảm bảo ngắt hoạt động tốt => done
3: viết 1 chương trình đo nhiệt độ hiển thị lên pc bằng ngắt rs232 (có thể sự dụng đồng thời 1 led hiển thị để kiểm tra coi có đọc được nhiệt độ hay không) =>đảm bảo nhiệt độ được hiển thị đúng lên pc => done
4: bây giờ mới là bước viết các chương trình điều khiển các thiết bị khác => done.
trong thời gian làm việc, bạn chịu khó tìm thêm tài liệu về rs232, ngắt rs232, read adc để đo nhiệt độ trong diễn đàn. tất cả những thứ này đã quá cũ nhé bạn, nên bạn hỏi ở đây không ai trả lời đâu, vì câu trả lời có ở khắp nơi rồi. việc của bạn chỉ gói gọn trong 1 từ : "search" thôi.
chúc bạn vui,
thân
hangocminh1989 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 07:03 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam