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

標題: 51單片機控制直流電機不會加定時器延時程序 [打印本頁]

作者: txy1105    時間: 2021-4-29 09:56
標題: 51單片機控制直流電機不會加定時器延時程序
51單片機控制直流電機,電機驅動模塊為L298N,下面這個程序能控制電機正常變速,想在此基礎上加定時器延時程序,不知道怎么加,有沒有大神幫我看看,謝謝!

#include<reg52.h>

void uart_init();
void qudong (unsigned int t);
sbit en1=P0^0; //l298nen1
unsigned char str ;

void uart_init()         
{
        SCON = 0x50;//設置串口工作方式1
    TMOD = 0x20;//設置計數器工作方式2         
          PCON = 0x00;//即SMOD=1,波特率不加倍
            TH1 = 0xFD;//計數器初值,波特率是9600,晶振為11.0592MHz
            TL1 = 0xFD;          
            ES = 1;//打開接收中斷
            EA = 1;//打開總中斷
        TR1 = 1;//打開計數器
}

void delay(unsigned int xms)         //延時函數
{
        unsigned  int t1, t2 ;
        for(t1=0;t1<xms;t1++)
        for(t2=0;t2<110;t2++);
}

void main()
{
        en1=0;
        uart_init();
        while (1)
        {
                if(str==1)                                         
                        qudong(0) ; //停止
                else if(str==2)                        
                        qudong(10) ; //速度1
                else if(str==3)                                 
                        qudong(15) ; //速度2
                else if(str==4)                                 
                        qudong(20) ; //速度3
}
}                                  
void qudong (unsigned int t)
{
        en1=1;
        delay(t);
        en1=0;
        delay(20-t);  
}

void a(void) interrupt 4
{
        if(RI)
        {
                RI=0;
                str=SBUF;
        }
        }


作者: txy1105    時間: 2021-4-29 10:00
這是自己改的延時,串口輸入1,電機轉動,再輸入其他沒用了

#include<reg52.h>

void uart_init();
void qudong (unsigned int t);
sbit en1=P0^0; //l298nen1
unsigned char str ;
int n=1,t=1;

void uart_init()         
{
        SCON = 0x50;//設置串口工作方式1
    TMOD = 0x20;//設置計數器工作方式2       
        TMOD |= 0x01;
          PCON = 0x00;//即SMOD=1,波特率不加倍
            TH1 = 0xFD;//計數器初值,波特率是9600,晶振為11.0592MHz
            TL1 = 0xFD;         
                ET0=1;  
            ES = 1;//打開接收中斷
            EA = 1;//打開總中斷
            TR1 = 1;//打開計數器
}

void delay(unsigned int xms)         //延時函數
{
        n=xms;       
    TH0=(65536-1000*n)/256;
        TL0=(65536-1000*n)%256;
        TR0=1;
        while(t);
        TR0=0;
}

void main()
{
        en1=0;
        uart_init();
        while (1)
        {
                if(str==1)                                         
                        qudong(0) ; //停止
                else if(str==2)                        
                        qudong(10) ; //速度1
                else if(str==3)                                 
                        qudong(15) ; //速度2
                else if(str==4)                                 
                        qudong(20) ; //速度3
}
}                                  
void qudong (unsigned int t)
{
        en1=1;
        delay(t);
        en1=0;
        delay(20-t);  
}

void a(void) interrupt 4
{
        if(RI)
        {
                RI=0;
                str=SBUF;
        }
        }
void b(void) interrupt 1
{
        t=0;
}
作者: haokey    時間: 2021-4-29 12:04
加定時器延時想實現什么功能?
作者: txy1105    時間: 2021-4-29 12:18
haokey 發表于 2021-4-29 12:04
加定時器延時想實現什么功能?

用串口通信實現直流電機速度控制,速度等級,和電機開關
作者: 狂靈得木桶69    時間: 2021-4-29 15:24
你是想讓電機轉一會兒,延時到了就停嗎?這得用定時器中斷,delay不行,執行delay函數時程序在那里循環,此時電機就不轉了,用定時器中斷,時間到了在中斷里關閉電機
作者: 欣欣    時間: 2021-4-29 15:38
軟件延時換成定時器延時,不然程序一直在delay函數里運行,就沒時間去處理其他事務了。請給系統運行while(1)內程序以時間,謝謝。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1