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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1543|回復: 6
打印 上一主題 下一主題
收起左側

為什么這個單片機程序無法用紅外控制燈泡的PWM

[復制鏈接]
跳轉到指定樓層
樓主
ID:1002032 發表于 2022-12-4 17:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
為什么我一初始化PWM(使用pwm_init(0XFF,0XF6,100,0);這個函數)就無法再接收來自紅外的控制了呢!

單片機源程序如下:
#include <reg52.h>
#include <intrins.h>
#include "public.h"
#include "pwm.h"
sbit LED=P1^0;
u8 pwmdata=0;
u8 rec_data;
u8 duty=0;
u8 i;
void UART_Init()
{
        EA = 1;        //打開總中斷
        ES = 1; //打開串口中斷
        SM0 = 0;        SM1 = 1;//串口工作方式1,8位UART波特率可變
        REN = 1;//串口允許接收
        TR1 = 1;//啟動定時器1
        TMOD |= 0x20;//定時器1,工作模式2 8位自動重裝
        TH1 = 0xfd;
        TL1 = 0xfd;//設置比特率9600
}


void main()
{
                UART_Init();
                //pwm_init(0XFF,0XF6,100,0);
while(1)
{

//        duty=30+pwmdata*20;
//        pwm_set_duty_cycle(duty);//設置占空比

}

}

void uart() interrupt 4 //串口通信中斷函數
{
        i=!i;
        RI = 0;                        //清除接收中斷標志位
        rec_data=SBUF;        //存儲接收到的數據
        if(rec_data==1)
        {
         if(i==1)
         {
          LED=1;
         }
                else
                {
                 LED=0;
                }        
        }
                if(rec_data==11)
        {
                delay_ms(20);//短暫延時
         pwmdata++;
               
        }
                        if(rec_data==12)
        {
                delay_ms(20);//短暫延時
         pwmdata--;         
        }
                                
}


PWM.C
#include "pwm.h"

//全局變量定義
u8 gtim_h=0;//保存定時器初值高8位
u8 gtim_l=0;//保存定時器初值低8位
u8 gduty=0;//保存PWM占空比
u8 gtim_scale=0;//保存PWM周期=定時器初值*tim_scale


/*******************************************************************************
* 函 數 名       : pwm_init
* 函數功能                 : PWM初始化函數
* 輸    入       : tim_h:定時器高8位
                                   tim_l:定時器低8位
                                   tim_scale:PWM周期倍數:定時器初值*tim_scale
                                   duty:PWM占空比(要小于等于tim_scale)
* 輸    出             : 無
*******************************************************************************/
void pwm_init(u8 tim_h,u8 tim_l,u16 tim_scale,u8 duty)
{
        gtim_h=tim_h;//將傳入的初值保存在全局變量中,方便中斷函數繼續調用
        gtim_l=tim_l;
        gduty=duty;
        gtim_scale=tim_scale;

        TMOD|=0X01;        //選擇為定時器0模式,工作方式1
        TH0 = gtim_h;        //定時初值設置
        TL0 = gtim_l;               
        ET0=1;//打開定時器0中斷允許
        EA=1;//打開總中斷
        TR0=1;//打開定時器
}

/*******************************************************************************
* 函 數 名       : pwm_set_duty_cycle
* 函數功能                 : PWM設置占空比
* 輸    入       : duty:PWM占空比(要小于等于tim_scale)
* 輸    出             : 無
*******************************************************************************/
void pwm_set_duty_cycle(u8 duty)
{
        gduty=duty;        
}

void pwm(void) interrupt 1        //定時器0中斷函數
{
        static u16 time=0;

        TH0 = gtim_h;        //定時初值設置
        TL0 = gtim_l;
        
        time++;
        if(time>=gtim_scale)//PWM周期=定時器初值*gtim_scale,重新開始計數
                time=0;
        if(time<=gduty)//占空比        
                PWM=1;
        else
                PWM=0;               
}

PWM.h

#ifndef _pwm_H
#define _pwm_H

#include "public.h"


//管腳定義
sbit PWM=P1^0;

//變量聲明
extern u8 gtim_scale;

//函數聲明
void pwm_init(u8 tim_h,u8 tim_l,u16 tim_scale,u8 duty);
void pwm_set_duty_cycle(u8 duty);

#endif





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

使用道具 舉報

沙發
ID:68189 發表于 2022-12-4 22:19 | 只看該作者
以上的代碼中,沒有看到紅外接收的相關內容!
PWM使用了定時器0   串口使用了定時器1,,,請問你的紅外接收是如何實現的呢??????
回復

使用道具 舉報

板凳
ID:77589 發表于 2022-12-5 09:38 | 只看該作者
你的PWM使用了Timer0,而且開啟Timer0的中斷,但是你的程序好像沒有處理這個中斷。
這個中斷的優先級比UART的優先級高,導致UART沒法正常接收數據。
回復

使用道具 舉報

地板
ID:584814 發表于 2022-12-5 14:54 | 只看該作者
貌似程序中只看到有個受控的LED燈,然后一切都是自動的
回復

使用道具 舉報

5#
ID:1002032 發表于 2022-12-5 21:40 | 只看該作者
Longan.Wang 發表于 2022-12-5 09:38
你的PWM使用了Timer0,而且開啟Timer0的中斷,但是你的程序好像沒有處理這個中斷。
這個中斷的優先級比UAR ...

謝謝謝謝謝就是這個原因!!!!
回復

使用道具 舉報

6#
ID:1002032 發表于 2022-12-5 21:40 | 只看該作者
wpppmlah 發表于 2022-12-4 22:19
以上的代碼中,沒有看到紅外接收的相關內容!
PWM使用了定時器0   串口使用了定時器1,,,請問你的紅外接收是 ...

紅外接收的程序忘記放了!已經解決!感謝回答
回復

使用道具 舉報

7#
ID:1002032 發表于 2022-12-5 21:41 | 只看該作者
man1234567 發表于 2022-12-5 14:54
貌似程序中只看到有個受控的LED燈,然后一切都是自動的

OKK紅外接收的程序忘記放了!問題已經解決感謝回答!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人一区二区 | 91视频中文 | 久久久久久国产精品 | 久久ww| 国产成人免费网站 | 精品国产久 | 天堂素人约啪 | 欧美日韩在线播放 | 国产精品亚洲综合 | 伊人网综合 | 精品国产欧美一区二区 | 久久99网| 国产探花在线精品一区二区 | 国产精品无码专区在线观看 | 日本一区二区三区视频在线 | a级毛片毛片免费观看久潮喷 | 午夜视频在线免费观看 | 国产精品久久久久久久久久久久 | 亚洲一区二区三区在线视频 | 欧美精品一区在线发布 | 免费精品视频 | 黄色av一区 | 久久成人一区 | 日韩一区二区三区在线视频 | 久久久www成人免费无遮挡大片 | 91文字幕巨乱亚洲香蕉 | 天天爽网站 | 亚洲一区 中文字幕 | www.97zyz.com| 国产精品99久久久久久久久 | 成人在线精品视频 | 免费黄色特级片 | 中文字幕 亚洲一区 | 成年男女免费视频网站 | 久久69精品久久久久久久电影好 | 国产精品美女在线观看 | 国产精品一区二区在线观看 | 国产欧美一区二区三区在线播放 | 欧美夜夜 | 成人免费区一区二区三区 | 国产精品永久在线观看 |