|
一直下學(xué)習(xí)單片機A51匯編語音,流水燈,數(shù)碼管,獨立按鍵基本上都可以寫出來,而學(xué)習(xí)蜂鳴器,死活驅(qū)動不了無源蜂鳴器,今天在論壇看了admin的C語音,用他的C語言下載進去蜂鳴器響了,自己照他的程序?qū)憛R編,很多方式不太會用,匯編與C應(yīng)用不是很懂(開始學(xué)習(xí)過一點C),不會寫的去掉了,只留下自己會寫的,下載程序,有點響了,改變定時器的時間,蜂鳴器響了,感覺很高興,附上版主的程序和我的匯編程序,請各位指點一二
單片機源碼:
這個為版主的C,下面為我寫的匯編,已下載HEX文件到開發(fā)板可以正常發(fā)聲了(驅(qū)動無源蜂鳴器,蜂鳴器為P1.0)
- BUZZ BIT P1.0
- ORG 0000H
- LJMP START
- ORG 000BH ;定時器0入口
- LJMP ZHONGDUAN;跳轉(zhuǎn)到定時中斷
- START:
- MOV TMOD ,#01H ; 使用定時器T0
- SETB EA ;開啟總中斷
-
- MAIN:
- LCALL OPENBUZZ ;調(diào)用開啟無源蜂鳴器
- LCALL YS1 ;延時下
- LCALL STOPBUZZ ;關(guān)閉蜂鳴器
- LCALL YS1 ;延時下
- LCALL OPENBUZZ ;再開啟蜂鳴器
- LCALL YS1 ;延時下
- LCALL STOPBUZZ ;關(guān)閉蜂鳴器
- LCALL YS1 ;再延時
- LJMP MAIN ;如此循環(huán)
- OPENBUZZ:
- MOV TH0,#0FFH ;定時時間在65536-65350=186US
- MOV TL0,#046H ;根據(jù)你蜂鳴器的頻率不同,調(diào)節(jié)定時時間
- SETB ET0 ;開啟定時器中斷
- SETB TR0 ;開啟定時器
- RET
- STOPBUZZ: CLR ET0 ;關(guān)閉定時器中斷和關(guān)閉定時器,蜂鳴器將不會鳴叫
- CLR TR0
- RET
- ZHONGDUAN: MOV TH0,#0FFH ;給T0的重現(xiàn)賦初值
- 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
復(fù)制代碼
|
評分
-
查看全部評分
|