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