|
|||||||||||
| 技術(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 |
關(guān)于RB中斷的問(wèn)題 |
| 作者:guangg 欄目:單片機(jī) |
在運(yùn)用16F873的RB<4:7>中斷時(shí),在發(fā)生RB中斷時(shí),會(huì)去查詢(xún)一個(gè)數(shù)據(jù)碼,并把它保存下來(lái),數(shù)據(jù)碼是靠一個(gè)在主程序里循環(huán)執(zhí)行的子程序來(lái)完成遞增的,此子程序如下: 問(wèn)題:當(dāng)發(fā)生RB中斷時(shí),會(huì)將DataCode保存下來(lái)。但在應(yīng)用中發(fā)現(xiàn),若DataCode的值是01、02、…、0fh時(shí),程序能把DataCode正確的保存下來(lái),可當(dāng)DataCode的值是00h時(shí),程序就無(wú)法正確的將DataCode的值保存下來(lái),而是一個(gè)隨機(jī)數(shù)。我不知這是什么原因造成的,還請(qǐng)各位幫幫忙!多謝! 注:中斷發(fā)生后就關(guān)閉中斷,沒(méi)有開(kāi)啟其它中斷;發(fā)生中斷后立即保存DataCode,再做其它操作。 DetectStatus incf DataCode,F movlw 10h subwf DataCode,W btfsc STATUS,Z call ReInitData movlw 0f0h andwf PORTB,F movlw 0fh andwf DataCode,W iorwf PORTB,F call Delay10ms return ReInitData movlw InitDataCode movwf DataCode return |
| 2樓: | >>參與討論 |
| 作者: king99112 于 2003/5/24 18:51:00 發(fā)布:
我也碰到一個(gè)跟你差不多的問(wèn)題 就是,w寄存器本來(lái)是按我們給的付值,沒(méi)給它就不會(huì)變,但是我碰到了 ,就是w寄存器無(wú)緣無(wú)故的會(huì)變掉,而且后面對(duì)w寄存器的操作執(zhí)行不了 不知道怎么回事,請(qǐng)幫忙解答 |
|
| 3樓: | >>參與討論 |
| 作者: Wxy8030 于 2003/5/24 18:58:00 發(fā)布:
不是很明白~~~~~~~~~~~ 你B口的高四位是輸出還是輸入?? * - 本貼最后修改時(shí)間:2003-5-24 19:11:12 修改者:Wxy8030 |
|
| 4樓: | >>參與討論 |
| 作者: guangg 于 2003/5/26 14:10:00 發(fā)布:
RB的高四位當(dāng)然是輸入 RB的高四位是輸入,而低四位是作為四位數(shù)據(jù)碼輸出,在此程序中先將低四位清零,再將四位數(shù)據(jù)碼送入低四位輸出;而高四位是利用RB中斷,在產(chǎn)生中斷時(shí)將去查詢(xún)此數(shù)據(jù)碼,問(wèn)題就在當(dāng)所查詢(xún)的數(shù)據(jù)碼是01~0fH時(shí)一切正常,而若數(shù)據(jù)碼為00H時(shí)就會(huì)出現(xiàn)一個(gè)隨機(jī)數(shù),無(wú)法正常獲得此數(shù)據(jù)碼! |
|
| 5樓: | >>參與討論 |
| 作者: shifei74 于 2003/5/26 14:46:00 發(fā)布:
回復(fù) 1、好象是用RB0-RB3顯示RB4-RB7吧,那也不能肯定是RB中斷問(wèn)題 2、RB的內(nèi)部弱上拉是否設(shè)置? 3、或許用別的IO輸出就好了 |
|
| 6樓: | >>參與討論 |
| 作者: guangg 于 2003/5/26 16:38:00 發(fā)布:
謝謝shifei74,為什么換IO就好呢? 1、具體說(shuō)吧,RB0-RB3是將四位數(shù)據(jù)碼輸出給一個(gè)16選1的多路選擇器,多路選擇器的輸出即作為RB4的輸入,通過(guò)將數(shù)據(jù)碼遞增,來(lái)掃描16路中的電平變化,如當(dāng)數(shù)據(jù)碼為02H時(shí)多路選擇器的Y2端電平發(fā)生了變化,則會(huì)反應(yīng)到RB4口,而使產(chǎn)生RB中斷,這時(shí)中斷處理里會(huì)將DataCode保存下來(lái)。問(wèn)題就在數(shù)據(jù)碼為01--0fH時(shí)正常,而是00H進(jìn)不正常,將延時(shí)加大也不行。 2、RB內(nèi)部設(shè)置了弱上拉。 3、為什么用別的IO輸出會(huì)好呢? |
|
| 7樓: | >>參與討論 |
| 作者: shifei74 于 2003/5/27 12:22:00 發(fā)布:
回復(fù) 再提供幾個(gè)僅供參考意見(jiàn):(希未誤導(dǎo)) 1、PIC的寫(xiě)操作是讀修改寫(xiě)順序,所以有可能實(shí)際輸出與你所需不同,我有一個(gè)產(chǎn)品中對(duì)一RB口操作時(shí)導(dǎo)致另一RB口狀態(tài)變,而且設(shè)置上拉與不設(shè)置上拉時(shí)狀態(tài)改變不同,不過(guò)非RBIO未出現(xiàn)此問(wèn)題。 2、當(dāng)你輸出時(shí)RB的上拉也被關(guān)閉。 3、你可從0F遞減到00試試 4、用別的口試試是為了RB口只做中斷,避免切換 5、你的RB5-RB7狀態(tài)需確定,否則也會(huì)中斷 6、在中斷中需再次判斷RB4(延點(diǎn)時(shí)) 注:這幾年未用匯編,已不熟,我用PICC |
|
| 8樓: | >>參與討論 |
| 作者: guangg 于 2003/5/27 14:02:00 發(fā)布:
非常感謝shifei74 謝謝shifei74的解釋?zhuān)琑B5-RB7的狀態(tài)也很確定,也同樣要用做中斷,同RB4類(lèi)似,在中斷中也有再判斷。我改為從0F遞減到00也試過(guò)了,效果一樣,在00時(shí)會(huì)出錯(cuò)。將輸出的DataCode改用其它IO,只有等再過(guò)一段時(shí)了。 你說(shuō)的“PIC的寫(xiě)操作是讀修改寫(xiě)順序”是何意,我不是太明白;再就是RB有作為輸出(如RB0-RB3設(shè)為輸出、RB4-RB7設(shè)為輸入),是所有的上拉都被關(guān)閉了還是只關(guān)閉設(shè)為輸出的IO? |
|
| 9樓: | >>參與討論 |
| 作者: SHIFEI74 于 2003/5/27 17:51:00 發(fā)布:
回復(fù) PIC對(duì)一IO如RB1口寫(xiě)操作時(shí),實(shí)際是先讀全部RB口狀態(tài),再寫(xiě)回去。 輸出時(shí)應(yīng)是關(guān)閉相應(yīng)口的上拉(未測(cè)過(guò))。 再提醒注意一下:中斷中的數(shù)據(jù)保護(hù) |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |