![]() |
|
Tài trợ cho PIC Vietnam |
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 |
|
![]() |
#1 |
Đệ tử 2 túi
Tham gia ngày: Jan 2009
Bài gửi: 29
: |
![]() em đang thực hiện một bài thực hành , thày giáo cho về . đề bài như sau : gửi một số thực từ trên máy tính tới vi điều khiển (ở đây là pic16f877a ) qua r232 bằng visual basic 6.0, hiển thị lên 2led 7 thanh(hiển thị số có hai chữ số) . nhưng theo em được biết thì vb chỉ gửi được kí tự . Mà mình muốn gửi một số chẳng hạn như số 89 xuống vi điều khiển thì vi điều khiển nhận được là xâu kí tự "89" tức là mã ascii của 8 và 9 . do đó mình phải có hàm chuyển đổi thành số 89 . em viết một chương trình nhưng nó không hiện đúng .mong các đại ca chỉ giúp !cảm ơn nhiều ! đây là chương trình do em viết trên ccs:
Code:
#include <16f877a.h> #include <def_877a.h> #fuses HS,NOLVP,NOWDT,PUT #use delay (clock=4000000) // defind crystal = 4MHz #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) #include <string.h> int16 MAP[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int16 t[2]={0x01,0x02}; void hien(int16 x) { int8 i; int8 a[2]={0}; a[0]=x%10; a[1]=x/10; for(i=0;i<2;i++) { porta=t[i]; portd=MAP[(a[i])]; delay_ms(2); } } int16 tach(char *str) { int16 i,l,s; l=strlen(str); s=str[0]- 48; for(i=1;i<l;i++) { s=s*10+(str[i]- 48); } return s; } void main() { char *k; int16 y; trisd=0x00; trisa=0x00; porta=0x00; portd=0x00; while(true) { if(kbhit()) { k=getc(); putc(k); y=tach(k); } hien(y); } } thay đổi nội dung bởi: namqn, 18-03-2009 lúc 01:16 AM. Lý do: định dạng code |
![]() |
![]() |
![]() |
#2 |
Trưởng lão PIC bang
|
Bạn không cần phải tự xây dựng hàm chuyển chuỗi ASCII thành số đâu, các hàm atoi(), atol(), và atof() trong thư viện của CCS C có thể thực hiện công việc đó. Hãy đọc tài liệu hướng dẫn của trình biên dịch trước khi viết code, để xem có cần phải "sáng chế lại cái bánh xe" hay không.
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
![]() |
![]() |
![]() |
#3 |
Đệ tử 2 túi
Tham gia ngày: Jan 2009
Bài gửi: 29
: |
anh ơi ! em đã thử mấy cái hàm đó và thấy nó hiện đúng ! khi chưa gửi kí tự từ trên visual . ví dụ em khai báo :
char str[]="12"; int16 y; y=atol(str); hien(y); thì nó hiện đúng . Nhưng khi em gửi từ trên máy tính xuống thì nó lại hiện sai . chương trình của em như sau : Code:
#include <16f877a.h> #include <def_877a.h> #include <ctype.h> #fuses HS,NOLVP,NOWDT,PUT #use delay (clock=4000000) // defind crystal = 4MHz #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) #include <string.h> #include <stdlib.h> int16 MAP[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int16 t[2]={0x01,0x02}; void hien(int16 x) { int8 i; int8 a[2]={0}; a[0]=x%10; a[1]=x/10; for(i=0;i<2;i++) { porta=t[i]; portd=MAP[(a[i])]; delay_ms(2); } } void main() { char k[]="12"; int16 y; trisd=0x00; trisa=0x00; porta=0x00; portd=0x00; while(true) { if(kbhit()) { gets(k); puts(k); y=atol(k); } hien(y); } } thay đổi nội dung bởi: namqn, 19-03-2009 lúc 03:42 PM. Lý do: định dạng code |
![]() |
![]() |
![]() |
#4 |
Đệ tử 2 túi
Tham gia ngày: Jan 2009
Bài gửi: 29
: |
cảm ơn anh Nam nhiều lắm ! đúng là em chưa đọc mấy cái hàm đó .
|
![]() |
![]() |
![]() |
#5 |
Đệ tử 6 túi
|
[QUOTE=phamngocthanh87;23658]em đang thực hiện một bài thực hành , thày giáo cho về . đề bài như sau : gửi một số thực từ trên máy tính tới vi điều khiển (ở đây là pic16f877a ) qua r232 bằng visual basic 6.0, hiển thị lên 2led 7 thanh(hiển thị số có hai chữ số) . nhưng theo em được biết thì vb chỉ gửi được kí tự . Mà mình muốn gửi một số chẳng hạn như số 89 xuống vi điều khiển thì vi điều khiển nhận được là xâu kí tự "89" tức là mã ascii của 8 và 9 . do đó mình phải có hàm chuyển đổi thành số 89 . em viết một chương trình nhưng nó không hiện đúng .mong các đại ca chỉ giúp !cảm ơn nhiều ! đây là chương trình do em viết trên ccs:
Trong Css co hàm Atoi(chuyển đổi chuổi Ascii thành số interger), bạn coi hàm này se giải quyết được vấn đề của bạn. Thân
__________________
-------------------------------------------------------------------------------------- Phùng Minh Tuân Email: tuan.phmt@gmail.com "Cuộc đời sóng gió nuôi ta lớn Bao lần thất bại dạy ta khôn". |
![]() |
![]() |
![]() |
#6 |
Đệ tử 2 túi
Tham gia ngày: Jan 2009
Bài gửi: 29
: |
![]() mấy bác cho em hỏi cách gửi nhận chuỗi kí tự từ máy tính xuống vdk như thế này có đc không ? mà em thấy khi em gửi chuỗi số xuống nó hiển thị lên led không đúng . với cả khi em gửi lại kí tự lên visual lúc đc lúc không ?mong các bác chỉ giúp.
Code:
#include <16f877a.h> #include <def_877a.h> #fuses HS,NOLVP,NOWDT,PUT #use delay (clock=4000000) // defind crystal = 4MHz #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) #include <string.h> int16 MAP[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int16 t[2]={0x01,0x02}; void hien(int16 x) { int8 i; int8 a[2]={0}; a[0]=x%10; a[1]=x/10; for(i=0;i<2;i++) { porta=t[i]; portd=MAP[(a[i])]; delay_ms(2); } } void main() { char *k; int16 y; trisd=0x00; trisa=0x00; porta=0x00; portd=0x00; while(true) { if(kbhit()) { gets(k); puts(k); } y=atol(k); hien(y); } thay đổi nội dung bởi: namqn, 21-03-2009 lúc 03:41 PM. Lý do: định dạng code |
![]() |
![]() |
![]() |
#7 |
Đệ tử 2 túi
Tham gia ngày: Jan 2009
Bài gửi: 29
: |
cảm ơn các bác đã giúp đỡ
em đã gửi và nhận đúng rồi ! cảm ơn các bác nhiều !
|
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|