欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2387|回復: 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 單片機教程網

快速回復 返回頂部 返回列表