Mình đang làm bài tập lớp về rs232 truyền nhiệt độ.Nhưng mình không biết làm sao mã hóa được thông số truyền lên máy tính và từ máy tính gửi về LCD và so sánh 2 giá trị này.Mình mong các bạn giúp đỡ
Mình cảm ơn rất nhiều
đây là link mình có file mô phỏng do mình không biết add file nên các bạn thông cảm
Cần giúp - Lập trình rs232 truyền nhận thông số | Cộng đồng cơ điện tử Việt Nam | Mechatronics
Mình cảm ơn rất nhiều
// truyen nhan du lieu nhiet do bang may tinh voi vi dieu khien
#include<16f887.h>
#device ADC=10
#fuses HS,NOWDT,NOLVP,NOPROTECT,PUT
#use DELAY(CLOCK=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,RCV=PIN_C7,bi ts=8)//KHAI BAO VA DINH CAU HINH CHO UART
#define DATA OUTPUT_D
#define RS PIN_E0
#define RW PIN_E1
#define EN PIN_E2
UNSIGNED CHAR CHUOI[2];
UNSIGNED CHAR HANG1[20]={"NAME:PHAM TUAN ANH"};
UNSIGNED CHAR HANG2[17]={"ID CODE:10112188"};
UNSIGNED CHAR HANG3[11]={"DAT TRUOC:"};
UNSIGNED CHAR HANG4[13]={"TEMPERATURE:"};
unsigned char KQD,CH,DV,KQT,CH1,DV1;//thong so so nhiet do,KQD la ket qua do nhiet do cua adc,KQT la nhiet do dat truoc do may tinh tuyen xuong
unsigned char DT_TM,DT_RC;//duu lieu truyen nhan nhiet do
INT K,TT;
void cd()
{
if(!INPUT(PIN_B0))
{
DELAY_MS(2);
if(!INPUT(PIN_B0))
{
DELAY_MS(2);
TT=1;
WHILE(!INPUT(PIN_B0));
}
}
}
void ghi_lcd(INT1 CH_RS,UNSIGNED CHAR DATA_LCD)
{
DATA(DATA_LCD);
OUTPUT_BIT(RS,CH_RS);
OUTPUT_BIT(RW,0);
OUTPUT_BIT(EN,1);
OUTPUT_BIT(EN,0);
DELAY_MS(5);
}
void setup_lcd()
{
DELAY_MS(30);
ghi_lcd(0,0x38);
ghi_lcd(0,0x38);
ghi_lcd(0,0x38);
ghi_lcd(0,0x0C);
ghi_lcd(0,0x06);
ghi_lcd(0,0x01);
}
//giai ma lcd
void gmlcd()
{
DV=(KQD%10)+0X30;CH=(KQD/10)+0X30;
DV1=(KQT%10)+0X30;CH1=(KQT/10)+0X30;
}
//hien thi lcd
void htlcd()
{
gmlcd();
//! ghi_lcd(0,0XA1);
//! ghi_lcd(1,CH1);
//! ghi_lcd(1,DV1);
ghi_lcd(0,0XE1);
ghi_lcd(1,CH);
ghi_lcd(1,DV);
}
//do nhiet do va hien thi len lcd
void nhietdo()
{
KQD=0;
KQD=READ_ADC();
DELAY_MS(1);
KQD=(KQD/2.046);
htlcd();
}
//truyen thong so nhiet do len may tinh
void truyendulieu()
{
WHILE(!INPUT(PIN_B0))
{
DT_TM=KQD+0X30;
PUTCHAR(DT_TM);
//PUTCHAR(DV);
DELAY_MS(1);
TT=0;
}
}
//nhan nhiet do dat truoc tu may tinh gui vao
#INT_RDA
void nhandulieu()
{
CHUOI[K++]=GETCHAR();
}
//so sanh 2 thong so nhiet do voi nhau
void sosanh()
{
nhandulieu();
if(KQT<KQD) OUTPUT_HIGH(PIN_B1);
if(KQT>KQD) OUTPUT_LOW(PIN_B1);
}
void main()
{
int M;
//xet cau hinh chan
SET_TRIS_B(0X01);
OUTPUT_B(0Xff);
SET_TRIS_C(0X80);
OUTPUT_C(0X80);
SET_TRIS_D(0X00);
SET_TRIS_E(0X00);
OUTPUT_D(0X00);
OUTPUT_E(0X00);
setup_lcd();
ghi_lcd(0,0x80);
//cau hinh adc
SETUP_ADC(ADC_CLOCK_DIV_2);
SETUP_ADC_PORTS(SAN0);
SET_ADC_CHANNEL(0);
//NGAT RS232
ENABLE_INTERRUPTS(INT_RDA);
ENABLE_INTERRUPTS(GLOBAL);
ghi_lcd(0,0X80);
for(M=0;M<20;M++)
{
ghi_lcd(1,HANG1[M]);
}
ghi_lcd(0,0XC0);
for(M=0;M<17;M++)
{
ghi_lcd(1,HANG2[M]);
}
ghi_lcd(0,0X94);
for(M=0;M<11;M++)
{
ghi_lcd(1,HANG3[M]);
}
ghi_lcd(0,0XD4);
for(M=0;M<13;M++)
{
ghi_lcd(1,HANG4[M]);
}
while(true)
{
htlcd();
nhietdo();
truyendulieu();
// sosanh();
DELAY_MS(5);
}
}
#include<16f887.h>
#device ADC=10
#fuses HS,NOWDT,NOLVP,NOPROTECT,PUT
#use DELAY(CLOCK=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,RCV=PIN_C7,bi ts=8)//KHAI BAO VA DINH CAU HINH CHO UART
#define DATA OUTPUT_D
#define RS PIN_E0
#define RW PIN_E1
#define EN PIN_E2
UNSIGNED CHAR CHUOI[2];
UNSIGNED CHAR HANG1[20]={"NAME:PHAM TUAN ANH"};
UNSIGNED CHAR HANG2[17]={"ID CODE:10112188"};
UNSIGNED CHAR HANG3[11]={"DAT TRUOC:"};
UNSIGNED CHAR HANG4[13]={"TEMPERATURE:"};
unsigned char KQD,CH,DV,KQT,CH1,DV1;//thong so so nhiet do,KQD la ket qua do nhiet do cua adc,KQT la nhiet do dat truoc do may tinh tuyen xuong
unsigned char DT_TM,DT_RC;//duu lieu truyen nhan nhiet do
INT K,TT;
void cd()
{
if(!INPUT(PIN_B0))
{
DELAY_MS(2);
if(!INPUT(PIN_B0))
{
DELAY_MS(2);
TT=1;
WHILE(!INPUT(PIN_B0));
}
}
}
void ghi_lcd(INT1 CH_RS,UNSIGNED CHAR DATA_LCD)
{
DATA(DATA_LCD);
OUTPUT_BIT(RS,CH_RS);
OUTPUT_BIT(RW,0);
OUTPUT_BIT(EN,1);
OUTPUT_BIT(EN,0);
DELAY_MS(5);
}
void setup_lcd()
{
DELAY_MS(30);
ghi_lcd(0,0x38);
ghi_lcd(0,0x38);
ghi_lcd(0,0x38);
ghi_lcd(0,0x0C);
ghi_lcd(0,0x06);
ghi_lcd(0,0x01);
}
//giai ma lcd
void gmlcd()
{
DV=(KQD%10)+0X30;CH=(KQD/10)+0X30;
DV1=(KQT%10)+0X30;CH1=(KQT/10)+0X30;
}
//hien thi lcd
void htlcd()
{
gmlcd();
//! ghi_lcd(0,0XA1);
//! ghi_lcd(1,CH1);
//! ghi_lcd(1,DV1);
ghi_lcd(0,0XE1);
ghi_lcd(1,CH);
ghi_lcd(1,DV);
}
//do nhiet do va hien thi len lcd
void nhietdo()
{
KQD=0;
KQD=READ_ADC();
DELAY_MS(1);
KQD=(KQD/2.046);
htlcd();
}
//truyen thong so nhiet do len may tinh
void truyendulieu()
{
WHILE(!INPUT(PIN_B0))
{
DT_TM=KQD+0X30;
PUTCHAR(DT_TM);
//PUTCHAR(DV);
DELAY_MS(1);
TT=0;
}
}
//nhan nhiet do dat truoc tu may tinh gui vao
#INT_RDA
void nhandulieu()
{
CHUOI[K++]=GETCHAR();
}
//so sanh 2 thong so nhiet do voi nhau
void sosanh()
{
nhandulieu();
if(KQT<KQD) OUTPUT_HIGH(PIN_B1);
if(KQT>KQD) OUTPUT_LOW(PIN_B1);
}
void main()
{
int M;
//xet cau hinh chan
SET_TRIS_B(0X01);
OUTPUT_B(0Xff);
SET_TRIS_C(0X80);
OUTPUT_C(0X80);
SET_TRIS_D(0X00);
SET_TRIS_E(0X00);
OUTPUT_D(0X00);
OUTPUT_E(0X00);
setup_lcd();
ghi_lcd(0,0x80);
//cau hinh adc
SETUP_ADC(ADC_CLOCK_DIV_2);
SETUP_ADC_PORTS(SAN0);
SET_ADC_CHANNEL(0);
//NGAT RS232
ENABLE_INTERRUPTS(INT_RDA);
ENABLE_INTERRUPTS(GLOBAL);
ghi_lcd(0,0X80);
for(M=0;M<20;M++)
{
ghi_lcd(1,HANG1[M]);
}
ghi_lcd(0,0XC0);
for(M=0;M<17;M++)
{
ghi_lcd(1,HANG2[M]);
}
ghi_lcd(0,0X94);
for(M=0;M<11;M++)
{
ghi_lcd(1,HANG3[M]);
}
ghi_lcd(0,0XD4);
for(M=0;M<13;M++)
{
ghi_lcd(1,HANG4[M]);
}
while(true)
{
htlcd();
nhietdo();
truyendulieu();
// sosanh();
DELAY_MS(5);
}
}
đây là link mình có file mô phỏng do mình không biết add file nên các bạn thông cảm
Cần giúp - Lập trình rs232 truyền nhận thông số | Cộng đồng cơ điện tử Việt Nam | Mechatronics
Comment