PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Giao tiếp cổng COM và LPT (http://www.picvietnam.com/forum/forumdisplay.php?f=44)
-   -   truyen va nhan mot ki tu c# (http://www.picvietnam.com/forum/showthread.php?t=7541)

hung_nguyen 13-12-2010 03:53 PM

truyen va nhan mot ki tu c#
 
1 Attachment(s)
Minh đang làm cái này moi nguoi xem qua xem có ổn không. Ý tưởng là ấn nút ở chân B tạo ngắt ngoài xong sau đó truyền 1 số và hiển thị nên texbox, wait 10s và wait 20s là thời gian chờ đợi để led đếm ngược 10s và 20s, các nút còn lại từ person 1 đến 5 khi ấn thì sẽ gửi kí tự xuống vdk thực hiện chương trình ngắt. Có một số vấn đề sau:
+ Việc sử dụng kiểu dữ liệu của tớ ở chương trình cshap vẫn chưa ổn. dạng char và string sau đó gửi số lên máy tính và nhận hiển thị như thế chưa đúng.
+ Tớ dùng cable chuyển usb và rs232 đã cài driver có cần phải thiết lập gì không?
+ Code của vdk nhận và truyền kí tự như vậy thế nào?

code vdk
Code:

#include "MAIN.h"
#include <defs_16f877A.h>

#define button1 RB4
#define button2 RB5
#define button3 RB6
#define button4 RB7
#define button5 RB0

#define led1  RC0
#define led2  RC1
#define led3  RC2
#define led4  RC3
#define led5  RC5
#define chuong RC4
#use rs232(baud=9600,parity=n,xmit=pin_C6,rcv=pin_C7)
int8 const d[10]={0x40 0x79 0x24 0x30 0x19 0x12 0x02 0x78 0x00 0x10};
int8 hc,hdv;
int16 count=0;
int16 sec;
int16 dsec;
int8 mode=0;
int dem=0;
int chay=1;
char nhan;

#INT_RDA
void ngat_UART()
{
nhan=getc();
if(nhan=="1"){chay=0;}
if(nhan=="2"){chay=0;}
if(nhan=="3"){chay=0;}
if(nhan=="4"){chay=0;}
if(nhan=="5"){chay=0;}
if(nhan=="6"){chay=0;}
if(nhan=="7"){chay=0;}
}
#INT_RB      //ngat ngoai
void ngat_RB()
{
if(button1==0){mode=1;}
if(button2==0){mode=2;}
if(button3==0){mode=3;}
if(button4==0){mode=4;}

}
#INT_EXT
void ngatngoai()
{
if(button5==0){mode=5;}
}
#INT_RTCC
void ngat_timer0()
{
 set_timer0(190);
 ++count;
 if(count==2976)
  {count=0;dsec++;}
 if(dsec==10)
  {dsec=0;sec--;}
 if(sec==0)
  {disable_interrupts(INT_RTCC);}
}

void tach(int16 variable)
{
 hdv = variable%10;
 hc  = variable/10;
}

//void program1();
//void program2();
//void program3();
//void program4();
//void program5();
void program1()
{
  if(chay==1)
  {
  printf ("%u",1);
  led1=0;chuong=0;
  delay_ms(1200);
  chuong=1;delay_ms(1000);led1=1;
  }
 }
void program2()
{
  if(chay==1)
  {
  printf("%u",2);
  led2=0;chuong=0;
  delay_ms(1200);
  chuong=1;delay_ms(1000);led2=1;
  }
}
void program3()
{
  if(chay==1)
  {
  printf("%u",3);
  led3=0;chuong=0;
  delay_ms(1200);
  chuong=1;delay_ms(1000);led3=1;
  }
}
void program4()
{
  if(chay==1)
  {
  printf("%u",4);
  led4=0;chuong=0;
  delay_ms(1200);
  chuong=1;delay_ms(1000);led4=1;
  }
}
void program5()
{
 if(chay==1)
 {
 printf("%u",5);
 led5=0;chuong=0;
 delay_ms(1200);
 chuong=1;delay_ms(1000);led5=1;
 }
}
void demnguoc()
{
  if(chay==1)
  {
  sec=20;
  enable_interrupts(GLOBAL);
  enable_interrupts(INT_RTCC);
  set_timer0(190);

  while(1)
      {
        tach(sec);
        PORTA=0x02;
        PORTD=d[hdv];
        delay_ms(1);

        PORTA=0x01;
        PORTD=d[hc];
        delay_ms(1);
        if(sec==0)
        {
          dem++;
          if(dem==99) {dem=0;PORTA=0xff;break;}
        }
      }
 delay_ms(1000);
 PORTA=0;
 PORTD=0xff;
 }
}
void demnguoc1()
{
  if(chay==1)
  {
  sec=10;
  enable_interrupts(GLOBAL);
  enable_interrupts(INT_RTCC);
  set_timer0(190);

  while(1)
      {
        tach(sec);
        PORTA=0x02;
        PORTD=d[hdv];
        delay_ms(1);

        PORTA=0x01;
        PORTD=d[hc];
        delay_ms(1);
        if(sec==0)
        {
          dem++;
          if(dem==99) {dem=0;PORTA=0xff;break;}
        }
      }
 delay_ms(1000);
 PORTA=0;
 PORTD=0xff;
 }
}
void main()
{
  setup();
  PORTB=0b11111111;
  // TODO: USER CODE!!
  enable_interrupts(GLOBAL);/////GIE=1;PEIE=1;
  ENABLE_INTERRUPTS(INT_RDA);
  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
  enable_interrupts(INT_RB);
  enable_interrupts(INT_EXT);
  ext_int_edge(H_TO_L);
  set_timer0(190);
    PORTD=0xff;
    PORTA=0;
    PORTE=0;
    PORTC=0xff;
 while(1)
  {
  switch (mode)
    {
    case 1: {program1();mode=0;break;}
    case 2: {program2();mode=0;break;}
    case 3: {program3();mode=0;break;}
    case 4: {program4();mode=0;break;}
    case 5: {program5();mode=0;break;}
    case 6: {demnguoc();mode=0;break;}
    case 7: {demnguoc1();mode=0;break;}
    }
  }
}
//end//

duoi day la file viet tren cshap

hung_nguyen 16-12-2010 03:00 PM

khong ai tra loi nhi,minh dang can truyen nhan mot ki tu tu may tinh xuong vdk ma mac qua chua chay cho chieu nguoc lai thi chay roi.


Múi giờ GMT. Hiện tại là 02:35 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam