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