找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4946|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

學(xué)習(xí)很久的單片機匯編,遇到蜂鳴器驅(qū)動不了,今天終于驅(qū)動蜂鳴器響了!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:218360 發(fā)表于 2018-10-25 22:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    一直下學(xué)習(xí)單片機A51匯編語音,流水燈,數(shù)碼管,獨立按鍵基本上都可以寫出來,而學(xué)習(xí)蜂鳴器,死活驅(qū)動不了無源蜂鳴器,今天在論壇看了admin的C語音,用他的C語言下載進去蜂鳴器響了,自己照他的程序?qū)憛R編,很多方式不太會用,匯編與C應(yīng)用不是很懂(開始學(xué)習(xí)過一點C),不會寫的去掉了,只留下自己會寫的,下載程序,有點響了,改變定時器的時間,蜂鳴器響了,感覺很高興,附上版主的程序和我的匯編程序,請各位指點一二

單片機源碼:
  1. #include<reg52.h>

  2. sbit BUZZ = P1^0;  //蜂鳴器控制引腳
  3. unsigned char T0LoadH = 0;  //T0重載值的高字節(jié)
  4. unsigned char T0LoadL = 0;  //T0重載值的低字節(jié)



  5. void OpenBuzz(unsigned int frequ);

  6. void StopBuzz();



  7. void main()

  8. {

  9.     unsigned int i=0;



  10.     TMOD = 0x01; //配置T0工作在模式1,暫不啟動

  11.     EA = 1;       //使能全局中斷



  12.     while (1)

  13.     {

  14.         OpenBuzz(2000); //以4KHz的頻率啟動蜂鳴器

  15.         for (i=0; i<30000; i++);

  16.         StopBuzz();

  17.         for (i=0; i<30000; i++);

  18.         OpenBuzz(2000); //以1KHz的頻率啟動蜂鳴器

  19.         for (i=0; i<30000; i++);

  20.         StopBuzz();

  21.         for (i=0; i<30000; i++);

  22.     }

  23. }



  24. void OpenBuzz(unsigned int frequ)

  25. {

  26.     unsigned int reload;



  27.     reload = 65536 - (11059200/12) / (frequ*2);  //由給定頻率值計算定時器重載值

  28.     T0LoadH = reload >> 8;  //16位重載值分解為高低兩個字節(jié)

  29.     T0LoadL = reload;

  30.     TH0 = 0xFF;   //設(shè)定一個接近溢出的初值,以使定時器馬上投入工作

  31.     TL0 = 0xFE;

  32.     ET0 = 1;   //使能T0中斷

  33.     TR0 = 1;   //啟動T0

  34. }

  35. void StopBuzz()

  36. {

  37.     ET0 = 0;   //禁用T0中斷

  38.     TR0 = 0;   //停止T0

  39. }



  40. void InterruptTimer0() interrupt 1

  41. {

  42.     TH0 = T0LoadH;  //溢出后進入中斷重新賦值

  43.     TL0 = T0LoadL;

  44.     BUZZ = ~BUZZ; //反轉(zhuǎn)蜂鳴器控制電平

  45. }
復(fù)制代碼

這個為版主的C,下面為我寫的匯編,已下載HEX文件到開發(fā)板可以正常發(fā)聲了(驅(qū)動無源蜂鳴器,蜂鳴器為P1.0)
  1. BUZZ           BIT   P1.0
  2. ORG   0000H
  3. LJMP  START
  4. ORG   000BH  ;定時器0入口
  5. LJMP  ZHONGDUAN;跳轉(zhuǎn)到定時中斷

  6. START:
  7.         MOV  TMOD ,#01H ; 使用定時器T0
  8.         SETB  EA        ;開啟總中斷

  9.                
  10. MAIN:      
  11.         LCALL OPENBUZZ   ;調(diào)用開啟無源蜂鳴器
  12.         LCALL YS1         ;延時下
  13.         LCALL STOPBUZZ  ;關(guān)閉蜂鳴器
  14.         LCALL YS1   ;延時下
  15.         LCALL OPENBUZZ ;再開啟蜂鳴器
  16.         LCALL YS1     ;延時下
  17.         LCALL STOPBUZZ ;關(guān)閉蜂鳴器
  18.         LCALL YS1            ;再延時
  19.         LJMP  MAIN   ;如此循環(huán)
  20. OPENBUZZ:
  21.         MOV   TH0,#0FFH        ;定時時間在65536-65350=186US
  22.         MOV   TL0,#046H  ;根據(jù)你蜂鳴器的頻率不同,調(diào)節(jié)定時時間
  23.         SETB  ET0 ;開啟定時器中斷
  24.         SETB  TR0 ;開啟定時器
  25.         RET
  26. STOPBUZZ:        CLR        ET0  ;關(guān)閉定時器中斷和關(guān)閉定時器,蜂鳴器將不會鳴叫
  27.                 CLR        TR0
  28.                 RET
  29. ZHONGDUAN:        MOV TH0,#0FFH  ;給T0的重現(xiàn)賦初值
  30.                 MOV TL0,#046H
  31.                 CPL  BUZZ        ;對蜂鳴器進行取反
  32.                 RETI   
  33.                
  34. YS1:        MOV  R7,#20                     ;延時子程序,時間長可以更改R6或R5的值。
  35. D1:        MOV  R6,#200
  36. D2:        MOV  R5,#100
  37. D3:        DJNZ R5,D3
  38.         DJNZ R6,D2
  39.         DJNZ R7,D1
  40.         RET
  41.         END
復(fù)制代碼

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:101808 發(fā)表于 2018-10-26 10:14 | 只看該作者
佩服現(xiàn)在還用匯編的大仙!了不起啊
回復(fù)

使用道具 舉報

板凳
ID:276663 發(fā)表于 2018-10-26 12:25 | 只看該作者
首先要恭喜了,看了你之前的帖子,很用心的去學(xué)習(xí)單片機。

有個疑問:
為什么學(xué)習(xí)單片機,你選擇了匯編語言入門?
相對于匯編,C語言更適合單片機入門使用。因此,網(wǎng)上入門的各種代碼大部分都是C語言寫的,如果用C,一個你可以參考的例程更多,一個易于和其他人交流討論(畢竟別人不能懂你的匯編也沒法討論)。
回復(fù)

使用道具 舉報

地板
ID:73182 發(fā)表于 2018-10-26 16:26 | 只看該作者
同意樓上,匯編發(fā)個聲音確實都好麻煩,自學(xué)的還是C比較方便,匯編沒那條件
回復(fù)

使用道具 舉報

5#
ID:218360 發(fā)表于 2018-10-26 17:49 | 只看該作者
IdeaMing 發(fā)表于 2018-10-26 12:25
首先要恭喜了,看了你之前的帖子,很用心的去學(xué)習(xí)單片機。

有個疑問:

因我們公司的軟件工程師是匯編,想看協(xié)助他,必須看的懂匯編語言,或者理解匯編的使用,原本就是學(xué)C,我們軟件工程師說,我是寫匯編,你學(xué)匯編,不懂可以問我
回復(fù)

使用道具 舉報

6#
ID:218360 發(fā)表于 2018-10-26 17:50 | 只看該作者
zhaozonghui 發(fā)表于 2018-10-26 10:14
佩服現(xiàn)在還用匯編的大仙!了不起啊

領(lǐng)導(dǎo)用的就是匯編,用C他看不懂,也教不了我,他的軟件我也沒有辦法協(xié)助他,所以就還是匯編了
回復(fù)

使用道具 舉報

7#
ID:276663 發(fā)表于 2018-10-29 09:20 | 只看該作者
打雜的 發(fā)表于 2018-10-26 17:49
因我們公司的軟件工程師是匯編,想看協(xié)助他,必須看的懂匯編語言,或者理解匯編的使用,原本就是學(xué)C,我 ...

這么說,你遇到的這些基本問題,問他吧,如果他有耐心教教你,學(xué)的也很快,可是看你所有的帖子,從去年7月吧,到現(xiàn)在感覺還是沒起步。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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