Đo động cơ và hiển thị lên máy tính qua Com . Mình mô phỏng trên pro và hiển thị trên Virtual terminal thì hiển thị đúng rồi nhưng khi hiển thị trên VB thì chỉ hiển thị được 1 hoặc 2 giá trị cuối của tốc độ lâu lâu mới hiển thị được hết
VD : tốc độ là 285 thì chỉ hiển thị 5 hoặc 85 thui . Post lên đây nhờ các bác trợ giúp
code C
code VB (đây chỉ là đoạn code nhận thui )
Mô phỏng và code : GTMT.zip
VD : tốc độ là 285 thì chỉ hiển thị 5 hoặc 85 thui . Post lên đây nhờ các bác trợ giúp

code C
Code:
#include<stdio.h>
#include<reg52.h>
unsigned int dem, xung, tocdo;
// bien dem tao thoi gian 1s, bien chua gia tri so xung dem
// duoc, bien toc do
unsigned char xungh, xungl, tocdo1, tocdo2, tocdo3, tocdo4;
// bien chua gia tri byte cao cua xung, bien chua gia tri byte
// thap cua xung, bien chua gia tri hang nghin, tram, truc, don
// vi cua toc do ``
void truyen_thong (void)
// chuong trinh con tinh toc do va truyen len PC
{
xung = 256*xungh + xungl; // doc gia tri xung tu counter 0
tocdo = 60*xung/24;
tocdo1 = tocdo/1000; //doc toc do
tocdo2 = (tocdo%1000)/100;
tocdo3 = (tocdo-tocdo1*1000-tocdo2*100)/10;
tocdo4 = (tocdo-tocdo1*1000-tocdo2*100)%10;
SBUF = tocdo1 + 0X30; // truyen gia tri toc do
while(!TI); // sau 1s truyen 1 lan
TI = 0;
SBUF = tocdo2+ 0X30; // truyen so hang tram
while(!TI); // cho co bao truyen xong 1 byte du lieu
TI = 0;
SBUF = tocdo3 + 0X30; //truyen so hang truc
while(!TI);
TI = 0;
SBUF = tocdo4 + 0X30; //truyen so hang don vi
while(!TI);
TI = 0;
}
void main(void)
{
dem = 0; // dat gia tri ban dau cho bien dem
xung = 0; // dat gia tri ban dau cho xung
IE = 0X00; // cam cac ngat
SCON = 0X52; // port noi tiep che do 1, REN=1, TI=1
TMOD = 0X25; // timer 1 mode 2 (autoreload 8 bit),
// timer 0 mode 1 (bo dem counter 16 bit)
T2CON = 0X00; // T2 hoat dong che do Autoreload
TH0 = TL0 = 0X00; // Counter dem tu 0
TH1 = TL1 = -3; // tao toc do baud 9600
TH2 = RCAP2H = 0XB7;// T2 tao t = 20ms
TL2 = RCAP2L = 0XFF;
TR0 = 1; // cho phep counter 0 chay
TR1 = 1; // cho timer 1 chay
TR2 = 1; // cho timer 2 chay
IE = 0XA0; // cho phep ngat T2
while(1);
}
void ngat0 (void) interrupt 5 // chuong trinh ngat T2
{
TF2 = 0; // xoa co bao ngat
dem++; // dem = dem + 1
if(dem==50) // tao td = 1s
{
dem = 0;
TR0 = 0; // dung timer 0
IE = 0X00; // ngung ngat
xungh = TH0; // doc so lieu
xungl = TL0;
truyen_thong(); // goi chuong trinh con "truyen_thong"
TH0 = TL0 = 0X00; // dat lai gia tri cho Counter 0
TR0 = 1; // cho chay T0
IE = 0XA0; // cho phep ngat
}
}
Code:
Private Sub MSComm1_OnComm() ' su kien onCom
If MSComm1.CommEvent = comEvReceive Then ' khi co mot byte duoc truyen
MSComm1.InputLen = 0 ' doc toan bo noi dung trong bo dem nhan
x = MSComm1.Input ' doc gia tri dau vao
tocdo = x ' chuyen doi gia tri cua bien x thanh du
' lieu kieu nguyen dai vao bien tocdo
Text1.Text = tocdo ' hien thi toc do dong co
End If
End Sub
Em thêm nó báo lỗi, chắc sai rồi 
Comment