找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 2923|回復(fù): 18
收起左側(cè)

求大佬改改程序,我不會(huì)用兩個(gè)定時(shí)器

[復(fù)制鏈接]
ID:318304 發(fā)表于 2018-5-10 08:10 來(lái)自觸屏版 | 顯示全部樓層 |閱讀模式
時(shí)鐘的程序,加上了無(wú)源蜂鳴器,就不跑時(shí)了,大佬幫忙看看吧。https://share.weiyun.com/5fI6iIr
回復(fù)

使用道具 舉報(bào)

ID:326568 發(fā)表于 2018-5-10 10:01 | 顯示全部樓層
驅(qū)動(dòng)PCB不對(duì)
回復(fù)

使用道具 舉報(bào)

ID:326568 發(fā)表于 2018-5-10 10:01 | 顯示全部樓層
蜂鳴器驅(qū)動(dòng)不對(duì)
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2018-5-10 10:35 | 顯示全部樓層
對(duì)于不可位操作的寄存器可以用邏輯運(yùn)算符&和|操作位。
void main()
{               
//        TMOD = 0x11;        //同時(shí)設(shè)置T0和T1為模式1
        TMOD |= 0x01;        //設(shè)置T0為模式1
        TH0  = 0xFC;  //為T(mén)0賦初值0xFC67,定時(shí)1ms
        TL0  = 0x67;
        TMOD |= 0x10;        //設(shè)置T1為模式1
        TH1 = T0RH;
        TL1 = T0RL;

        TR0  = 1;     //開(kāi)T0
//        TR1  = 1;     //需要時(shí)在程序中開(kāi)T1
        EA=1;        //開(kāi)總中斷
        ET0  = 1;     //開(kāi)T0中斷
        ET1 = 1;     //開(kāi)T1中斷

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

使用道具 舉報(bào)

ID:277550 發(fā)表于 2018-5-10 12:27 | 顯示全部樓層
程序是使用時(shí)鐘中斷計(jì)時(shí)的,在播放音樂(lè)時(shí)計(jì)時(shí)就不準(zhǔn)了。。。。。播放完音樂(lè),重新開(kāi)啟定時(shí)器0
回復(fù)

使用道具 舉報(bào)

ID:318304 發(fā)表于 2018-5-10 15:14 來(lái)自觸屏版 | 顯示全部樓層
devcang 發(fā)表于 2018-5-10 12:27
程序是使用時(shí)鐘中斷計(jì)時(shí)的,在播放音樂(lè)時(shí)計(jì)時(shí)就不準(zhǔn)了。。。。。播放完音樂(lè),重新開(kāi)啟定時(shí)器0

說(shuō)得對(duì),怎樣讓它響音樂(lè)的時(shí)候正常跑時(shí)?該怎么改呢?
回復(fù)

使用道具 舉報(bào)

ID:318304 發(fā)表于 2018-5-10 15:14 來(lái)自觸屏版 | 顯示全部樓層
東北許文強(qiáng) 發(fā)表于 2018-5-10 10:01
驅(qū)動(dòng)PCB不對(duì)

液晶顯示嗎?還是什么
回復(fù)

使用道具 舉報(bào)

ID:318304 發(fā)表于 2018-5-10 15:15 來(lái)自觸屏版 | 顯示全部樓層
東北許文強(qiáng) 發(fā)表于 2018-5-10 10:01
蜂鳴器驅(qū)動(dòng)不對(duì)

蜂鳴器驅(qū)動(dòng)應(yīng)該可以的,錯(cuò)誤在哪?
回復(fù)

使用道具 舉報(bào)

ID:318304 發(fā)表于 2018-5-10 15:15 來(lái)自觸屏版 | 顯示全部樓層
wulin 發(fā)表于 2018-5-10 10:35
對(duì)于不可位操作的寄存器可以用邏輯運(yùn)算符&和|操作位。
void main()
{               

哥,我不大懂,該怎么改呢
回復(fù)

使用道具 舉報(bào)

ID:318304 發(fā)表于 2018-5-10 15:21 來(lái)自觸屏版 | 顯示全部樓層
大佬,能不能把正確的程序評(píng)論給我,或者QQ發(fā)到1994975123上謝謝了。
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2018-5-10 17:01 | 顯示全部樓層
勇士小子 發(fā)表于 2018-5-10 15:15
哥,我不大懂,該怎么改呢

定時(shí)器初始化設(shè)置就按如上示例,你程序中不要操作TMOD,開(kāi)停定時(shí)器只要操作 TR0、TR1就行了。
回復(fù)

使用道具 舉報(bào)

ID:318304 發(fā)表于 2018-5-10 18:34 來(lái)自觸屏版 | 顯示全部樓層
wulin 發(fā)表于 2018-5-10 17:01
定時(shí)器初始化設(shè)置就按如上示例,你程序中不要操作TMOD,開(kāi)停定時(shí)器只要操作 TR0、TR1就行了。

哦哦,謝謝,t0要一直開(kāi)著,響音樂(lè)的時(shí)候我要開(kāi)t1,就怕和原來(lái)一樣,t1一打開(kāi)就把t0屏蔽了,我晚上回去測(cè)試測(cè)試。不行的話在找大佬幫忙。多謝了
回復(fù)

使用道具 舉報(bào)

ID:318304 發(fā)表于 2018-5-10 23:09 | 顯示全部樓層
wulin 發(fā)表于 2018-5-10 10:35
對(duì)于不可位操作的寄存器可以用邏輯運(yùn)算符&和|操作位。
void main()
{               

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

使用道具 舉報(bào)

ID:213173 發(fā)表于 2018-5-11 07:03 | 顯示全部樓層
勇士小子 發(fā)表于 2018-5-10 23:09
根據(jù)你這個(gè)改了,還是蜂鳴器響完才加1,定時(shí)器不能同步。

定時(shí)器0中斷的優(yōu)先級(jí)高于定時(shí)器1中斷,在播放音樂(lè)時(shí)計(jì)時(shí)就不準(zhǔn)了肯定是程序中定時(shí)器0被關(guān)閉了。 查查程序中有沒(méi)有TR0=0;ET0=0;或除初始化以外對(duì)TMOD寄存器的操作。
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:277550 發(fā)表于 2018-5-12 10:24 | 顯示全部樓層

記時(shí)添加時(shí)鐘芯片,讓單片機(jī)全力干活
回復(fù)

使用道具 舉報(bào)

ID:318304 發(fā)表于 2018-5-12 18:30 來(lái)自觸屏版 | 顯示全部樓層
devcang 發(fā)表于 2018-5-12 10:24
記時(shí)添加時(shí)鐘芯片,讓單片機(jī)全力干活

我們不能時(shí)鐘芯片
回復(fù)

使用道具 舉報(bào)

ID:318304 發(fā)表于 2018-5-12 22:04 來(lái)自觸屏版 | 顯示全部樓層
wulin 發(fā)表于 2018-5-11 07:03
定時(shí)器0中斷的優(yōu)先級(jí)高于定時(shí)器1中斷,在播放音樂(lè)時(shí)計(jì)時(shí)就不準(zhǔn)了肯定是程序中定時(shí)器0被關(guān)閉了。 查查程序 ...

我查了一下,沒(méi)有關(guān)的程序,響音樂(lè)時(shí)候只有對(duì)TH1和TL1的變化,感覺(jué)像是T1的工作時(shí)間太長(zhǎng)了吧,無(wú)法及時(shí)跑到T0,響完一段音樂(lè)就執(zhí)行一次T0,秒加1
回復(fù)

使用道具 舉報(bào)

ID:318304 發(fā)表于 2018-5-13 22:32 來(lái)自觸屏版 | 顯示全部樓層
ahshmj 發(fā)表于 2018-5-11 08:32
主要是TMOD你沒(méi)有弄明白,
“定時(shí)器/計(jì)數(shù)器”工作模式控制寄存器TMOD是一個(gè)逐位定義的寄存器,只能使用字 ...

是不是這個(gè)問(wèn)題啊,可以同時(shí)工作,但不能同時(shí)中斷。一個(gè)定時(shí)器中斷結(jié)束后另一個(gè)才能進(jìn)入。當(dāng)設(shè)定工作模式(有TMOD寄存器設(shè)置)后當(dāng)TRx=1時(shí)就開(kāi)始工作了,當(dāng)ETx=1時(shí),溢出時(shí)就申請(qǐng)中斷。如果EA=1,那么就可以進(jìn)入中斷了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表