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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

學習很久的單片機匯編,遇到蜂鳴器驅動不了,今天終于驅動蜂鳴器響了!

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

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

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



  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位重載值分解為高低兩個字節

  29.     T0LoadL = reload;

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

  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; //反轉蜂鳴器控制電平

  45. }
復制代碼

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

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

  9.                
  10. MAIN:      
  11.         LCALL OPENBUZZ   ;調用開啟無源蜂鳴器
  12.         LCALL YS1         ;延時下
  13.         LCALL STOPBUZZ  ;關閉蜂鳴器
  14.         LCALL YS1   ;延時下
  15.         LCALL OPENBUZZ ;再開啟蜂鳴器
  16.         LCALL YS1     ;延時下
  17.         LCALL STOPBUZZ ;關閉蜂鳴器
  18.         LCALL YS1            ;再延時
  19.         LJMP  MAIN   ;如此循環
  20. OPENBUZZ:
  21.         MOV   TH0,#0FFH        ;定時時間在65536-65350=186US
  22.         MOV   TL0,#046H  ;根據你蜂鳴器的頻率不同,調節定時時間
  23.         SETB  ET0 ;開啟定時器中斷
  24.         SETB  TR0 ;開啟定時器
  25.         RET
  26. STOPBUZZ:        CLR        ET0  ;關閉定時器中斷和關閉定時器,蜂鳴器將不會鳴叫
  27.                 CLR        TR0
  28.                 RET
  29. ZHONGDUAN:        MOV TH0,#0FFH  ;給T0的重現賦初值
  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
復制代碼

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

有個疑問:

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

使用道具 舉報

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

領導用的就是匯編,用C他看不懂,也教不了我,他的軟件我也沒有辦法協助他,所以就還是匯編了
回復

使用道具 舉報

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

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩一区二区 | 久久久久国产一区二区 | 国产一区二区三区在线免费观看 | 免费在线黄| 精品一区二区三区在线播放 | 精品久久久久久久久久 | 99精品免费久久久久久日本 | 国产91丝袜在线熟 | 午夜精品视频一区 | 黄色男女网站 | 福利视频一区二区 | 天天爽天天操 | 日本福利视频免费观看 | 91 久久 | 欧美视频1| 欧美日韩国产一区二区 | 日韩欧美国产一区二区 | 国产精品久久久久久久久大全 | 成人免费视频一区 | 日本人爽p大片免费看 | 精品一区二区三区在线观看国产 | 日韩精品久久一区二区三区 | 国产一级片网站 | 美国av片在线观看 | 一级黄色片在线看 | 国产中文字幕在线 | 在线成人免费视频 | 亚洲综合在线一区二区 | 亚洲精品久久久蜜桃 | 亚洲视频在线一区 | 成人午夜av| 亚洲视频一区二区 | 91在线看| 麻豆视频国产在线观看 | 伊人网综合在线观看 | 亚洲精品一区二区三区四区高清 | 国产成人精品一区二 | 亚洲国产精选 | a级黄色网| 精品久久久久久久久久久久久 | 欧美精品一区二区三区在线 |