PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

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

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 30-09-2005, 10:20 AM   #1
hphong23
Nhập môn đệ tử
 
hphong23's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 9
:
ADC12bit giao tiếp với máy tính qua cổng COM

Mình mới học PIC và thử làm một mạch biến đổi ADC giao tiếp với máy tính qua cổng Com. Vì vậy còn nhiều thứ mình làm rất củ chuối . Mong mọi người đọc và nhận xét giúp mình để có thể hoàn thiện hơn nhé. Con ADC mình dùng là ICL7107 (độ phân giải tương đương 12bit), còn PIC 16F877A thì dùng để giao tiếp nối tiếp.
Nguyên tắc hoạt động của mạch là PIC sẽ nhận giá trị từ máy tính sau đó xuất ra cổng D để thực hiện việc chọn kênh vào (trên 4051) và chọn 74LS245 (dùng để mở rộng cổng). Giá trị vào sẽ được đọc vào từ cổng B và chuyển lại vào máy tính để giải mã và xuất kết quả ra.
Mạch nguyên lý mình post lên có khác so với mạch thực tế nên cách lập trình hơi khác. Mình chỉ nêu cách hoạt động của mạch thôi. Cám ơn mọi người đã đọc nhé. Chúc vui vẻ!

Đây là đoạn code cho PIC (viet bang C):
Code:
   while(1)
      {
         while (!kbhit()&&(++timeout<50000)) delay_us(10);
         if (kbhit()) i=getc();
         output_D(i);
         delay_us(10);
         o=input_B();
         delay_us(10);
         putc(o);
         delay_us(10);


      }
Còn đây là đoạn code viet bang Delphi để chọn kênh vào, điều khiển 74ls245 và giải mã giá trị nhận được

Code:
function read(k:byte):integer;
var x,ra,d0,d1,d2,vao,tam:byte;
    Input,sign,n:Integer;


function dv(data:byte):byte;   { giai ma hang don vi}
begin
       case data of
          8: dv:=0;
          94:dv:=1;
          36:dv:=2;
          20:dv:=3;
          82:dv:=4;
          17:dv:=5;
          1: dv:=6;
          92:dv:=7;
          0: dv:=8;
          16:dv:=9;

     end;

end;


function ch(data:byte):byte;  { giai ma hang chuc}
begin
       case data of
          4:  ch:=0;
          79:ch:=1;
          33: ch:=2;
          3:  ch:=3;
          74: ch:=4;
          18: ch:=5;
          16: ch:=6;
          71: ch:=7;
          0:  ch:=8;
          2:  ch:=9;

     end;

end;

function tr(data:byte):byte;    { giai ma hang tram}
begin
       case data of
          2:  tr:=0;
          151:tr:=1;
          65: tr:=2;
          5:  tr:=3;
          148:tr:=4;
          36: tr:=5;
          32: tr:=6;
          135:tr:=7;
          0:  tr:=8;
          4:  tr:=9;

     end;

end;

begin

case k of    {chon gia tri de phan kenh cho 4051}
1: x:=226;
2: x:=227;
3: x:=234;
4: x:=235;
5: x:=242;
6: x:=243;
7: x:=250;
8: x:=251;
9: x:=228 ;
10:x:=229 ;
11:x:=236;
12:x:=237;
13:x:=244;
14:x:=245;
15:x:=252;
16:x:=253;
end;

ra:=(223 and x); {ket hop gia tri chon kenh voi gia tri de dieu khien 74ls245}
sendbyte(ra);
vao:=readbyte();
d0:=dv(vao);

ra:=(191 and x); {ket hop gia tri chon kenh voi gia tri de dieu khien 74ls245}
sendbyte(ra);
vao:=readbyte();
tam:=(vao and $7f); {che bit dau cua ICL7107}
d1:=ch(tam);
if (vao and $80)= $80 then sign:=1  else sign:=-1;

ra:=(127 and x);  {ket hop gia tri chon kenh voi gia tri de dieu khien 74ls245}
sendbyte(ra);
vao:=readbyte();
tam:=(vao and $f7); {che bit hang nghin cua ICL7107}
d2:=tr(tam);
if (vao and $8)=$8 then n:=0 else n:=1;

read:=sign*(n*1000+d2*100+d1*10+d0);  {gia tri dien ap tinh bang mV}


end;
hphong23 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ðiều Chỉnh
Xếp Bài

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à 05:59 AM.


Đượ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