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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5174|回復: 19
收起左側(cè)

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

  [復制鏈接]
回帖獎勵 5 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
ID:368428 發(fā)表于 2018-7-27 11:21 | 顯示全部樓層 |閱讀模式
#include "config.h"
unsigned char T0RH=0;  //T0重載值高字節(jié)
unsigned char T0RL=0;  //T0重載值低字節(jié)

/******************** IO配置函數(shù) **************************/
void GPIO_config(void)
{
P5M0 = 0;   //設置準雙向口
P5M1 = 0;
}
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp;  //臨時變量
tmp = 11059200 / 12; //定時器計數(shù)頻率
tmp = (tmp * ms)/1000 ; //計算所需的計數(shù)值
tmp = 65536 - tmp; //計算定時器重載值
tmp = tmp + 33; //補償中斷響應延時造成的誤差
T0RH = (unsigned char)(tmp>>8); //定時器重載值拆分為高低字節(jié)
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);

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

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



回復

使用道具 舉報

ID:308437 發(fā)表于 2018-7-27 17:30 | 顯示全部樓層
  P55 = ~ P55; //LED 取反:0-->1、1-->0
你既然配置了中斷,這個應該放到中斷服務函數(shù)內(nèi)的。
還有,你檢查一下你硬件電路接好沒有
回復

使用道具 舉報

ID:123289 發(fā)表于 2018-7-27 18:08 | 顯示全部樓層
你再看看定時器的章節(jié)。
重點查一查:定時器需不需要不斷地重設置,在什么情況下需要重設置?
回復

使用道具 舉報

ID:221865 發(fā)表于 2018-7-27 19:07 | 顯示全部樓層
你的configtimer0()函數(shù)幾個機器周期就執(zhí)行完了,所以你的p55 = ~p55;是一個機器周期執(zhí)行一次的,通常是1微秒,所以它一直是亮著的。你應該把p55 = ~p55; 放到中斷函數(shù)里面,并且在中斷函數(shù)內(nèi)重新裝載初值(模式1)。
回復

使用道具 舉報

ID:368428 發(fā)表于 2018-7-27 19:19 | 顯示全部樓層
yousunny 發(fā)表于 2018-7-27 17:30
P55 = ~ P55; //LED 取反:0-->1、1-->0
你既然配置了中斷,這個應該放到中斷服務函數(shù)內(nèi)的。
還有,你 ...

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

回復

使用道具 舉報

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

使用道具 舉報

ID:233552 發(fā)表于 2018-7-27 22:00 | 顯示全部樓層
#include <STC15F2K60S2.H>

/******************** IO配置函數(shù) **************************/
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;                                //開啟全局中斷
}

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

使用道具 舉報

ID:233552 發(fā)表于 2018-7-27 22:02 | 顯示全部樓層
你應該先把中斷學好
回復

使用道具 舉報

ID:380174 發(fā)表于 2018-7-28 13:11 | 顯示全部樓層
主函數(shù)里面的主循環(huán)取反有錯誤
回復

使用道具 舉報

ID:380174 發(fā)表于 2018-7-28 13:12 | 顯示全部樓層
P55 = ~ P55; //LED 取反:0-->1、1-->0
主循環(huán)喲錯誤
回復

使用道具 舉報

ID:379889 發(fā)表于 2018-7-28 13:45 | 顯示全部樓層
第一先看編譯有沒有錯,然后檢查頭文件路徑,查看大小寫或者字符錯誤,逐字檢查原理
回復

使用道具 舉報

ID:380193 發(fā)表于 2018-7-28 14:28 | 顯示全部樓層
你的configtimer0()函數(shù)幾個機器周期就執(zhí)行完了,所以你的p55 = ~p55;是一個機器周期執(zhí)行一次的,通常是1微秒,所以它一直是亮著的。你應該把p55 = ~p55; 放到中斷函數(shù)里面,并且在中斷函數(shù)內(nèi)重新裝載初值(模式1)。
回復

使用道具 舉報

ID:380193 發(fā)表于 2018-7-28 14:28 | 顯示全部樓層

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

使用道具 舉報

ID:380546 發(fā)表于 2018-7-29 17:12 | 顯示全部樓層
while(1)
{
  P55 = ~ P55; //LED 取反:0-->1、1-->0
  ConfigTimer0(1000);
}
}看一下這個while的中斷設置
回復

使用道具 舉報

ID:368428 發(fā)表于 2018-7-30 16:47 | 顯示全部樓層
曉川55555 發(fā)表于 2018-7-27 22:00
#include

/******************** IO配置函數(shù) **************************/

好的,非常感謝!
回復

使用道具 舉報

ID:368428 發(fā)表于 2018-7-30 16:48 | 顯示全部樓層
非常感謝大家!
回復

使用道具 舉報

ID:380969 發(fā)表于 2018-7-30 17:23 | 顯示全部樓層
取反寫錯了
回復

使用道具 舉報

ID:139945 發(fā)表于 2018-7-30 17:44 | 顯示全部樓層
中斷不會寫呀這是
回復

使用道具 舉報

ID:381033 發(fā)表于 2018-7-30 21:00 | 顯示全部樓層
p55 = ~p55; 把這句話寫到中斷里面就好
注意一點,定時器方式1需要手動裝載數(shù)值
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线天堂免费中文字幕视频 | 成人免费xxxxx在线视频 | 欧美日本一区二区 | 91久久精品一区二区二区 | 男人天堂99 | 午夜在线 | 黄色大片在线视频 | 国产激情毛片 | 国产精品美女久久久久aⅴ国产馆 | 国产精品一区二区久久精品爱微奶 | 国产乱码精品一区二区三区忘忧草 | 日日操天天射 | 国产一区二区三区四区在线观看 | 日韩高清国产一区在线 | 欧美激情在线播放 | 久久久久久国产精品免费免费狐狸 | 狠狠操在线| 中文字幕国产视频 | 欧美日韩在线免费观看 | 日韩在线观看 | 伊人久久综合 | 国产精品综合一区二区 | 欧美久久一区 | 欧美亚洲高清 | 欧美寡妇偷汉性猛交 | 日韩精品免费在线 | 亚洲高清视频一区二区 | jvid精品资源在线观看 | 亚洲精品成人在线 | 成人福利视频 | 亚洲 欧美 日韩 在线 | 亚洲欧美综合 | 国产精品视频综合 | 欧美亚洲国语精品一区二区 | 亚洲 欧美 综合 | 国产精品揄拍一区二区久久国内亚洲精 | 亚洲精品av在线 | 欧美精品一二三区 | 国产一二三区精品视频 | 久久人体视频 | 久久久精品一区二区 |