Đ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
Comment