pitpro09
08-07-2014, 12:18 AM
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
}
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
}