|
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請(qǐng)各位大俠幫我看看這個(gè)程序 |
作者:love pic 欄目:單片機(jī) |
;;;;;;;利用RB電平中斷實(shí)現(xiàn)鍵盤擴(kuò)展;;;;;;;;;;;;;;;;; ;;;;;;;當(dāng)S1按下時(shí)數(shù)碼管顯示1,當(dāng)S2按下時(shí)顯示2,S3按下時(shí)顯示3,S4按下時(shí)顯示4;;;;;; ;;;PIC16F877單片機(jī)的端口的4個(gè)個(gè)引腳RB7~RB4上有電平變化時(shí),可以產(chǎn)生中斷,但只有當(dāng)I/O ;;;設(shè)為輸入狀態(tài)時(shí),才能產(chǎn)生中斷。其功能實(shí)現(xiàn)是通過(guò)把RB7~RB4引腳上的輸入信號(hào)與上次讀入的舊值進(jìn)行比較 ;;;如果不等,則把二者異或后輸出,產(chǎn)生變化中斷,并把RBIF置1 LIST P=16F877 INCLUDE"P16F877.INC" COUNT EQU 20H W_TEMP EQU 21H STATUS_TEMP EQU 22H PCL_TEMP EQU 23H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG 0000H NOP GOTO MAIN ORG 0004H GOTO SERVE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MAIN BCF PORTB,1;初始化I/O BCF PORTB,2 BSF PORTB,4 BSF PORTB,5 BCF STATUS,RP1 BSF STATUS,RP0 CLRF TRISC BCF TRISB,1 BCF TRISB,2 BSF TRISB,4 BSF TRISB,5 BCF OPTION_REG,7;啟動(dòng)弱上拉 BCF STATUS,RP0 MOVLW B'10001000' MOVWF INTCON BCF PORTB,1 BCF PORTB,2 MOVF PORTB,W GOTO $ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SERVE MOVWF W_TEMP;保護(hù)現(xiàn)場(chǎng) SWAPF STATUS,W CLRF STATUS MOVWF STATUS_TEMP MOVF PCLATH,W MOVWF PCL_TEMP CLRF PCLATH ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BCF INTCON,GIE BCF INTCON,RBIF MOVF PORTB,W ANDLW 30H;判斷是否是RB中斷? SUBLW 30H BTFSC STATUS,Z GOTO LOP MOVLW 0FDH;鍵值判斷并送顯 MOVWF PORTB NOP NOP BTFSS PORTB,4 GOTO S4 BTFSS PORTB,5 GOTO S3 MOVLW 0FBH MOVWF PORTB NOP NOP BTFSS PORTB,4 GOTO S2 BTFSS PORTB,5 GOTO S1 S3 MOVLW .3 MOVWF COUNT CALL READ MOVWF PORTC GOTO LOP S4 MOVLW .4 MOVWF COUNT CALL READ MOVWF PORTC GOTO LOP S2 MOVLW .2 MOVWF COUNT CALL READ MOVWF PORTC GOTO LOP S1 MOVLW .1 MOVWF COUNT CALL READ MOVWF PORTC GOTO LOP LOP ;MOVF PORTB,W CLRF COUNT BCF INTCON,RBIF MOVF PCL_TEMP,W;恢復(fù)現(xiàn)場(chǎng) MOVWF PCLATH SWAPF STATUS_TEMP,W MOVWF STATUS SWAPF W_TEMP,F SWAPF W_TEMP,W BCF INTCON,RBIF BSF INTCON,GIE RETFIE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; READ ADDWF PCL,F RETLW B'00000110' RETLW B'01011010' RETLW B'01001111' RETLW B'01100110' RETURN END 我把這個(gè)程序看了幾遍,沒(méi)有發(fā)現(xiàn)什么問(wèn)題(為了調(diào)試方便去掉了去抖程序),可是不知道為什么不能實(shí)現(xiàn)功能。數(shù)碼管不能正常顯示,麻煩各位大俠抽出寶貴的時(shí)間幫我看看,小弟感激不盡。! |
2樓: | >>參與討論 |
作者: xieyuanbin 于 2004/9/5 20:38:00 發(fā)布:
錯(cuò)了 BCF INTCON,GIE ;這句可不要,一旦進(jìn)入中斷GIE自動(dòng)清零 BCF INTCON,RBIF ;這句和下句應(yīng)該對(duì)掉。請(qǐng)仔細(xì)看數(shù)據(jù)手冊(cè)。 MOVF PORTB,W ANDLW 30H;判斷是否是RB中斷?!一般來(lái)講,判斷是什么中斷應(yīng)該在中斷保護(hù)之后測(cè)試*IF標(biāo)志位來(lái)看是什么中斷。RB口電平變化中斷只要有任何一口電平改變就會(huì)發(fā)生中斷,因此你只需要判斷是否是RB口中斷就行,不必去看RB口是否有變化?多看看數(shù)據(jù)手冊(cè),或者多買幾本書(shū)看看。 SUBLW 30H |
3樓: | >>參與討論 |
作者: love pic 于 2004/9/5 20:56:00 發(fā)布:
謝謝 請(qǐng)問(wèn)這位大俠,你是說(shuō)只要判斷RBIF是否是1 就可以了嗎?小弟初學(xué)PIC,請(qǐng)多多指教!! QQ:44312923 |
4樓: | >>參與討論 |
作者: xieyuanbin 于 2004/9/6 11:12:00 發(fā)布:
不錯(cuò)。 |
5樓: | >>參與討論 |
作者: love pic 于 2004/9/7 16:30:00 發(fā)布:
thank you 多謝大俠指點(diǎn),我已按照你說(shuō)的改過(guò)來(lái)了,可是還是不能實(shí)現(xiàn)功能,請(qǐng)問(wèn)這個(gè)程序別處還有錯(cuò)誤嗎?硬板件電路沒(méi)有問(wèn)題 |
6樓: | >>參與討論 |
作者: xieyuanbin 于 2004/9/7 16:39:00 發(fā)布:
程序這么長(zhǎng), 不可能逐句看下來(lái),您用MPLAB里面的軟仿真仿真一下,應(yīng)該能看出結(jié)果。MPLAB中的軟仿真功能很強(qiáng)的,也有異步引腳激勵(lì),試試看。我現(xiàn)在寫程序都不用硬件仿真器。 |
7樓: | >>參與討論 |
作者: love pic 于 2004/9/7 18:42:00 發(fā)布:
謝謝 我用軟件防真沒(méi)有發(fā)現(xiàn)什么問(wèn)題,可是用軟件防真時(shí)出現(xiàn)了數(shù)碼管無(wú)法正常顯示,我的硬件電路沒(méi)有什么問(wèn)題,我查過(guò)幾次,現(xiàn)在懷疑是程序的問(wèn)題,如果有空請(qǐng)大俠幫我看看程序。 |
8樓: | >>參與討論 |
作者: xieyuanbin 于 2004/9/7 20:29:00 發(fā)布:
查表錯(cuò)了。 查表中容易出現(xiàn)的問(wèn)題: 一、如果W里的值為1,如下查表: ADDWF PCL RETLW D'1' RETLW D'2' ... 返回的值為2而不是1; 二、查表小心溢出,如果W里的值超過(guò)表長(zhǎng),則會(huì)造成溢出,程序跑飛。 三、(W+PCL)的值不能超過(guò)255,如果超過(guò)則要進(jìn)位到PCLAH,否則程序也跑飛。初學(xué)者最好將小的表放在程序的開(kāi)頭,這樣不怎么會(huì)溢出。大的超過(guò)255句長(zhǎng)度的一定要進(jìn)位到PCLAH,我一般超過(guò)幾十句便會(huì)判斷是否有進(jìn)位。 |
9樓: | >>參與討論 |
作者: love pic 于 2004/9/7 21:35:00 發(fā)布:
thank you 呵呵,這確實(shí)是一個(gè)錯(cuò)誤,多謝大俠提醒。這個(gè)程序別處還有問(wèn)題嗎?改過(guò)來(lái)了,還是不能實(shí)現(xiàn)功能。 |
|
|
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào) |