音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 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.7腳電平變化引起中斷的實(shí)驗(yàn)中的疑問(wèn)?

作者:zdtdl 欄目:單片機(jī)
關(guān)于RB.7腳電平變化引起中斷的實(shí)驗(yàn)中的疑問(wèn)?
小弟又做了一個(gè)實(shí)驗(yàn),實(shí)驗(yàn)功能要求及實(shí)現(xiàn)方法(使用20MHZ晶振):
從RB.7腳上輸入一個(gè)信號(hào)源,是噪聲時(shí)脈沖雜亂一片,正常信號(hào)到來(lái)時(shí),脈沖穩(wěn)定,一個(gè)周期中高電平60us而低電平4us,單片機(jī)通過(guò)檢測(cè)脈沖寬度以識(shí)別正確的信號(hào)。
利用pic單片機(jī)RB7腳具有的電平變化產(chǎn)生中斷的功能,并利用TMR1定時(shí)器計(jì)時(shí),RB.7腳電平變化產(chǎn)生中斷后定時(shí)器開始計(jì)時(shí),直到再次產(chǎn)生同樣電平變化產(chǎn)生中斷為止停止計(jì)時(shí),將定時(shí)器記錄的時(shí)間長(zhǎng)度與一個(gè)脈沖周期64us比較,考慮執(zhí)行中斷等指令耗費(fèi)的時(shí)間,只要記錄時(shí)間寬度在50us~65us之間都判斷為正確信號(hào)(具體程序中按連續(xù)檢測(cè)判斷兩次的方式確認(rèn)),通過(guò)RA.0上接發(fā)光管反復(fù)顯示說(shuō)明。其他的都認(rèn)為是噪聲。


編程試驗(yàn)以后發(fā)現(xiàn)有以下疑問(wèn):
1.RB.7腳上發(fā)生從1到0電平變化時(shí)才產(chǎn)生中斷,但數(shù)據(jù)手冊(cè)上沒有提到,不知道是不是因?yàn)楦唠娖綍r(shí)間太長(zhǎng),還是RB.7本身特性就如此?
  我的中斷程序如下
        MOVF     STATUS,W          ;保護(hù)中斷現(xiàn)場(chǎng)
        MOVWF    status_temp      
        BTFSS    INTCON,RBIF      ; RBIF標(biāo)記位是否為1
        goto     other_int
        BCF      INTCON,RBIF      ; 是RB中斷,清除中斷標(biāo)志RBIF  
        BTFSC    PORTB,7          ; 讀RB.7,看是否是因0到1的電平變化
        GOTO     end_int          ;如不是,則中斷返回,繼續(xù)等待下一次中斷
        BSF      TEST,0           ;如果是,則中斷產(chǎn)生檢測(cè)位置1,進(jìn)行數(shù)據(jù)處理
        INCF     JS,1             ;中斷次數(shù)單元加1
        GOTO     end_int        

other_int                         ; 其他中斷服務(wù)代碼
        BCF      STATUS,RP0
        nop                       ; other isr code can be added
end_int
        MOVF   status_temp,W
        MOVWF  STATUS        
        RETFIE

2.實(shí)驗(yàn)過(guò)程中發(fā)現(xiàn)pic還可以通過(guò)RB.7腳竊電,正常信號(hào)的高電平為+5V,當(dāng)正常信號(hào)加在RB.7上時(shí),單片機(jī)可以正常工作,RA.0發(fā)光管按正常反復(fù)指示。單片機(jī)VDD腳電壓為0V,MCLR腳為高電平,當(dāng)發(fā)光管亮?xí)r,信號(hào)電平幅度隨著降低。但是要是脈沖信號(hào)源與之不共地,則信號(hào)不能讓單片機(jī)工作。這樣單片機(jī)是什么工作狀況呢?是否會(huì)不穩(wěn)定?如果這樣沒什么問(wèn)題,那有的簡(jiǎn)單的系統(tǒng)中單片機(jī)耗電就可以更少了,不知道各位大俠有什么見解?


2樓: >>參與討論
xieyuanbin
PIC中的端口除與MCLR共用腳之外均有鉗位二極管到電源
所以如果VDD沒有供電但I(xiàn)O腳上有共地的電的話MCU還能啟動(dòng).但隨負(fù)載不同工作并不穩(wěn)定.
當(dāng)IO口設(shè)置成輸入時(shí)如果信號(hào)源平時(shí)也是高阻的話應(yīng)該接上拉或下拉電阻以防干擾.

3樓: >>參與討論
martin
re
1.RB.7腳上發(fā)生從1到0電平變化時(shí)才產(chǎn)生中斷,但數(shù)據(jù)手冊(cè)上沒有提到,不知道是不是因?yàn)楦唠娖綍r(shí)間太長(zhǎng),還是RB.7本身特性就如此?
>>PORTB4-7的狀態(tài)變化中斷是從高到低或從低到高都可以中斷,但每次退出中斷前要讀一次PORTB,否則下一次下一次中斷將不產(chǎn)生。
2.謝版主已經(jīng)給你解答,在Vdd不供電時(shí),IO的電壓會(huì)通過(guò)鉗位二極管給Vdd供電。

4樓: >>參與討論
zdtdl
多謝兩位斑竹,第二疑問(wèn)解決,但第一問(wèn)中
我已經(jīng)在中斷程序中用   BTFSC    PORTB,7      語(yǔ)句代替讀PORTB口的功能,單片機(jī)能夠繼續(xù)進(jìn)入中斷說(shuō)明這個(gè)不是問(wèn)題的關(guān)鍵,我將以高低電平相同寬度的脈沖信號(hào)進(jìn)行實(shí)驗(yàn),看看是否有新的發(fā)現(xiàn)

5樓: >>參與討論
zdtdl
將我試驗(yàn)的結(jié)論陳述如下,請(qǐng)大俠們指教
為了排除外部信號(hào)的因素,我先用儀器信號(hào)源輸出不同占空比的高低脈沖然后輸入到RB.7腳進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)現(xiàn)象如下:
當(dāng)RB.7腳檢測(cè)1到0的電平變化(下降沿觸發(fā))即用 BTFSC    PORTB,7  語(yǔ)句讀PORTB口時(shí),不論輸入信號(hào)高低電平脈寬誰(shuí)長(zhǎng)誰(shuí)短,只要中斷處理時(shí)間足夠小滿足保持時(shí)間范圍內(nèi),就可以觸發(fā)中斷程序。
但當(dāng)RB.7腳檢測(cè)0到1的電平變化(上升沿觸發(fā))即用 BTFSS    PORTB,7  語(yǔ)句讀PORTB口時(shí),只有當(dāng)?shù)碗娖矫}寬小于高電平脈寬時(shí),才能觸發(fā)中斷程序;反之要是高電平脈寬大于低電平脈寬,則不能產(chǎn)生中斷。
只要高低電平脈寬相同,即信號(hào)是占空比相同的方波,則RB.7腳即能被上升沿也能被下降沿觸發(fā)中斷。

我在用外部信號(hào)進(jìn)行試驗(yàn)中發(fā)現(xiàn),以 BTFSC    PORTB,7 進(jìn)行判斷時(shí),誤觸發(fā)現(xiàn)象比較嚴(yán)重,但以 BTFSS    PORTB,7 進(jìn)行判斷,則無(wú)法產(chǎn)生中斷。

為了實(shí)驗(yàn)方便,以下是我簡(jiǎn)化判斷后的測(cè)試程序:

;************************************************************************
;簡(jiǎn)單的RB腳電平變化產(chǎn)生中斷測(cè)試程序
;       file: sy.asm       
        list  P=16F73      ;  告訴編譯程序使用何種PIC單片機(jī)
        #include  "P16F73.inc"     ;  定義了特殊寄存器等內(nèi)容的頭文件  
        __CONFIG _PWRTE_ON & _HS_OSC & _WDT_OFF   ;  配置字
        
;變量定義

reg1           EQU 0x30          ;計(jì)數(shù)單元1
reg2           EQU 0x31          ;計(jì)數(shù)單元2
reg3           EQU 0x32          ;計(jì)數(shù)單元3
reg4           EQU 0x33          ;計(jì)數(shù)單元4
JS             EQU 0x34          ;中斷次數(shù)計(jì)數(shù)單元
TEST           EQU 0x35          ;測(cè)試單元,TEST.0為中斷產(chǎn)生檢測(cè)位
R1             EQU 0x36          ;計(jì)數(shù)單元5
R2             EQU 0x37          ;計(jì)數(shù)單元6
R3             EQU 0x38          ;計(jì)數(shù)單元7

w_temp            EQU      0x70        
status_temp       EQU      0x71        
pclath_temp       EQU      0x72                              

;************************************************************************

         ORG  0x00              ;復(fù)位向量地址為0x00
         NOP
         GOTO   MAIN
         ORG  0x04
         GOTO   BREAK           ;跳轉(zhuǎn)到中斷子程序
                              
MAIN     
         BSF    STATUS,RP0        ;換bank1
         MOVLW  B'11000000'       ;1代表輸入,0代表輸出   
         MOVWF  TRISA
         MOVLW  B'10000000'
         MOVWF  TRISB             ;RB7作為信號(hào)輸入口,電平變化產(chǎn)生中斷
         MOVLW  0x07
         MOVWF  ADCON1          ;RA口作為數(shù)字I/O
         BCF    STATUS,RP0      ;換bank0              
         CLRF   PORTB           ;初始化PORTA/B口
         BCF    PORTA,0   
         CLRF   TEST            ;測(cè)試單元清零
         CLRF   JS

         BCF    INTCON,PEIE     ;關(guān)閉第二梯隊(duì)外圍中斷
         BCF    INTCON,INTE     ;關(guān)閉INT中斷允許位
         BSF    INTCON,RBIE     ;打開RB中斷允許位
         BSF    INTCON,GIE      ;打開總中斷允許位                        
         
next1     BTFSS    TEST,0       ;中斷檢測(cè)位是否為1,產(chǎn)生中斷則跳轉(zhuǎn)    
          GOTO     next1        ;為0沒有中斷產(chǎn)生則等待          
          BCF      INTCON,GIE   ;關(guān)閉總中斷允許位
          BCF      TEST,0       ;中斷檢測(cè)位清零

          MOVF     JS,0
          SUBLW    04H        
6樓: >>參與討論
zdtdl
改成RB.0外部中斷腳來(lái)檢測(cè)信號(hào),又有疑問(wèn)了???
用另一個(gè)16F73.html">PIC16F73單片機(jī)(機(jī)2)作為信號(hào)產(chǎn)生源,一個(gè)管腳輸出占空比不同的脈沖信號(hào)(實(shí)驗(yàn)時(shí)用40us/60us的脈沖波),這邊的單片機(jī)(機(jī)1)RB.0腳接信號(hào)輸入線,發(fā)現(xiàn)機(jī)1無(wú)法正常工作,從現(xiàn)象看是一次中斷后不能繼續(xù)產(chǎn)生中斷。
不知道RB0/INT外部中斷腳是否有其他特殊設(shè)置要求,為何上升沿或者下降沿均不能產(chǎn)生中斷。還有一個(gè)奇怪現(xiàn)象:當(dāng)機(jī)2加電時(shí),RB0/INT腳上的脈沖波消失,代替出現(xiàn)2.8V左右的電平,相連的機(jī)1管腳也同樣出現(xiàn)2.8V電平,脈沖波不見了,于是就機(jī)1更不會(huì)產(chǎn)生中斷了:(
機(jī)1程序如下:


;************************************************************************     
        list  P=16F73      ;  告訴編譯程序使用何種PIC單片機(jī)
        #include  "P16F73.inc"     ;  定義了特殊寄存器等內(nèi)容的頭文件  
        __CONFIG _PWRTE_ON & _HS_OSC & _WDT_OFF   ;  配置字
        
;變量定義

reg1           EQU 0x30          ;計(jì)數(shù)單元1
reg2           EQU 0x31          ;計(jì)數(shù)單元2
reg3           EQU 0x32          ;計(jì)數(shù)單元3
reg4           EQU 0x33          ;計(jì)數(shù)單元4
JS             EQU 0x34          ;中斷次數(shù)計(jì)數(shù)單元
TEST           EQU 0x35          ;測(cè)試單元,TEST.0為中斷產(chǎn)生檢測(cè)位
R1             EQU 0x36          ;計(jì)數(shù)單元5
R2             EQU 0x37          ;計(jì)數(shù)單元6
R3             EQU 0x38          ;計(jì)數(shù)單元7

w_temp            EQU      0x70        
status_temp       EQU      0x71        
pclath_temp       EQU      0x72                              

;************************************************************************

         ORG  0x00              ;復(fù)位向量地址為0x00
         NOP
         GOTO   MAIN
         ORG  0x04
         GOTO   BREAK           ;跳轉(zhuǎn)到中斷子程序
                              
MAIN     
         BSF    STATUS,RP0        ;換bank1
         BCF    OPTION_REG,INTEDG ;RB0/INT腳“1”上升沿/“0”下降沿觸發(fā)
         MOVLW  B'11000000'       ;1代表輸入,0代表輸出   
         MOVWF  TRISA
         MOVLW  B'00000001'
         MOVWF  TRISB             ;RB0作為外部信號(hào)輸入口
         MOVLW  0x07
         MOVWF  ADCON1          ;RA口作為數(shù)字I/O
         BCF    STATUS,RP0      ;換bank0              
         CLRF   PORTB           ;初始化PORTA/B口
         BCF    PORTA,0   
         CLRF   TEST            ;測(cè)試單元清零
         CLRF   JS

         BCF    INTCON,PEIE     ;關(guān)閉第二梯隊(duì)外圍中斷         
         BCF    INTCON,RBIE     ;關(guān)閉RB電平變化中斷允許位
         BSF    INTCON,INTE     ;打開INT中斷允許位
         BSF    INTCON,GIE      ;打開總中斷允許位                        
         
next1     BTFSS    TEST,0       ;中斷檢測(cè)位是否為1,產(chǎn)生中斷則跳轉(zhuǎn)    
          GOTO     next1        ;為0沒有中斷產(chǎn)生則等待          
          BCF      INTCON,GIE   ;關(guān)閉總中斷允許位
          BCF      TEST,0       ;中斷檢測(cè)位清零             
         
          MOVLW    0xFF          ;500ms左右延時(shí)
          MOVWF    R1
          MOVLW    0xFA
       &nb
7樓: >>參與討論
laoben
RB0 引腳的中斷緩沖器輸入是施密特觸發(fā)輸入
一個(gè)一個(gè)解決你的問(wèn)題

1- 改成RB.0外部中斷腳來(lái)檢測(cè)信號(hào),又有疑問(wèn)了???
PORTB 在多數(shù)情況下是TTL 電平輸入的,所以當(dāng)有一個(gè)3V 電平輸入( VDD = 5V)時(shí),讀端口的結(jié)果將為1。然而RB0 引腳的中斷緩沖器輸入是施密特觸發(fā)輸入,它的高電平輸入要求電壓比TTL的高電平輸入要求電壓要高。所以讀RB0引腳為1,但卻可能無(wú)法產(chǎn)生中斷。RB0引腳中斷采用具有滯后效應(yīng)的施密特觸發(fā)器輸入,可以降低噪聲。引腳上輸入的短噪聲脈沖可能使數(shù)據(jù)產(chǎn)生錯(cuò)誤,這與噪聲引起中斷不是一回事。(摘自PICmicro® 中檔單片機(jī)系列參考手冊(cè)9-17頁(yè))

8樓: >>參與討論
zdtdl
那具體到RB0外中斷編程硬件和軟件需要注意哪些問(wèn)題呢?
現(xiàn)在對(duì)我來(lái)說(shuō)硬件軟件都有問(wèn)題,硬件單片機(jī)上電后RB0被置為2.8V的高電平保持不變。軟件上看來(lái)問(wèn)題最大,一次中斷后就不再產(chǎn)生中斷…………

9樓: >>參與討論
zdtdl
不好意思,終于發(fā)現(xiàn)是硬件的問(wèn)題,換了一塊電路板一切正常
RB0外中斷腳一切正常,只是RB7電平變化中斷腳依然存在那個(gè)上升沿不能觸發(fā)中斷的問(wèn)題…………

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
dspic30f6014與AT45DB081B接口
有關(guān)七彩閃燈的程序編寫問(wèn)題
處理數(shù)碼管上的電磁干擾的問(wèn)題?
關(guān)于 MICROCHIP 的芯片I/O口的問(wèn)題。
大家來(lái)看看
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)