Em đang làm đồ án về VDK,nội dung đề tài như sau:
Thiết kế bộ đo tần số hiển thị bằng màn hình máy tính .
Yêu cầu:
- Mạch điện tử được thiết kế trên máy tính bằng phần mềm chuyên dụng.
- Tần số đo đ¬ược truyền lên máy tính và hiển thị bằng phần mềm tiện ích Hyper Terminal.
- Sai số cho phép: ± 5%
- Hệ thống có chuyển mạch để đo 3 dải tần số khác nhau nhằm đảm bảo độ chính xác (dải 1 từ 10Hz đến 100Hz; dải 2 từ 100Hz đến 500Hz; dải 3 từ 1KHz đến 5KHz).
- Hệ thống có kèm theo 01 bộ tạo xung với các tần số tư¬ơng ứng 3 dải trên.
Em có được code của bài này rồi,nhưng mô phỏng lại không được,và em không biết sai ở đâu.
Vậy xin mọi người giúp đỡ em kiểm tra và mô phỏng lại giúp em!
Em không biết nhiều về VDK nên mong mọi người giúp đỡ.
Nội dung đoạn code như sau:
/* do an do tan so: voi 3 dai tan: 10hz-100hz; 100hz-500hz; 1000hz-5000hz.
Thuat Toan: 1, do thoi gian sau 2 lan dao xung thi do la chu ky. nghich dao chu ky ta co tan so
2, dem so xung xay ra trong 1s bang cach. tao thoi gian (vd 1s)tu timer1 va
dem so xung cao va xung thap bang timer0 trong thoi gian tao ra tu timer1 do.*/
#include <REGX52.H>
#include<stdio.h>
#include<math.h>
#include<string.h>
unsigned int dem=0,tanso=0,f=0;
unsigned char a,b,c,d;
unsigned char m[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x3 9};
void chuoi(char*s)
{
while(*s)
{
putchar(*s);
s++;
}
}
void hienthi(int k)
{
int nghin,chuc,tram,donvi;
nghin=k/1000;
tram=(k-nghin*1000)/100;
chuc=(k-1000*nghin-100*tram)/10;
donvi=k-1000*nghin-100*tram-chuc*10;
if(k>=998&&k<=5002)
{
chuoi(" Ban dang do o dai tan thu 3! Gia tri tan so do duoc la: ");
putchar(m[nghin]);
putchar(m[tram]);
putchar(m[chuc]);
putchar(m[donvi]);
chuoi(" Hz");
}
if(k>=98&&k<=502)
{
chuoi(" Ban dang do o dai tan thu 2! Gia tri tan so do duoc la: ");
putchar(m[tram]);
putchar(m[chuc]);
putchar(m[donvi]);
chuoi(" Hz");
}
if(k>8&&k<=100)
{
chuoi(" Ban dang do o dai tan thu 1! Gia tri tan so do duoc la: ");
putchar(m[chuc]);
putchar(m[donvi]);
chuoi(" Hz");
}
if((k>502&&k<998)||(k>5002)||(k<9))
{
chuoi(" Xin loi! Tan so do duoc nam ngoai dai do yeu cau! ");
}
}
void main(void)
{
SCON=0X52; // PORT NOI TIEP CHE DO 1; REN = TI = 1
T2CON=0X30; //RCLK=TCLK=1
RCAP2H=255;
RCAP2L=-36; //Toc do baud la 9600
TR2=1;
TMOD = 0X15; // TIMER0 counter CHE DO 1;TIMER1 DINH THOI CHE DO 1
TH1= -46350/256;//TAO THOI GIAN 0,1s
TL1= -46350%256;
TR1=1;
IE=0X88; // CHO PHEP NGAT TIMER 1
IP=0X08;
dem=0;
TH0=TL0=0; // XOA TIMER 0, BAT DAU DEM
putchar(0X0a);
putchar(0X0a);
putchar(0X0d);
chuoi(" ______________DO AN mon VI DIEU KHIEN (de so 16)____________ ");
putchar(0X0d);
putchar(0X0a);
putchar(0X0a);
chuoi(" Giao vien HD: Thay NGUYEN ANH DUNG ");
putchar(0x0a);
putchar(0x0d);
chuoi(" __________________________________________________ __________ ");
putchar(0x0a);
putchar(0x0a);
putchar(0x0d);
chuoi(" CHUONG TRINH DO TAN SO SU DUNG VDK 89S52 ");
putchar(0x0d);
putchar(0x0a);
putchar(0X0a);
while(1)
{
TR0=1;
while(dem<9); //cho dem duoc 1s
f = TH0*256 + TL0; //doi gia tri dem dc sang so thap phan
tanso=f*2.324239;
if(tanso>=367&&tanso<870)
tanso=tanso-265;
hienthi(tanso);
putchar(0x0d);
TH0=TL0=0;
dem=0;
putchar(0x0d);
// putchar(0x0a);
// putchar(0X0a);
}
}
void ngatT1(void) interrupt 3 //moi lan ngat la 0.1s
{
TR1=0;
dem++;
TF1=0;
TH1=-46350/256; //nap lai gia tri cho timer1
TL1=-46350%256;
TR1=1;
}
Thiết kế bộ đo tần số hiển thị bằng màn hình máy tính .
Yêu cầu:
- Mạch điện tử được thiết kế trên máy tính bằng phần mềm chuyên dụng.
- Tần số đo đ¬ược truyền lên máy tính và hiển thị bằng phần mềm tiện ích Hyper Terminal.
- Sai số cho phép: ± 5%
- Hệ thống có chuyển mạch để đo 3 dải tần số khác nhau nhằm đảm bảo độ chính xác (dải 1 từ 10Hz đến 100Hz; dải 2 từ 100Hz đến 500Hz; dải 3 từ 1KHz đến 5KHz).
- Hệ thống có kèm theo 01 bộ tạo xung với các tần số tư¬ơng ứng 3 dải trên.
Em có được code của bài này rồi,nhưng mô phỏng lại không được,và em không biết sai ở đâu.
Vậy xin mọi người giúp đỡ em kiểm tra và mô phỏng lại giúp em!
Em không biết nhiều về VDK nên mong mọi người giúp đỡ.
Nội dung đoạn code như sau:
/* do an do tan so: voi 3 dai tan: 10hz-100hz; 100hz-500hz; 1000hz-5000hz.
Thuat Toan: 1, do thoi gian sau 2 lan dao xung thi do la chu ky. nghich dao chu ky ta co tan so
2, dem so xung xay ra trong 1s bang cach. tao thoi gian (vd 1s)tu timer1 va
dem so xung cao va xung thap bang timer0 trong thoi gian tao ra tu timer1 do.*/
#include <REGX52.H>
#include<stdio.h>
#include<math.h>
#include<string.h>
unsigned int dem=0,tanso=0,f=0;
unsigned char a,b,c,d;
unsigned char m[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x3 9};
void chuoi(char*s)
{
while(*s)
{
putchar(*s);
s++;
}
}
void hienthi(int k)
{
int nghin,chuc,tram,donvi;
nghin=k/1000;
tram=(k-nghin*1000)/100;
chuc=(k-1000*nghin-100*tram)/10;
donvi=k-1000*nghin-100*tram-chuc*10;
if(k>=998&&k<=5002)
{
chuoi(" Ban dang do o dai tan thu 3! Gia tri tan so do duoc la: ");
putchar(m[nghin]);
putchar(m[tram]);
putchar(m[chuc]);
putchar(m[donvi]);
chuoi(" Hz");
}
if(k>=98&&k<=502)
{
chuoi(" Ban dang do o dai tan thu 2! Gia tri tan so do duoc la: ");
putchar(m[tram]);
putchar(m[chuc]);
putchar(m[donvi]);
chuoi(" Hz");
}
if(k>8&&k<=100)
{
chuoi(" Ban dang do o dai tan thu 1! Gia tri tan so do duoc la: ");
putchar(m[chuc]);
putchar(m[donvi]);
chuoi(" Hz");
}
if((k>502&&k<998)||(k>5002)||(k<9))
{
chuoi(" Xin loi! Tan so do duoc nam ngoai dai do yeu cau! ");
}
}
void main(void)
{
SCON=0X52; // PORT NOI TIEP CHE DO 1; REN = TI = 1
T2CON=0X30; //RCLK=TCLK=1
RCAP2H=255;
RCAP2L=-36; //Toc do baud la 9600
TR2=1;
TMOD = 0X15; // TIMER0 counter CHE DO 1;TIMER1 DINH THOI CHE DO 1
TH1= -46350/256;//TAO THOI GIAN 0,1s
TL1= -46350%256;
TR1=1;
IE=0X88; // CHO PHEP NGAT TIMER 1
IP=0X08;
dem=0;
TH0=TL0=0; // XOA TIMER 0, BAT DAU DEM
putchar(0X0a);
putchar(0X0a);
putchar(0X0d);
chuoi(" ______________DO AN mon VI DIEU KHIEN (de so 16)____________ ");
putchar(0X0d);
putchar(0X0a);
putchar(0X0a);
chuoi(" Giao vien HD: Thay NGUYEN ANH DUNG ");
putchar(0x0a);
putchar(0x0d);
chuoi(" __________________________________________________ __________ ");
putchar(0x0a);
putchar(0x0a);
putchar(0x0d);
chuoi(" CHUONG TRINH DO TAN SO SU DUNG VDK 89S52 ");
putchar(0x0d);
putchar(0x0a);
putchar(0X0a);
while(1)
{
TR0=1;
while(dem<9); //cho dem duoc 1s
f = TH0*256 + TL0; //doi gia tri dem dc sang so thap phan
tanso=f*2.324239;
if(tanso>=367&&tanso<870)
tanso=tanso-265;
hienthi(tanso);
putchar(0x0d);
TH0=TL0=0;
dem=0;
putchar(0x0d);
// putchar(0x0a);
// putchar(0X0a);
}
}
void ngatT1(void) interrupt 3 //moi lan ngat la 0.1s
{
TR1=0;
dem++;
TF1=0;
TH1=-46350/256; //nap lai gia tri cho timer1
TL1=-46350%256;
TR1=1;
}
Comment