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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

有人可以幫我看一下嗎,用定時器控制LED亮滅的一個小程序,但是LED一直亮著

  [復制鏈接]
回帖獎勵 5 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:368428 發表于 2018-7-27 11:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "config.h"
unsigned char T0RH=0;  //T0重載值高字節
unsigned char T0RL=0;  //T0重載值低字節

/******************** IO配置函數 **************************/
void GPIO_config(void)
{
P5M0 = 0;   //設置準雙向口
P5M1 = 0;
}
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp;  //臨時變量
tmp = 11059200 / 12; //定時器計數頻率
tmp = (tmp * ms)/1000 ; //計算所需的計數值
tmp = 65536 - tmp; //計算定時器重載值
tmp = tmp + 33; //補償中斷響應延時造成的誤差
T0RH = (unsigned char)(tmp>>8); //定時器重載值拆分為高低字節
T0RL = (unsigned char)tmp;
TMOD &= 0xF0; //清零 T0 的控制位
TMOD |= 0x01; //配置 T0 為模式 1
TH0 = T0RH; //加載 T0 重載值
TL0 = T0RL;
ET0 = 1; //使能 T0 中斷
TR0 = 1; //啟動 T0
}
void ConfigTimer0(unsigned int ms);
void GPIO_config(void);

/******************** 主函數 **************************/
void main()
{
//unsigned char cnt = 0; //定義一個計數變量,記錄 T0 溢出次數
GPIO_config();
//ConfigTimer0(1000);
while(1)
{
  P55 = ~ P55; //LED 取反:0-->1、1-->0
  ConfigTimer0(1000);
}
}

剛接觸單片機,求大佬幫忙看看。非常感謝!!!!



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

使用道具 舉報

沙發
ID:308437 發表于 2018-7-27 17:30 | 只看該作者
  P55 = ~ P55; //LED 取反:0-->1、1-->0
你既然配置了中斷,這個應該放到中斷服務函數內的。
還有,你檢查一下你硬件電路接好沒有
回復

使用道具 舉報

板凳
ID:123289 發表于 2018-7-27 18:08 | 只看該作者
你再看看定時器的章節。
重點查一查:定時器需不需要不斷地重設置,在什么情況下需要重設置?
回復

使用道具 舉報

地板
ID:221865 發表于 2018-7-27 19:07 | 只看該作者
你的configtimer0()函數幾個機器周期就執行完了,所以你的p55 = ~p55;是一個機器周期執行一次的,通常是1微秒,所以它一直是亮著的。你應該把p55 = ~p55; 放到中斷函數里面,并且在中斷函數內重新裝載初值(模式1)。
回復

使用道具 舉報

5#
ID:368428 發表于 2018-7-27 19:19 | 只看該作者
yousunny 發表于 2018-7-27 17:30
P55 = ~ P55; //LED 取反:0-->1、1-->0
你既然配置了中斷,這個應該放到中斷服務函數內的。
還有,你 ...

請問,修改后的代碼是什么樣的啊?可以幫忙改一下嗎?
非常感謝!!!

回復

使用道具 舉報

6#
ID:319344 發表于 2018-7-27 19:53 | 只看該作者
我說下現在你的程序會是什么工作過程吧,
首先,你配置了GPIO,
然后進入死循環
在死循環中將P55取反,然后配置定時器0
之后定時器會開始計時,計時到你設定值時會進入中斷,但你什么都沒在中斷服務函數中寫,所以
除去保存中斷上下文,跳轉到中斷向量地址,跳轉到中斷服務函數,將堆棧中保存的數據返回(總的來說就是中斷執行過程),其它時間一直在執行P55取反和配置定時器0,看不到燈閃爍是因為單片機處理速度太快了,人眼跟不上,如果你會仿真的話,多運行幾次,再中止,有1/2的概率看到燈是滅的
回復

使用道具 舉報

7#
ID:233552 發表于 2018-7-27 22:00 | 只看該作者
#include <STC15F2K60S2.H>

/******************** IO配置函數 **************************/
void GPIO_config(void)
{
        P5M0 = 0;   //設置準雙向口
        P5M1 = 0;
}
void Timer0Init(void)                //10毫秒@11.0592MHz
{
        AUXR &= 0x7F;                //定時器時鐘12T模式
        TMOD &= 0xF0;                //設置定時器模式
        TMOD |= 0x01;                //設置定時器模式
        TL0 = 0x00;                        //設置定時初值
        TH0 = 0xDC;                        //設置定時初值
        TF0 = 0;                        //清除TF0標志
        TR0 = 1;                        //定時器0開始計時
       
        ET0 = 1;                         //使能 T0 中斷
        EA = 1;                                //開啟全局中斷
}

/******************** 主函數 **************************/
void main(void)
{
        GPIO_config();                //端口設置
        Timer0Init();                //10毫秒@11.0592MHz
        while(1)
        {
        }
}
//定時器0中斷函數,每10ms進一次中斷
void tm0_isr(void) interrupt 1
{
    static int count=0;
       
        TL0 = 0x00;                        //設置定時初值
        TH0 = 0xDC;                        //設置定時初值
        TF0 = 0;                        //清除TF0標志
       
        if(++count>=50)//每50周期燈翻轉一次,一個周期10ms
        {
                count = 0;
                P55 = ~ P55; //LED 取反:0-->1、1-->0
        }
       
}
回復

使用道具 舉報

8#
ID:233552 發表于 2018-7-27 22:02 | 只看該作者
你應該先把中斷學好
回復

使用道具 舉報

9#
ID:380174 發表于 2018-7-28 13:11 | 只看該作者
主函數里面的主循環取反有錯誤
回復

使用道具 舉報

10#
ID:380174 發表于 2018-7-28 13:12 | 只看該作者
P55 = ~ P55; //LED 取反:0-->1、1-->0
主循環喲錯誤
回復

使用道具 舉報

11#
ID:379889 發表于 2018-7-28 13:45 | 只看該作者
第一先看編譯有沒有錯,然后檢查頭文件路徑,查看大小寫或者字符錯誤,逐字檢查原理
回復

使用道具 舉報

12#
ID:380193 發表于 2018-7-28 14:28 | 只看該作者
你的configtimer0()函數幾個機器周期就執行完了,所以你的p55 = ~p55;是一個機器周期執行一次的,通常是1微秒,所以它一直是亮著的。你應該把p55 = ~p55; 放到中斷函數里面,并且在中斷函數內重新裝載初值(模式1)。
回復

使用道具 舉報

13#
ID:380193 發表于 2018-7-28 14:28 | 只看該作者

你的configtimer0()函數幾個機器周期就執行完了,所以你的p55 = ~p55;是一個機器周期執行一次的,通常是1微秒,所以它一直是亮著的。你應該把p55 = ~p55; 放到中斷函數里面,并且在中斷函數內重新裝載初值(模式1)。
回復

使用道具 舉報

14#
ID:380546 發表于 2018-7-29 17:12 | 只看該作者
while(1)
{
  P55 = ~ P55; //LED 取反:0-->1、1-->0
  ConfigTimer0(1000);
}
}看一下這個while的中斷設置
回復

使用道具 舉報

15#
ID:368428 發表于 2018-7-30 16:47 | 只看該作者
曉川55555 發表于 2018-7-27 22:00
#include

/******************** IO配置函數 **************************/

好的,非常感謝!
回復

使用道具 舉報

16#
ID:368428 發表于 2018-7-30 16:48 | 只看該作者
非常感謝大家!
回復

使用道具 舉報

17#
ID:380969 發表于 2018-7-30 17:23 | 只看該作者
取反寫錯了
回復

使用道具 舉報

18#
ID:139945 發表于 2018-7-30 17:44 | 只看該作者
中斷不會寫呀這是
回復

使用道具 舉報

19#
ID:381033 發表于 2018-7-30 21:00 | 只看該作者
p55 = ~p55; 把這句話寫到中斷里面就好
注意一點,定時器方式1需要手動裝載數值
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99热热99| 精品一二三区在线观看 | 午夜精品视频在线观看 | 欧美黄色网 | 草久久 | 精品一区二区三区不卡 | 亚洲视频一区在线观看 | 91精品在线观看入口 | 九九色综合 | 久久久久久国产精品 | 在线免费观看毛片 | 亚洲另类自拍 | 国产黄a一级 | 黄色片网此 | 成人高清网站 | 丁香婷婷在线视频 | 97精品视频在线 | 一区在线视频 | 国产91精品久久久久久久网曝门 | 美国黄色毛片 | 国产乱码精品1区2区3区 | 亚洲色图婷婷 | 欧美国产日韩在线 | 午夜免费网站 | 国产高清在线精品 | 久久久久国产精品 | 午夜性色a√在线视频观看9 | 成人免费视频观看 | 成人久久18免费网站 | 午夜免费福利影院 | 精品国产一区二区三区性色av | 日本不卡高清视频 | 丁香婷婷成人 | 日韩一区二区三区视频在线观看 | 午夜日韩视频 | 日韩精品一区二区三区中文字幕 | www.色综合 | 国产黄色麻豆视频 | 精品国产一区二区三区日日嗨 | 91在线精品视频 | 97超碰在线免费 |