音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(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ī)
關(guān)于RB中斷的問(wèn)題
在運(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
我也碰到一個(gè)跟你差不多的問(wèn)題
就是,w寄存器本來(lái)是按我們給的付值,沒(méi)給它就不會(huì)變,但是我碰到了 ,就是w寄存器無(wú)緣無(wú)故的會(huì)變掉,而且后面對(duì)w寄存器的操作執(zhí)行不了
不知道怎么回事,請(qǐng)幫忙解答


3樓: >>參與討論
Wxy8030
不是很明白~~~~~~~~~~~
你B口的高四位是輸出還是輸入??

* - 本貼最后修改時(shí)間:2003-5-24 19:11:12 修改者:Wxy8030

4樓: >>參與討論
guangg
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
回復(fù)
1、好象是用RB0-RB3顯示RB4-RB7吧,那也不能肯定是RB中斷問(wèn)題
2、RB的內(nèi)部弱上拉是否設(shè)置?
3、或許用別的IO輸出就好了

6樓: >>參與討論
guangg
謝謝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
回復(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
非常感謝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
回復(fù)
PIC對(duì)一IO如RB1口寫(xiě)操作時(shí),實(shí)際是先讀全部RB口狀態(tài),再寫(xiě)回去。
輸出時(shí)應(yīng)是關(guān)閉相應(yīng)口的上拉(未測(cè)過(guò))。
再提醒注意一下:中斷中的數(shù)據(jù)保護(hù)

參與討論
昵稱(chēng):
討論內(nèi)容:
 
 
相關(guān)帖子
愿意討論一下關(guān)于枚舉參數(shù)的引用嗎?
一個(gè)picc的連接錯(cuò)誤!
誰(shuí)有pic的關(guān)于I2C的中文資料
各位大哥幫一下忙,我想問(wèn)一下
有關(guān)24c02
免費(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)