PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp cổng COM và LPT

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển...

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 13-12-2010, 03:53 PM   #1
hung_nguyen
Nhập môn đệ tử
 
Tham gia ngày: Aug 2008
Bài gửi: 6
:
truyen va nhan mot ki tu c#

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
File Kèm Theo
File Type: rar WindowsApplication8.rar (35.5 KB, 117 lần tải)

thay đổi nội dung bởi: phamminhtuan, 13-12-2010 lúc 05:04 PM. Lý do: Chú ý, để code trong tag [code] ... [/code]
hung_nguyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam