Xin chào các bạn và anh chị.
E đang làm đồ án về mạch đo nhiệt độ dùng Pic16f877A+DS18b20 giao tiếp máy tính qua RS232.
về phần mạch nguyên lý em đã vẽ xong nhưng gặp khó khăn khi phải lập trình cho pic.
dưới đây là code của em mong mọi người giúp đỡ cho em với.
E xin cảm ơn!
code:
#include <16F887.h>// khai bao thu vien su dung Pic16F877A
#device adc=10// khai bao dung che do ADC 16 bit
#FUSES HS// su dung bo dao dong toc do cao
#use delay (clock=8000000)//su dung bo giao dong thach anh 8Mhz
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=9)// giao tiep RS232
#include <1wire.c> //giao tiep giua VĐK và vi mach DS18B20 theo chuan 1 day.
#include <ds1820.c> // khai bao thu vien su dung vi mach nhiet do DS18B20
float NHIETDO;//khai bao cac bien theo kieu so thuc
float NHIETDONGUYEN, giantiep;
#INT_RDA// che do ngat truyen thong RDA
void Receive_isr()
{
getch();// bat tin hieu nget tu may tinh
giantiep = 100*NHIETDO ;
NHIETDONGUYEN=(INT16)giantiep;//khai bao bien theo kieu so nguyen 16 bit.
PUTC((NHIETDONGUYEN/1000)+48);// day gia tri phan ngàn len may tinh
PUTC(((int16)NHIETDONGUYEN%1000/100)+48);// day gia tri phan tram len may tinh
PUTC(46);//ki tu dau “.” Trong ma ASCII
PUTC(((int16)NHIETDONGUYEN%1000%100/10)+48); );// day gia tri phan thap phan len may tinh
PUTC(((int16)NHIETDONGUYEN%1000%100%10)+48) ; // day gia tri phan thap phan len may tinh
}
void main() //chuong trinh chinh
{
enable_interrupts(int_rda);// cho phep ngat RDA cuc bo
enable_interrupts(GLOBAL);// cho phep ngat toan cuc
while (TRUE) //vong lap vo han
{
NHIETDO = ds1820_read(); // doc nhiet do tu vi mach DS18B20
NHIETDONGUYEN = (INT8)NHIETDO ;//gan gia tri nhiet do doc duoc vao bien “NHIETDONGUYEN”
}
}
E đang làm đồ án về mạch đo nhiệt độ dùng Pic16f877A+DS18b20 giao tiếp máy tính qua RS232.
về phần mạch nguyên lý em đã vẽ xong nhưng gặp khó khăn khi phải lập trình cho pic.
dưới đây là code của em mong mọi người giúp đỡ cho em với.
E xin cảm ơn!
code:
#include <16F887.h>// khai bao thu vien su dung Pic16F877A
#device adc=10// khai bao dung che do ADC 16 bit
#FUSES HS// su dung bo dao dong toc do cao
#use delay (clock=8000000)//su dung bo giao dong thach anh 8Mhz
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=9)// giao tiep RS232
#include <1wire.c> //giao tiep giua VĐK và vi mach DS18B20 theo chuan 1 day.
#include <ds1820.c> // khai bao thu vien su dung vi mach nhiet do DS18B20
float NHIETDO;//khai bao cac bien theo kieu so thuc
float NHIETDONGUYEN, giantiep;
#INT_RDA// che do ngat truyen thong RDA
void Receive_isr()
{
getch();// bat tin hieu nget tu may tinh
giantiep = 100*NHIETDO ;
NHIETDONGUYEN=(INT16)giantiep;//khai bao bien theo kieu so nguyen 16 bit.
PUTC((NHIETDONGUYEN/1000)+48);// day gia tri phan ngàn len may tinh
PUTC(((int16)NHIETDONGUYEN%1000/100)+48);// day gia tri phan tram len may tinh
PUTC(46);//ki tu dau “.” Trong ma ASCII
PUTC(((int16)NHIETDONGUYEN%1000%100/10)+48); );// day gia tri phan thap phan len may tinh
PUTC(((int16)NHIETDONGUYEN%1000%100%10)+48) ; // day gia tri phan thap phan len may tinh
}
void main() //chuong trinh chinh
{
enable_interrupts(int_rda);// cho phep ngat RDA cuc bo
enable_interrupts(GLOBAL);// cho phep ngat toan cuc
while (TRUE) //vong lap vo han
{
NHIETDO = ds1820_read(); // doc nhiet do tu vi mach DS18B20
NHIETDONGUYEN = (INT8)NHIETDO ;//gan gia tri nhiet do doc duoc vao bien “NHIETDONGUYEN”
}
}
Comment