m0_71066814 2023-04-28 00:08 采纳率: 0%
浏览 72
已结题

PWM调光中断加上DHT11程序直接跑飞

利用52单片机制作一个PWM调光台灯,但同时加上一个DHT11温湿度传感器,结果加上DHT11程序直接跑飞,怀疑是PWM的中断问题,该如何解决


```c
//主函数
#include "REG52.H"
#include "INTRINS.H"
#include "SYSTEM.H"
#include "DHT11.H"
#include "KEY.H"
#include "LCD1602.H"
#include "ADC0832.H"

//---------------------------------------------------------------------------------------//
int INTENSITY;
uchar m;
uchar SCALE;
//---------------------------------------------------------------------------------------//
void main(void)
{
    //-------------------------------------------------------------------------------------//
    LCD_INITIAL();
    LCD_OUTPUT(1,0,"TEMP&HUM&INT:",13);
    //DHT_delay_ms(100);
    
    MOD_STATE = 0;
    HUM_STATE = 0;
    m = 0;
    SCALE = 20;
    
    TIME0_INITIAL();
    while(1)   
    {
        //-----------------------------------------------------------------------------------//
        DHT_OUTPUT();
        PHO_OUTPUT();
        DATA_UNITE();
        LCD_OUTPUT(2,0,INPUT_LCD_DATA,15);
        //-----------------------------------------------------------------------------------//
        CHECK_MODE_STATE();
        CHECK_HUM_STATE();
        HUM_CTRL();
        SCALE_CTRL();
    }
}
//---------------------------------------------------------------------------------------//
void TIME0() interrupt 1
{
    TR0 = 0;
    TH0 = 0xEC;
    TL0 = 0x78;
    m++;
    if(m < SCALE)
    {
        PWM = 0;
    }
    else if(m >= SCALE)
    {
        PWM = 1;
    }
    if(m == 40)
    {
        m = 0;
    }
    TR0 = 1;
}

//DHT11
#include "REG52.H"
#include "INTRINS.H"
#include "SYSTEM.H"
#include "DHT11.H"

uchar DHT_OUTPUT_DATA[8];
uchar RH,RL,TH,TL;

//---------------------------------------------------------------------------------------//
void DHT_delay_us(uchar us)
{
    while(--us);
}

//---------------------------------------------------------------------------------------//
void DHT_delay_ms(int ms)
{
    int i;
    for(; ms>0; ms--)
    {
        for(i=125;i>0;i--)
        {;}
    }
}

//---------------------------------------------------------------------------------------//
void DHT_START(void)
{
    DHT_IO = 1;
  DHT_delay_us(2);

  DHT_IO = 0;
  DHT_delay_ms(30);

  DHT_IO = 1;
  DHT_delay_us(30);
}

//---------------------------------------------------------------------------------------//
uchar DHT_BYTE(void)
{
    uchar i,DATA = 0;
  for(i=0; i<8; i++)                                    //´Ó¸ßµ½µÍÒÀ´Î½ÓÊÕ8λÊý¾Ý
  {
        while(!DHT_IO);                                        //µÈ´ý50usµÍµçƽ¹ýÈ¥

    DHT_delay_us(8);                                 //ÑÓʱ60us£¬Èç¹û»¹Îª¸ßÔòÊý¾ÝΪ1£¬·ñÔòΪ0

    DATA<<=1;                                       //ÒÆλʹÕýÈ·½ÓÊÕ8λÊý¾Ý£¬Êý¾ÝΪ0ʱֱ½ÓÒÆλ

    if(DHT_IO == 1)                                   //Êý¾ÝΪ1ʱ£¬Ê¹DATA¼Ó1À´½ÓÊÕÊý¾Ý1
    {
            DATA += 1;
        }

        while(DHT_IO);                                      //µÈ´ýÊý¾ÝÏßÀ­µÍ
    }
    return DATA;
}

//---------------------------------------------------------------------------------------//
void DHT_OUTPUT(void)                                  //½ÓÊÕ40λµÄÊý¾Ý
{
    uchar R_H,R_L,T_H,T_L,REVISE;
    
  DHT_START();
    
  if(DHT_IO == 0)
  {
        while(DHT_IO == 0);                           //µÈ´ýÀ­¸ß
        
    DHT_delay_us(40);                                  //À­¸ßºóÑÓʱ80us
        
    R_H = DHT_BYTE();                                //½ÓÊÕʪ¶È¸ß°Ëλ  
    R_L = DHT_BYTE();                                //½ÓÊÕʪ¶ÈµÍ°Ëλ  
    T_H = DHT_BYTE();                                //½ÓÊÕζȸ߰Ëλ  
    T_L = DHT_BYTE();                                //½ÓÊÕζȵͰËλ
        
    REVISE = DHT_BYTE();                             //½ÓÊÕУÕýλ

    DHT_delay_us(25);                                //½áÊø

    if((R_H+R_L+T_H+T_L) == REVISE)   //УÕý
    {
            RH=R_H;
      RL=R_L;
      TH=T_H;
      TL=T_L;
    }
    //Êý¾Ý´¦Àí
    DHT_OUTPUT_DATA[0]='0'+(RH/10);
    DHT_OUTPUT_DATA[1]='0'+(RH%10);
    DHT_OUTPUT_DATA[2]='R';
    DHT_OUTPUT_DATA[3]='H';
    DHT_OUTPUT_DATA[4]='0'+(TH/10);
    DHT_OUTPUT_DATA[5]='0'+(TH%10);
    DHT_OUTPUT_DATA[6]=0xDF;
        DHT_OUTPUT_DATA[7]=0x43;
    }
}


//LCD1602
#include "REG52.H"
#include "INTRINS.H"
#include "LCD1602.H"
#include "SYSTEM.H"

//---------------------------------------------------------------------------------------//
void CHECK_BUZY(void)
{
    uchar sym;
    
    do
    {
        sym = 0xFF;
        LCD_EN = 0;
        LCD_RS = 0;
        LCD_RW = 1;
        LCD_EN = 1;
        sym = LCD_IO;
    }
    while(sym & 0x80);
    
    LCD_EN = 0;
}

//---------------------------------------------------------------------------------------//
void WRITE_COMMAND(uchar COM)
{
    CHECK_BUZY();
    
    LCD_EN = 0;
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_IO = COM;
    LCD_EN = 1;
    _nop_();
    LCD_EN = 0;
    delay(1);
}

//---------------------------------------------------------------------------------------//
void WRITE_DATA(uchar DATA)
{
    CHECK_BUZY();
    
    LCD_EN = 0;
    LCD_RS = 1;
    LCD_RW = 0;    
    LCD_IO = DATA;
    LCD_EN = 1;
    _nop_();
    LCD_EN = 0;
    delay(1);
}

//---------------------------------------------------------------------------------------//
void LCD_INITIAL(void)
{
    WRITE_COMMAND(0x38);
    WRITE_COMMAND(0x0C);
    WRITE_COMMAND(0x06);
    WRITE_COMMAND(0x01);
    delay(1);
}

//---------------------------------------------------------------------------------------//
void LCD_OUTPUT(uchar ROW, uchar COLUMN, uchar INPUT_LCD_DATA[], uchar N)
{
    uchar i;
    if(ROW == 1)
    {
        WRITE_COMMAND(0x80+COLUMN);
    }
    else
    {
        WRITE_COMMAND(0x80+0x40+COLUMN);
    }
    for(i=0;i<N;i++)
    {
        WRITE_DATA(INPUT_LCD_DATA[i]);
        delay(10);
    }
}

```

  • 写回答

6条回答 默认 最新

  • cyjbj 2023-04-28 16:56
    关注

    你说的程序直接跑飞是开机就跑飞还是运行到某功能时跑飞?固件和dht11的程序和原来的代码资源冲突,堆栈溢出相关,可以单步走一下,看看到具体哪里开始跑飞的

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月28日
  • 修改了问题 4月28日
  • 修改了问题 4月28日
  • 修改了问题 4月28日
  • 展开全部

悬赏问题

  • ¥15 openHarmony 利用c++程序在dayu210开发板上实现拉取RTSP视频流并且在屏幕上显示
  • ¥15 GD32H757的can通信配置
  • ¥20 nist随机数测试的问题
  • ¥20 帮我解决这个项目,thank you各位程序员
  • ¥15 哪位能用ea软件做一下,有偿
  • ¥15 按要求编写汇编语言,并设计仿真电路图
  • ¥15 电脑软件运行次数如何统计
  • ¥15 同一个浏览器打开两个窗口怎么区分会话
  • ¥100 如何编写自己的emmc镜像
  • ¥15 starccm线性内聚力模型