一直下學習單片機A51匯編語音,流水燈,數碼管,獨立按鍵基本上都可以寫出來,而學習蜂鳴器,死活驅動不了無源蜂鳴器,今天在論壇看了admin的C語音,用他的C語言下載進去蜂鳴器響了,自己照他的程序寫匯編,很多方式不太會用,匯編與C應用不是很懂(開始學習過一點C),不會寫的去掉了,只留下自己會寫的,下載程序,有點響了,改變定時器的時間,蜂鳴器響了,感覺很高興,附上版主的程序和我的匯編程序,請各位指點一二
單片機源碼:
這個為版主的C,下面為我寫的匯編,已下載HEX文件到開發板可以正常發聲了(驅動無源蜂鳴器,蜂鳴器為P1.0)
- BUZZ BIT P1.0
- ORG 0000H
- LJMP START
- ORG 000BH ;定時器0入口
- LJMP ZHONGDUAN;跳轉到定時中斷
- START:
- MOV TMOD ,#01H ; 使用定時器T0
- SETB EA ;開啟總中斷
-
- MAIN:
- LCALL OPENBUZZ ;調用開啟無源蜂鳴器
- LCALL YS1 ;延時下
- LCALL STOPBUZZ ;關閉蜂鳴器
- LCALL YS1 ;延時下
- LCALL OPENBUZZ ;再開啟蜂鳴器
- LCALL YS1 ;延時下
- LCALL STOPBUZZ ;關閉蜂鳴器
- LCALL YS1 ;再延時
- LJMP MAIN ;如此循環
- OPENBUZZ:
- MOV TH0,#0FFH ;定時時間在65536-65350=186US
- MOV TL0,#046H ;根據你蜂鳴器的頻率不同,調節定時時間
- SETB ET0 ;開啟定時器中斷
- SETB TR0 ;開啟定時器
- RET
- STOPBUZZ: CLR ET0 ;關閉定時器中斷和關閉定時器,蜂鳴器將不會鳴叫
- CLR TR0
- RET
- ZHONGDUAN: MOV TH0,#0FFH ;給T0的重現賦初值
- MOV TL0,#046H
- CPL BUZZ ;對蜂鳴器進行取反
- RETI
-
- YS1: MOV R7,#20 ;延時子程序,時間長可以更改R6或R5的值。
- D1: MOV R6,#200
- D2: MOV R5,#100
- D3: DJNZ R5,D3
- DJNZ R6,D2
- DJNZ R7,D1
- RET
- END
復制代碼
|