|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
貼一段小程序,是蜂鳴器的,但有問題,一直找不出來,請指教 |
| 作者:yywxwen 欄目:單片機(jī) |
這個程序中,我但步執(zhí)行都可以 但一點運行,蜂鳴器就連續(xù)不斷的叫, 我檢查了延遲時間,沒有錯,請指教(前面有些定義的變量在這里不起做用) list p=16F877 ; Include file, change directory if needed include "p16F877.inc" ;----------------------------------- ; difine register ADF1 EQU 0x20 ; ADF2 EQU 0x21 ; ADF3 EQU 0x22 ; ADF4 EQU 0x23 ; delay_1 EQU 0x24 ; delay_2 EQU 0x25 ; delay_3 EQU 0x26 ; delay_4 EQU 0x27 ; beepL EQU 0x28 AA0 EQU 0x30 AA1 EQU 0x31 AA2 EQU 0x32 T1 EQU 0x33 T2 EQU 0x34 NUM EQU 0x35 CONT EQU 0x36 ;-------Start at the reset vector---- org 0x00 goto Start org 0x04 nop org 0x10 Start nop banksel TRISA movlw 0XFF movwf TRISA ;PORTA all inputs clrf TRISB ;PORTB all outputs clrf TRISC ;PORTB all outputs bsf TRISC,3 banksel PORTA clrf PORTA ;Clear PORTA clrf PORTB ;Clear PORTB clrf PORTC ;;; banksel OPTION_REG BCF OPTION_REG,T0CS ;TMR0工作于定時器方式 BSF OPTION_REG,PSA ;TMR0不用分頻 clrf INTCON GOTO A1 delay movwf delay_1 delayad decfsz delay_1,1 goto delayad return beepsel banksel PORTA movlw D'10' movwf beepL beepm bsf PORTB,1 ;beep on movlw D'100' call delay bcf PORTB,1 ;beep off movlw D'255' call delay decfsz beepL,1 goto beepm bcf PORTB,1 ;beep off return A1 call beepsel ;beep GOTO A1 end |
| 2樓: | >>參與討論 |
| 作者: yywxwen 于 2004/2/26 16:58:00 發(fā)布:
找到了,謝謝,是延遲時間不夠,但又出現(xiàn)了新問題 這個問題是:假如我把倒數(shù)第2行的GOTO A1去掉 那么我用MPLAB仿真時,最后程序就飛了 我用單步執(zhí)行也是這樣 我想是不是由于END是偽指令?不能直接結(jié)束? 還是語法有問題?我查了有關(guān)資料,但手頭的書籍上都沒說這些 請指教,謝謝! |
|
| 3樓: | >>參與討論 |
| 作者: HotPower 于 2004/2/26 22:49:00 發(fā)布:
“零耗時”蜂鳴器“軟件控制器” 可在侃單片機(jī)搜索主題——經(jīng)典4*4鍵盤掃描討論 - dcp 2004-1-27 19:46:44 繼續(xù)瞎吹——“零耗時”蜂鳴器“軟件控制器” HotPower 發(fā)表于 2004-1-29 23:44 侃單片機(jī) ←返回版面 程序在后面,已在幾種MCU中運行,非常好(自吹一次吧) 它可嵌入在“零耗時”鍵盤或動態(tài)顯示的1.25mS中斷內(nèi),T2中斷80或100次后將調(diào)用一次BEEPSOUND通用蜂鳴器發(fā)聲子程序。 這樣就不需每次再編寫蜂鳴器發(fā)聲程序了。 ;--------鈴聲定義-------------------- ;D7=0循環(huán) D7=1 單次 ;D7~D0=1發(fā)聲 D7~D0=0無聲 DEFBEEPNULL EQU 00000000B;無鈴聲 DEFBEEP01 EQU 01010101B;(循環(huán)1短聲) DEFBEEP02 EQU 01100110B;(循環(huán)2長聲) DEFBEEP03 EQU 01110111B;(循環(huán)2長長聲) DEFBEEP04 EQU 01110101B;(循環(huán)1長2短聲) DEFBEEP05 EQU 01110010B;(循環(huán)1長1短聲) DEFBEEP11 EQU 10000000B;(單次1短聲) DEFBEEP12 EQU 10100000B;(單次2短聲) DEFBEEP13 EQU 10101000B;(單次3短聲) DEFBEEP14 EQU 10101010B;(單次4短聲) ;-------運行期設(shè)置響鈴方式----------------------------- MOV A,#DEFBEEP11;壓鍵鈴聲 LCALL SETBEEPMODE;設(shè)置響鈴方式 。。。。。 ;-------運行期設(shè)置響鈴方式----------------------------- MOV A,#DEFBEEPPUSHKEY;壓鍵鈴聲 LCALL SETBEEPMODE;設(shè)置響鈴方式 。。。。。 ;-------設(shè)置響鈴方式子程序----------------------------- SETBEEPMODE: MOV BEEPRLCOUNT,#1;立即取鈴聲 MOV BEEPMODE,A;設(shè)置響鈴 MOV BEEPBUFF,A;改寫緩存 SETBEEPMODE_EXIT: RET ;-------蜂鳴器100MS發(fā)聲中斷程序----------------------- ;本程序在T2中斷中每100MS運行一次(也可125mS) BEEPSOUND: DJNZ BEEPRLCOUNT,BEEPSOUND_NEXT;繼續(xù)發(fā)聲 MOV BEEPRLCOUNT,#8;重新開始 MOV BEEPBUFF,BEEPMODE;取發(fā)聲模式 JNB BEEPMODE.7,BEEPSOUND_NEXT;循環(huán)發(fā)聲 MOV BEEPMODE,#00H BEEPSOUND_NEXT: CLR C MOV A,BEEPBUFF;取發(fā)聲緩存 RLC A;左移1位 MOV BEEPBUFF,A;存發(fā)聲緩存 MOV BEEPOUT,C;發(fā)聲 RET |
|
| 4樓: | >>參與討論 |
| 作者: HotPower 于 2004/2/26 23:01:00 發(fā)布:
我寫的PIC程序可能更難看——四不象 ;-------蜂鳴器125mS發(fā)聲子程序---------------------------- PROC BEEPSOUND: IFEZ_DecByte(BEEPRLCOUNT); ByteVal(BEEPRLCOUNT,8);重新開始 ByteVar(BEEPBUFF,BEEPMODE);取發(fā)聲模式 IFET_Bit(BEEPMODE,BIT7);循環(huán)發(fā)聲 ClrByte(BEEPMODE); ENDIFET_Bit; ENDIFEZ_DecByte; CopyBit(PORTC,BEEP,BEEPBUFF,BIT7);控制蜂鳴器 ShlByteVal(BEEPBUFF,1);取發(fā)聲緩存 ENDPROC; |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |