找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎么让这几个函数同时运行,求分析

[复制链接]
跳转到指定楼层
楼主
ID:840694 发表于 2020-11-8 19:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
#include <reg52.h>
#include <stdio.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LEDR=P1^0;//???
sbit LEDY=P1^1;//???
sbit LEDG=P1^2;//???
sbit DU = P2^6;
sbit WE = P2^7;
uchar  code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
void delay (uint i)
{
uint x,y;                                      
for (x=0;x<i;x++)
for (y=0;y<110;y++);
}

void UARTInit()
{
        SM0 = 0;        SM1 = 1;
        TR1 = 1;
        TMOD |= 0x20;
        TH1 = 0xfd;
        TL1 = 0xfd;
}
uchar k;

void display(uchar i)
{
        uchar  shi, ge;
        shi = i % 100 / 10;        //236 % 100 / 10 = 3
        ge  = i % 10;//236 % 10 =6
                        
        P0 = 0XFF;
        WE = 1;
        P0 = 0XFE;
        WE = 0;
        
        DU = 1;
        P0 = tabel[shi];//
        DU = 0;
        delay(5);

        //???λ?????
        P0 = 0XFF;//???????
        WE = 1;//??λ???????
        P0 = 0XFD; //1111 1101
        WE = 0;//????λ?????
        
        DU = 1;//???????????
        P0 = tabel[ge];//
        DU = 0;//??????????
        delay(5);

}
//?????0?????
void timer0Init()
{
        TR0 = 1;         //????????0
        TMOD = 0X01; //???????????1??16λ???????????
        TH0 =(65535-46082 ) / 256;
        TL0 =(65535-46082 ) % 256; //???50ms
}

void main()


{

         UARTInit();
        {
                TI = 1;
                puts("?????");
                while(!TI);
                TI = 0;
                delay(15000);
                TI= 1;
                puts("?????");
                while(!TI);
                TI=0;
                delay(3000);
                TI=1;
                puts("?????");
                delay(10000);
                TI=0;
               }
LEDR=0;

{        
        uchar mSec, Sec;//????????????
        Sec=15;
        timer0Init();//?????0?????
        while(1)
        {
                if(TF0 == 1)//?ж???????
                {
                        TF0 = 0;//?????????????λ
                    TH0 =(65535-46082 ) / 256;
                        TL0 = (65535-46082) % 256; //???50ms               
                        mSec++;//50ms??
                        if(mSec == 20)
                        {
                                mSec = 0;                                
                                Sec--;//1?????
                        }                                       
                }
                display(Sec); //????????????
        }        
}
delay(12000);
LEDR=1;
LEDR=0;
delay(250);
LEDR=1;
delay(250);
LEDR=0;
delay(250);
LEDR=1;
delay(250);
LEDR=0;
delay(250);
LEDR=1;
delay(250);
LEDR=0;
delay(250);
LEDR=1;
delay(250);
LEDR=0;
delay(250);
LEDR=1;
delay(250);
LEDR=0;
delay(250);
LEDR=1;
delay(250);

LEDY=0;
delay(3000);
LEDY=1;
LEDG=0;
delay(10000);
for(k=0;k<3;k++);
{
LEDG=0;
delay(250);
LEDG=1;
delay(250);
LEDG=0;
delay(250);
LEDG=1;
delay(250);
LEDG=0;
delay(250);
LEDG=1;
delay(250);
LEDG=0;
delay(250);
LEDG=1;
delay(250);
LEDG=0;
delay(250);
LEDG=1;
delay(250);
LEDG=0;
delay(250);
LEDG=1;
delay(250);
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:472390 发表于 2020-11-9 11:27 | 只看该作者
程序不可能同时执行的,都是挨个执行。即使加入操作系统也是挨个执行,只是从宏观上看好像是在并行执行而已。单片机推荐使用定时器设置不同的时间标志位,进行任务的分配。比如设置10毫秒的定时器时基,然后在定时器中用一个变量进行加加,当这个变量等于10或者20 的时候,设置一个标志位,在主函数中检测这个标志位即可完成定时器对任务的分配。切记分配的函数执行时间不能超过设置的调度时间,否则调度任务将毫无意义。
回复

使用道具 举报

板凳
ID:739545 发表于 2020-11-9 11:43 | 只看该作者
已经在运行了,怎么叫同时运行,不知道表达什么意思
回复

使用道具 举报

地板
ID:626055 发表于 2020-11-9 15:38 | 只看该作者
楼主想要多线程运行。
单片机中不得行哦。
回复

使用道具 举报

5#
ID:840694 发表于 2020-11-9 17:22 | 只看该作者
江上远帆 发表于 2020-11-9 11:27
程序不可能同时执行的,都是挨个执行。即使加入操作系统也是挨个执行,只是从宏观上看好像是在并行执行而已 ...

有点明白了,谢谢
回复

使用道具 举报

6#
ID:840694 发表于 2020-11-9 17:23 | 只看该作者
T_Trigger 发表于 2020-11-9 15:38
楼主想要多线程运行。
单片机中不得行哦。

哦哦,主要没学过c,一直摸黑走路
回复

使用道具 举报

7#
ID:414556 发表于 2020-11-10 09:51 | 只看该作者
要想“同时”就不要使用程序延时,延时用定时中断处理就有“同时”的效果。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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