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

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

QQ登錄

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

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

51掉電模式下,紅外頭,INT1外部中斷喚醒,需要遙控器按2次的問(wèn)題。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:70095 發(fā)表于 2014-12-7 17:08 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)用的是STC12C5A60S2,晶振11.0592MHz。

進(jìn)入掉電模式的流程圖:

故障表現(xiàn):進(jìn)入wile循環(huán)后,已經(jīng)進(jìn)入掉電模式后,液晶屏?xí)欢〞r(shí)自動(dòng)的出現(xiàn)輸出的字符"D",或1分鐘,或5分鐘,或10分鐘(根據(jù)代碼會(huì)出現(xiàn)字符“D”是表示外部中斷喚醒,進(jìn)入失?)。紅外遙控器按一次只會(huì)輸出一個(gè)“D”,無(wú)法完成整個(gè)解碼過(guò)程,連續(xù)按2次解碼正常。請(qǐng)問(wèn)這是什么問(wèn)題(下面有完整的電路圖,源代碼)?謝謝!

電路圖:點(diǎn)擊可放大


----
C源代碼:


/*STC12C5A60S2 11.0592MHz*/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit rs=P3^6; //1602數(shù)據(jù)/命令
sbit e=P3^7; //1602使能控制
sbit dyled=P0^0; //電源指示燈及用作測(cè)試
sbit j=P2^0; //繼電器
sbit IR_INPUT = P3^3; //1838紅外接收引腳

bit irflag = 0; //紅外接收標(biāo)志,收到一幀正確數(shù)據(jù)后置1

unsigned char ircode[4]; //紅外代碼接收
unsigned char disp[11];
unsigned char code Tab[16]="0123456789ABCDEF";

void InitInfrared()
{   
    IR_INPUT = 1;
    TMOD &= 0X0F;
    TMOD |= 0x10;
    TR1 = 0;
    ET1 = 0;
    IT1 = 1;
    EX1 = 1;
}
unsigned int GetHighTime()
{
    TH1 = 0;
    TL1 = 0;
    TR1 = 1;
    while(IR_INPUT)
    {
        if(TH1 > 0x40)
        {
            break;
        }
    }
    TR1 = 0;

    return(TH1 * 256 + TL1);
}

unsigned int GetLowTime()
{
    TH1 = 0;
    TL1 = 0;
    TR1 = 1;
    while(!IR_INPUT)
    {
        if(TH1 > 0x40)
        {
            break;
        }
    }
    TR1 = 0;

    return(TH1 * 256 + TL1);
}
void EXINT1_ISR() interrupt 2 //TNT1中斷 紅外一體接收頭
{
    unsigned char i, j;
    unsigned int time;
    unsigned char byt;

    time = GetLowTime();
    if((time <7833) || (time > 8755))      
    {
        IE1 = 0;
        return;   
    }

    time = GetHighTime();
    if((time<3686) || (time > 4608))
    {
        IE1 = 0;
        return;
    }

    dyled=0; //遙控器按下按鍵,掉電喚醒后,程序到這里終止(喚醒后的一瞬間無(wú)晶起振或是起振不及時(shí)導(dǎo)致?)

    for(i=0; i<4; i++)
    {
        for(j=0; j<8; j++)
        {
            time = GetLowTime();
            if((time<313) ||(time >718))
            {
                IE1 = 0;
                return;
            }
            time = GetHighTime();
            if((time>313) && (time <718))
            {
                byt >>= 1;   
            }
            else if((time>1345) && (time<1751))
            {
                byt >>= 1;
                byt |= 0x80;
            }
            else
            {
                IE1 = 0;
                return;
            }
        }
        ircode[ i] = byt;
    }
    irflag = 1;
    IE1 = 0;
}

void delay_50us(uint t) //延時(shí)
{
    uint j;
    for(;t>0;t--)
    for(j=6245;j>0;j--);
}

void write_com(uchar com) //液晶屏寫(xiě)指令
{
    e=0;
    rs=0;
    P1=com;
    delay_50us(10);
    e=1;
    delay_50us(20);
    e=0;   
}

void write_data(uchar dat) //液晶屏寫(xiě)數(shù)據(jù)
{
    e=0;
    rs=1;
    P1=dat;
    delay_50us(10);
    e=1;
    delay_50us(20);
    e=0;   
}

void init() //液晶屏初始化
{
    delay_50us(300);
    write_com(0x38);
    delay_50us(100);
    write_com(0x38);
    delay_50us(100);
    write_com(0x38);
    delay_50us(100);
    write_com(0x38);
    write_com(0x38);
    write_com(0x08);
    write_com(0x01);
    write_com(0x06);
    write_com(0x0c);
}

void main(void)
{
    EA = 1; //開(kāi)總中斷
    InitInfrared(); //初始化紅外功能
    init(); //液晶屏初始化
   while (1)
   {
        if (irflag)  //接收到紅外數(shù)據(jù)時(shí)刷新顯示
        {
            irflag = 0;
               
            write_com(0x01); //清屏
            delay_50us(10);

            write_com(0x80); //定位寫(xiě)出位置

            disp[0]=Tab[ircode[0]/16]; //二進(jìn)制到十六進(jìn)制賦值給紅外碼數(shù)組
            disp[1]=Tab[ircode[0]%16];
            disp[2]='-';
            disp[3]=Tab[ircode[1]/16];
            disp[4]=Tab[ircode[1]%16];
            disp[5]='-';
            disp[6]=Tab[ircode[2]/16];
            disp[7]=Tab[ircode[2]%16];
            disp[8]='-';
            disp[9]=Tab[ircode[3]/16];
            disp[10]=Tab[ircode[3]%16];
            
            write_data(disp[0]); //disp紅外碼數(shù)組,輸出到1602液晶屏
            delay_50us(5);
            write_data(disp[1]);
            delay_50us(5);
            write_data(disp[2]);
            delay_50us(5);
            write_data(disp[3]);
            delay_50us(5);
            write_data(disp[4]);
            delay_50us(5);
            write_data(disp[5]);
            delay_50us(5);
            write_data(disp[6]);
            delay_50us(5);
            write_data(disp[7]);
            delay_50us(5);
            write_data(disp[8]);
            delay_50us(5);
            write_data(disp[9]);
            delay_50us(5);
            write_data(disp[10]);
            delay_50us(5);

            write_com(0x80+0x40);
            delay_50us(5);
            write_data(disp[4]);
            delay_50us(5);

            if((disp[0] == '4') && (disp[4] == 'C') && (disp[6] == '1') && (disp[7] == '4'))
            {
                dyled=~dyled;
                j=~j; //繼電器響應(yīng)紅外按鍵信號(hào)
            }
        }
        dyled=1;
        PCON = 0X02; //掉電模式
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
               
        delay_50us(5);
        write_data(' ');
        delay_50us(5);
        write_data('D'); //已經(jīng)進(jìn)入掉電模式后,液晶屏?xí)欢〞r(shí)出現(xiàn)輸出的字符"D",或5秒 或7秒 或20秒(進(jìn)入失?)
        dyled=1;
        //delay_50us(50);
    }
}

----
STC12C5A60S2官方的掉電模式代碼:

#include "reg51.h"
#include "intrins.h"

//External interrupt0 service routine
void exint1() interrupt 2           //(location at 0013H)
{
}

void main()
{
    IT1 = 1;                        //set INT1 int type (1:Falling 0:Low level)
    EX1 = 1;                        //enable INT1 interrupt
    EA = 1;                         //open global interrupt switch

    while (1)
    {
        INT1 = 1;                   //ready read INT1 port
        while (!INT1);              //check INT1
        _nop_();
        _nop_();
        PCON = 0x02;                //MCU power down
        _nop_();
        _nop_();
        P1++;
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:70094 發(fā)表于 2014-12-7 17:18 | 只看該作者
我也是菜鳥(niǎo)
回復(fù)

使用道具 舉報(bào)

板凳
ID:67992 發(fā)表于 2014-12-8 23:01 | 只看該作者
紅外解碼部分有問(wèn)題,換一個(gè)解碼程序就可以了。
回復(fù)

使用道具 舉報(bào)

地板
ID:69706 發(fā)表于 2014-12-9 09:09 | 只看該作者
學(xué)習(xí)中。。。。。。。。。
回復(fù)

使用道具 舉報(bào)

5#
ID:69946 發(fā)表于 2014-12-9 17:50 | 只看該作者
程序原因,鍵盤掃描程序的問(wèn)題
回復(fù)

使用道具 舉報(bào)

6#
ID:67992 發(fā)表于 2014-12-9 22:01 | 只看該作者
我推翻之前的論斷,不是紅外程序的原因。查了下資料,
回復(fù)

使用道具 舉報(bào)

7#
ID:67992 發(fā)表于 2014-12-9 22:07 | 只看該作者
我推翻之前的論斷,不是紅外程序的原因。查了下資料,空閑模式可用,掉電由于要重新啟動(dòng)振蕩器須時(shí)間,會(huì)導(dǎo)致紅外解碼失敗,找不到好辦法。

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

8#
ID:119355 發(fā)表于 2019-5-12 18:01 | 只看該作者
我也遇到這個(gè)問(wèn)題了,感覺(jué)是宋老師這個(gè)定時(shí)器計(jì)時(shí)喚醒需要時(shí)間的問(wèn)題,無(wú)奈換了解碼程序就正常了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区,视频 | 欧美精品在线免费 | 久久99网站| 亚洲在线久久 | 欧美久久久久久久久 | 欧美性猛片aaaaaaa做受 | 国产一区二区观看 | 亚洲综合视频一区 | 天天操天天干天天曰 | 国产成人区 | 久久亚洲一区二区三区四区 | 人人爽人人草 | 天天夜天天操 | 中文字幕一区二区三区四区五区 | 欧美精品成人一区二区三区四区 | 国产91久久精品一区二区 | 欧美 日韩 中文 | 欧美精品一区二区三区蜜桃视频 | 成人福利视频网站 | 欧美黑人一区二区三区 | 天天艹天天干天天 | 精品欧美一区二区三区久久久小说 | 亚洲国产精品激情在线观看 | 刘亦菲国产毛片bd | 亚洲a视| 一区二区三区在线观看视频 | 久热伊人 | 欧美一区二区三区在线观看 | av在线免费观看不卡 | 亚洲国产精品久久久久秋霞不卡 | 日韩免费看视频 | 免费黄色网址视频 | 在线一区二区三区 | 久久国产精品一区 | 国产在线不卡视频 | 日韩精品一区二区三区 | 国产一区在线免费 | 91精品久久久久久久久 | 亚洲一区 | 中文字幕色站 | 欧美在线观看一区 |