找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1380|回复: 2
打印 上一主题 下一主题
收起左侧

单片机频率计与计算机实现串口通信程序有错误

[复制链接]
跳转到指定楼层
楼主
功能描述:可测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;
}





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:889094 发表于 2021-5-12 01:21 来自手机 | 只看该作者
change函数参数和返回值最好用uchar,一是节约ram一是给P口赋值用
回复

使用道具 举报

板凳
ID:390416 发表于 2021-5-12 08:01 | 只看该作者
串口1打印程序 可以打印3个十六位的变量 波特率9600 http://www.51hei.com/bbs/dpj-201660-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表