找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 2898|回復: 18
打印 上一主題 下一主題
收起左側(cè)

求大佬改改程序,我不會用兩個定時器

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:318304 發(fā)表于 2018-5-10 08:10 來自手機 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
時鐘的程序,加上了無源蜂鳴器,就不跑時了,大佬幫忙看看吧。https://share.weiyun.com/5fI6iIr
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:326568 發(fā)表于 2018-5-10 10:01 | 只看該作者
驅(qū)動PCB不對
回復

使用道具 舉報

板凳
ID:326568 發(fā)表于 2018-5-10 10:01 | 只看該作者
蜂鳴器驅(qū)動不對
回復

使用道具 舉報

地板
ID:213173 發(fā)表于 2018-5-10 10:35 | 只看該作者
對于不可位操作的寄存器可以用邏輯運算符&和|操作位。
void main()
{               
//        TMOD = 0x11;        //同時設置T0和T1為模式1
        TMOD |= 0x01;        //設置T0為模式1
        TH0  = 0xFC;  //為T0賦初值0xFC67,定時1ms
        TL0  = 0x67;
        TMOD |= 0x10;        //設置T1為模式1
        TH1 = T0RH;
        TL1 = T0RL;

        TR0  = 1;     //開T0
//        TR1  = 1;     //需要時在程序中開T1
        EA=1;        //開總中斷
        ET0  = 1;     //開T0中斷
        ET1 = 1;     //開T1中斷

        InitLcd1602();
        while (1)
        {  
//                TMOD = 0x01;
                if(biaozhi==1)
                {
回復

使用道具 舉報

5#
ID:277550 發(fā)表于 2018-5-10 12:27 | 只看該作者
程序是使用時鐘中斷計時的,在播放音樂時計時就不準了。。。。。播放完音樂,重新開啟定時器0
回復

使用道具 舉報

6#
ID:318304 發(fā)表于 2018-5-10 15:14 來自手機 | 只看該作者
devcang 發(fā)表于 2018-5-10 12:27
程序是使用時鐘中斷計時的,在播放音樂時計時就不準了。。。。。播放完音樂,重新開啟定時器0

說得對,怎樣讓它響音樂的時候正常跑時?該怎么改呢?
回復

使用道具 舉報

7#
ID:318304 發(fā)表于 2018-5-10 15:14 來自手機 | 只看該作者
東北許文強 發(fā)表于 2018-5-10 10:01
驅(qū)動PCB不對

液晶顯示嗎?還是什么
回復

使用道具 舉報

8#
ID:318304 發(fā)表于 2018-5-10 15:15 來自手機 | 只看該作者
東北許文強 發(fā)表于 2018-5-10 10:01
蜂鳴器驅(qū)動不對

蜂鳴器驅(qū)動應該可以的,錯誤在哪?
回復

使用道具 舉報

9#
ID:318304 發(fā)表于 2018-5-10 15:15 來自手機 | 只看該作者
wulin 發(fā)表于 2018-5-10 10:35
對于不可位操作的寄存器可以用邏輯運算符&和|操作位。
void main()
{               

哥,我不大懂,該怎么改呢
回復

使用道具 舉報

10#
ID:318304 發(fā)表于 2018-5-10 15:21 來自手機 | 只看該作者
大佬,能不能把正確的程序評論給我,或者QQ發(fā)到1994975123上謝謝了。
回復

使用道具 舉報

11#
ID:213173 發(fā)表于 2018-5-10 17:01 | 只看該作者
勇士小子 發(fā)表于 2018-5-10 15:15
哥,我不大懂,該怎么改呢

定時器初始化設置就按如上示例,你程序中不要操作TMOD,開停定時器只要操作 TR0、TR1就行了。
回復

使用道具 舉報

12#
ID:318304 發(fā)表于 2018-5-10 18:34 來自手機 | 只看該作者
wulin 發(fā)表于 2018-5-10 17:01
定時器初始化設置就按如上示例,你程序中不要操作TMOD,開停定時器只要操作 TR0、TR1就行了。

哦哦,謝謝,t0要一直開著,響音樂的時候我要開t1,就怕和原來一樣,t1一打開就把t0屏蔽了,我晚上回去測試測試。不行的話在找大佬幫忙。多謝了
回復

使用道具 舉報

13#
ID:318304 發(fā)表于 2018-5-10 23:09 | 只看該作者
wulin 發(fā)表于 2018-5-10 10:35
對于不可位操作的寄存器可以用邏輯運算符&和|操作位。
void main()
{               

根據(jù)你這個改了,還是蜂鳴器響完才加1,定時器不能同步。
回復

使用道具 舉報

14#
ID:213173 發(fā)表于 2018-5-11 07:03 | 只看該作者
勇士小子 發(fā)表于 2018-5-10 23:09
根據(jù)你這個改了,還是蜂鳴器響完才加1,定時器不能同步。

定時器0中斷的優(yōu)先級高于定時器1中斷,在播放音樂時計時就不準了肯定是程序中定時器0被關閉了。 查查程序中有沒有TR0=0;ET0=0;或除初始化以外對TMOD寄存器的操作。
回復

使用道具 舉報

15#
ID:7485 發(fā)表于 2018-5-11 08:32 | 只看該作者
主要是TMOD你沒有弄明白,
“定時器/計數(shù)器”工作模式控制寄存器TMOD是一個逐位定義的寄存器,只能使用字節(jié)尋址,不可以位尋址。
低四位用來定義定時器/計數(shù)器T0,高四位用來定義定時器/計數(shù)器T1。
由于“只能使用字節(jié)尋址,不可以位尋址”,所以你需要先把“需要啟動其功能的位”設置成“1”,不需要的設置成“0”,然后將這8位的二進制值轉(zhuǎn)換成16進制,寫入程序。例如:TMOD = 0x11 就是TMOD = 00010001,寫成16進制就是TMOD = 0x11   如果想設置成T1為16位計數(shù)器,T0設置成16位定時器,就是TMOD = 01010001,寫成16進制就是 TMOD = 0x51 。你還是自己在琢磨琢磨吧。
回復

使用道具 舉報

16#
ID:277550 發(fā)表于 2018-5-12 10:24 | 只看該作者

記時添加時鐘芯片,讓單片機全力干活
回復

使用道具 舉報

17#
ID:318304 發(fā)表于 2018-5-12 18:30 來自手機 | 只看該作者
devcang 發(fā)表于 2018-5-12 10:24
記時添加時鐘芯片,讓單片機全力干活

我們不能時鐘芯片
回復

使用道具 舉報

18#
ID:318304 發(fā)表于 2018-5-12 22:04 來自手機 | 只看該作者
wulin 發(fā)表于 2018-5-11 07:03
定時器0中斷的優(yōu)先級高于定時器1中斷,在播放音樂時計時就不準了肯定是程序中定時器0被關閉了。 查查程序 ...

我查了一下,沒有關的程序,響音樂時候只有對TH1和TL1的變化,感覺像是T1的工作時間太長了吧,無法及時跑到T0,響完一段音樂就執(zhí)行一次T0,秒加1
回復

使用道具 舉報

19#
ID:318304 發(fā)表于 2018-5-13 22:32 來自手機 | 只看該作者
ahshmj 發(fā)表于 2018-5-11 08:32
主要是TMOD你沒有弄明白,
“定時器/計數(shù)器”工作模式控制寄存器TMOD是一個逐位定義的寄存器,只能使用字 ...

是不是這個問題啊,可以同時工作,但不能同時中斷。一個定時器中斷結(jié)束后另一個才能進入。當設定工作模式(有TMOD寄存器設置)后當TRx=1時就開始工作了,當ETx=1時,溢出時就申請中斷。如果EA=1,那么就可以進入中斷了。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表