Thông báo

Collapse
No announcement yet.

Cần giúp đỡ:về truyền thông nối tiếp bất đồng bộ rs232

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Cần giúp đỡ:về truyền thông nối tiếp bất đồng bộ rs232

    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

    // 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);
    }
    }


    đâ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

  • #2
    có bạn nào giúp mình với
    Mình đang cần gấp lắm

    Comment

    Về tác giả

    Collapse

    bibacky1992 Tìm hiểu thêm về bibacky1992

    Bài viết mới nhất

    Collapse

    Đang tải...
    X