功能描述:可测8KHZ以内的频率,并能通过串口实现将频率值发送到电脑上显示
问题:请教串口通信函数怎么可以在主函数中调用,也请指出原函数的错误之处
实验程序及仿真如下
#include <reg51.h>
//四位一体数码管位选
sbit Awei = P1^0;
sbit Bwei = P1^1;
sbit Cwei = P1^2;
sbit Dwei = P1^3;
void jisuan();
void delay(int x);
int change(int x);
unsigned int shu;
void yanchi();
void chuankou();
void INIT();
//字形编码定义
#define SHU_0 0X3F;
#define SHU_1 0X06;
#define SHU_2 0X5B;
#define SHU_3 0X4F;
#define SHU_4 0X66;
#define SHU_5 0X6D;
#define SHU_6 0X7D;
#define SHU_7 0X07;
#define SHU_8 0X7F;
#define SHU_9 0X6F;
int ge=0, shi=0, bai=0, qian=0;
int count = 0, i = 0;
int freq = 0;
int main()
{
ge = 0; shi = 0; bai = 0; qian = 0;
//
TMOD = 0X15;
//
TH0 = 0;
TL0 = 0;
TH1 = (65535 - 50000)/256;
TL1 = (65535 - 50000)%256;
//
IT0 = 1;
EX0 = 1;
//
EA = 1;
ET0 = 1;
ET1 = 1;
//
TR0 = 1;
TR1 = 1;
while(1)
{
//动态显示
jisuan();
Awei = 1; Bwei = 1; Cwei = 1; Dwei = 0;
P2 = change(ge);
delay(10);
P2 = 0X00;
Awei = 1; Bwei = 1; Cwei = 0; Dwei = 1;
P2 = change(shi);
delay(10);
P2 = 0X00;
Awei = 1; Bwei = 0; Cwei = 1; Dwei = 1;
P2 = change(bai);
delay(10);
P2 = 0X00;
Awei = 0; Bwei = 1; Cwei = 1; Dwei = 1;
P2 = change(qian);
delay(10);
P2 = 0X00;
}
}
void service_timer0() interrupt 1 using 1
{
TH0 = 0;
TL0 = 0;
}
void service_timer1() interrupt 3 using 3
{
TH1 = (65535 - 50000)/256;
TL1 = (65535 - 50000)%256;
i++;
if (i == 20)
{
freq =TL0 + TH0*256;
i = 0;
TH0 = 0;
TL0 = 0;
}
}
void jisuan()
{
qian = freq /1000;
bai = (freq%1000)/100;
shi = (freq%100)/10;
ge = freq%10;
}
void delay(int x)
{
int i, j;
for(i = 0; i < x; i++)
for(j = 0; j < 100; j++);
}
int change(int x)
{
int shu;
switch(x)
{
case 0: shu = SHU_0; break;
case 1: shu = SHU_1; break;
case 2: shu = SHU_2; break;
case 3: shu = SHU_3; break;
case 4: shu = SHU_4; break;
case 5: shu = SHU_5; break;
case 6: shu = SHU_6; break;
case 7: shu = SHU_7; break;
case 8: shu = SHU_8; break;
case 9: shu = SHU_9; break;
}
return shu;
}
void yanchi(unsigned int a)
{
while(a--);
}
void INIT()
{
TMOD=0X20;
TR1=1;
TH1=0Xfd;
TL1=0Xfd;
SCON=0X40;
ES=1;
EA=1;
}
void chuankou()
{
unsigned char i;
INIT();
while(1)
{
for(i=0;i<4;i++)
{
SBUF=shu;
delay(1000);
}
while(1);
}
}
void Serial() interrupt 4
{
TI=0;
}
|