久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1127|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

求教,蘿麗單向有刷移植到8g1k08a單片機(jī),輸出不正常

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1101801 發(fā)表于 2023-12-4 17:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
首先,小弟是真小白,完全靠蒙。
根據(jù)上次改點(diǎn)火的經(jīng)驗(yàn),改了部分程序,輸出有反應(yīng)。


油門(mén)最低0v……推15% led閃1.6v……推89% led亮3.2v。期間亮度無(wú)變化(看不出有pwm效果)

推油門(mén)過(guò)程,萬(wàn)用表測(cè)得只有0v、1.6v和3.2v三個(gè)電平(這樣叫不知道對(duì)不對(duì)),沒(méi)有線性變化。

問(wèn)題1:怎么改?才能線性變化。
問(wèn)題2:15w104運(yùn)行頻率是12m,換8g1k改成24m甚至35m,又該怎么改。

源碼如下:

#include<stc8g1k08a.h>
#define u8 unsigned char
#define u16 unsigned int

//sfr P3M1=0xb1;
//sfr P3M0=0xb2;

//sfr IAP_DATA=0xc2;
//sfr IAP_ADDRH=0xc3;
//sfr IAP_ADDRL=0xc4;
//sfr IAP_CMD=0xc5;
//sfr IAP_TRIG=0xc6;
//sfr IAP_CONTR=0xc7;

//sfr AUXR=0x8e;
//sfr T2H=0xd6;
//sfr T2L=0xd7;
//sfr IE2=0xaf;

sbit LED=P3^2;
sbit PWM=P3^3;
sbit IN=P5^4;

u8  H_l,H_h,L_l,L_h;
u16 time,proportion,tt,MAX,min,k;               //min改MIN,編譯會(huì)語(yǔ)法錯(cuò)誤,什么鬼
u8 low,top,ok,lose,calabration,MARK1,MARK2,over=1,error;
bit turn;

void Delay1ms()                //@12.000MHz
{
        unsigned char i, j;

        i = 12;
        j = 169;
        do
        {
                while (--j);
        } while (--i);
}

void delay(u16 t)
{
        while(t--)
        Delay1ms();
}

u8 EEPROM_read(u8 address)
{
        IAP_CMD=0x01;
        IAP_ADDRH=0;
        IAP_ADDRL=address;
        IAP_TRIG=0x5a;
        IAP_TRIG=0xa5;
        return IAP_DATA;
}

void EEPROM_write(u8 address,u8 byte)
{
        IAP_CMD=0x02;
        IAP_DATA=byte;
        IAP_ADDRH=0;
        IAP_ADDRL=address;
        IAP_TRIG=0x5a;
        IAP_TRIG=0xa5;
        
}

void EEPROM_clean(u8 address)
{
        IAP_CMD=0x03;
        IAP_ADDRH=0;
        IAP_ADDRL=address;
        IAP_TRIG=0x5a;
        IAP_TRIG=0xa5;
}

void DATA_read()
{
        IAP_CONTR=0x82;
        MARK1=EEPROM_read(0);
        MARK2=EEPROM_read(1);
        MAX=EEPROM_read(2);
        MAX<<=8;
        MAX+=EEPROM_read(3);
        min=EEPROM_read(4);
        min<<=8;
        min+=EEPROM_read(5);
        IAP_CONTR=0;
}

void DATA_save()
{
        IAP_CONTR=0x82;
        EEPROM_clean(0);
        EEPROM_write(0,0x0f);
        EEPROM_write(1,0xa5);
        EEPROM_write(2,MAX>>8);
        EEPROM_write(3,MAX);
        EEPROM_write(4,MIN>>8);
        EEPROM_write(5,min);
        IAP_CONTR=0;
}

void measure()
{
        time=0;
        TL0=0,TH0=0;
        while(!IN);
        TR0=1;
        while(IN);
        TR0=0;
        time=TH0;
        time<<=8;
        time+=TL0;               
}

void LED_flash(u8 m)
{
        while(m--)
        {
                LED=1;delay(50);
                LED=0;delay(50);
        }
}


void initial()
{
        u8 i;
        P3M0 = 0xff; P3M1 = 0x00;                                 
  P5M0 = 0x00; P5M1 = 0x00;
  P3=0x0c;                                 
  TMOD=0x11;        //T0、T1工作模式12T
  TL0=0;
  TH0=0;
  TL1=0;
  TH1=0;
        delay(100);


        measure();
        measure();
        measure();
        measure();
        measure();


        while(PCON)
        {
        PCON=0,delay(10);                          //低壓保護(hù),如果1S電池的電壓低于
        }                                                          //下載時(shí)的設(shè)定值,則在此死循環(huán)

        
        

        DATA_read();
        if(MARK1!=0x0f||MARK2!=0xa5)//新增 16bit驗(yàn)證,降低錯(cuò)誤率
        {
               
                MAX=1950;min=1000;//新增 開(kāi)機(jī)自帶1ms-2ms標(biāo)準(zhǔn)行程
               
        }
        
        over=1;
        while(over)
        {
                measure();
               
                if(time>1700)//重新校準(zhǔn)行程判斷
                {
                        i++;
                        if(i>100)over=0,calabration=1;
                }
                else                                   //
                {
                        if(time<min+100)over=0;
                }
        }        
        
        
        if(MAX>2200||min<800)//新增 數(shù)據(jù)驗(yàn)證,降低錯(cuò)誤率
        {
                calabration=1;
                if(MAX<1700||min>1300)calabration=1;
        }

        if(calabration)
        {
                while(over)
                {
                        measure();
                        if(time>1700)over=0;
                }
                delay(1000);
                LED_flash(10);
                measure();
                measure();
                if(time>800&&time<2200)MAX=time;
                else error=1;         
               
                over=1;
                while(over)
                {
                        measure();
                        if(time<1300)over=0;
                }         
                delay(1000);
                LED_flash(10);
                measure();
                measure();
                if(time>800&&time<2200)min=time;
                else error=1;

                if(error==0)DATA_save();        

        }

               
}

main()
{
        initial();
        k=MAX-min;
        IE=0x80;
        ET1=1;           //開(kāi)T1中斷

        while(1)
        {
                 measure();
                if(lose)
                {
                        delay(1000);
                        measure();
                        measure();
                }
               
                if(time>800&&time<2260)
                {
                        
                        
                        ok=1;lose=0;TR1=1;


                        
                        if(time>MAX-20)time=MAX-20,top=1;
                        else top=0;
                        if(time<min+100)time=min+100,low=1;
                        else low=0;
        
                        proportion=(long)(time-min)*1000/k;
                        H_l=65535-proportion ;        
                        H_h=((65535-proportion)>>8);
                        L_l=64535+proportion;
                        L_h=((64535+proportion)>>8);
                }
                                 

        }
}

void et1()interrupt 3
{

        turn=!turn;
  if(turn)
        {
                if(top)PWM=1,T2L=0x0b,T2H=0xfe;
                else PWM=0,T2L=H_l,T2H=H_h;
        }
        else
        {
                if(low)PWM=0,T2L=0x0b,T2H=0xfe;
                else PWM=1,T2L=L_l,T2H=L_h;
        }

        LED=PWM;//新增LED亮度隨油門(mén)變化
        
        tt++;
        if(ok)tt=0;

        else {if(tt>2000)tt=2000,PWM=0,turn=0,TR1=0,LED=0,lose=1;}
        ok=0;


}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91中文字幕在线观看 | 国产精品1区2区 | 久久久蜜臀国产一区二区 | 天堂一区 | 国产精品不卡一区 | 久久国产精品无码网站 | www国产成人免费观看视频,深夜成人网 | 国产精品久久久久久久久久免费 | 日韩欧美三区 | 成人精品在线观看 | 黄a网站| 久久精品成人 | 国产高清无av久久 | 91精品国产综合久久精品 | 国产成人精品一区二区三区在线 | 国产一区二区三区精品久久久 | 91精品国产综合久久久亚洲 | 91国自产| 国产在线资源 | 久久成人精品 | 欧美一级免费黄色片 | 国产精品呻吟久久av凹凸 | 最新中文字幕在线 | 毛片99| 99久久久国产精品免费消防器 | 成人一区二区三区 | 免费一区二区在线观看 | 亚洲一区中文字幕 | 看av片网站 | 国产久| 国产亚洲精品成人av久久ww | 欧美久久久久 | 成人免费观看视频 | 日韩不卡一区二区 | 91免费看片神器 | 欧美日韩精品 | 91看片网 | 成人免费看黄 | 一区二区中文字幕 | 夜夜操天天干 | 国产精品亚洲第一区在线暖暖韩国 |