亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 16c84的rb口中斷程序.txt

?? 單片機開發(fā)源代碼集錦 31例 需要的話請去下載
?? TXT
字號:

  Interrupts - Part II, Interrupt on RB Change 
Introduction 

This discussion deals with the interrupt on RB change feature. It assumes the reader is familiar with the general discussion dealing with interrupts. 

The PIC16C84 and most other PICs provide a feature where the program may be configured such that an interrupt occurs when there is a change on any of a number of inputs. With the 16C84 (and 16C554/558), the interrupt is caused when there is a change on the upper nibble of Port B, i.e., RB.4::RB.7. 

This might be used as a power saving technique. The processor is placed in the sleep mode and is activated only when the user changes the state of any on the four inputs. The processor then performs the defined task and goes back to sleep. 

We are planning to use this feature in a 2000 event, 4 Channel event data logger. An event causes a change on any of the four inputs, waking the processor. The processor determines which of the four channels on which the event occurred. It will then fetch a 32-bit elapsed time in seconds from a Dallas DS1602. 32-bits accommodates an elapsed time of some 125 years, which is a bit much. Thus, only the lower 30 elapsed time bits will be used and the two bits associated with the channel will be inserted in the bit 31 and 30 positions. These four bytes will be saved to a Microchip 24LC65 (8K by 8) EEPROM. 

Details 

The general format of configuring for the Wake Up on Change interrupt is the same as with the external or timer / counter overflow interrupts. When ready for this interrupt, bit RBIE in the INTCON register is set which specifically indentifies the type of interrrupt that will be entertained. The GIE bit is then set. 

On interrupt, the program vectors to location 004H. Note that interrupts are now disabled. The processor then performs the defined task, the RBIF is then cleared and the processor then returns from the interrupt service routine using the RETFIE command. Note that interrupts are now enabled. 

There is a subtlety associated with the wake-up on change. PORTB must be read. The processor then stores a copy of the high nibble. The RBIF is then set and interrupt occurs when the high nibble of PORTB differs from this copy. Thus, it is important that in the interrupt service routine that PORTB be read so as to update the copy. 

The following incorrect code in the interrupt service routine caused us to do a good deal of head scratching. 

BCF INTCON, RBIF
MOVF PORTB, W

Indeed, we were clearing the interrupt flag. However, as the state of the high nibble of PORTB still differed from the old copy, the processor immediately set the RBIF flag and on RETFIE, we were immediately interrupted. In fact, the MOVF PORTB, F did us no good whatever. 

The correct code was; 

MOVF PORTB, W
BCF INTCON, RBIF

What a difference! In performing the MOVF PORTB, W, the old copy of the high nibble of PORTB is updated with the current state. The flag is then cleared. Thus, interrupt will occur when the high nibble of PORTB again changes. 
In the following routine, the intent was to identify the "channel" on which the change occurred. Thus, in TOP, PORTB is fetched and saved in ORIGINAL. 

In the interrupt service routine, PORTB is fetched and saved in NEW. Thus, the processor now has the new value as the basis for establishing if a future change occurs. The program then ascertains the specific bit which changed, and flashes an LED at a rate depending on which bit caused the interrupt. The NEW then becomes the ORIGINAL, the RBIF is cleared and when RETFIE is executed, control passes back to the main program with interrupts enabled. It is important to note that PORTB is read, thus updating the processor's copy prior to clearing RBIF. 

Note that considerable time is spent flashing the LED in the interrupt service routine. If any of the four bits on the high nibble of PORTB should change prior to clearing RBIF, RBIF will again be set by the hardware as there is a change from the latest copy. Thus, on RETFIE, interupts are again enabled and another interrupt will occur. However, this is eactly what is desired; a bit on the high nibble of PORTB changed. 

I am none too certain I have been any too clear. Always read PORTB so as to update the processor's reference prior to clearing RBIF. Failure to do so may cause a false interrupt as the processor compares the current state of the high nibble of PORTB with the most recent read. That is, the same change, which is in fact no change, will cause an interrupt. 

Note that in this routine, the W and STATUS registers were not saved on entry into the interrupt service routine and restored prior to exit as there was nothing of value to save. Rather, the processor simply goes to sleep and awaits the interrupt. 



; WAKE_UP.ASM
;
; This program is intended to illustrate the WAKE-UP on change feature
; associated with many PICs.
; 
; RB interrupts are enabled and the processor goes into a sleep mode. 
; On interrupt, the specific RB interrupt which caused the interrupt
; is determined and an LED is flashed 10 times at a speed determined 
; the input which changed. 
;
; Copyright, Locksley Haynes, Morgan State University, Nov 22, '97

LIST p=16c84
#include <c:\mplab\p16c84.inc>
__CONFIG 11H

CONSTANT LED=0 ; PORTA pin for LED

CONSTANT CH3=7 ; CH3 corresponds to PORTB.7
CONSTANT CH2=6
CONSTANT CH1=5
CONSTANT CH0=4 ; CH0 corresponds to PORTB.4

CONSTANT VARS=0CH

LOOP1 EQU VARS+0 ; outter timing loop
LOOP2 EQU VARS+1 ; inner timing loop
LED_CNT EQU VARS+2 ; times LED is winked


ORIGINAL EQU VARS+3
NEW EQU VARS+4
CHANGE EQU VARS+5
N EQU VARS+6

ORG 000H

CLRWDT
GOTO TOP

ORG 004H

GOTO WAKE_UP

TOP:
BCF OPTION_REG, 7 ; enable internal pullups
BSF STATUS, RP0
MOVLW 0F0H ; RB.7 - RB.4 are inputs
MOVWF TRISB
BCF STATUS, RP1

BTFSS STATUS, NOT_TO ; not a watch dog timer reset
GOTO TOP_1

; sample PORTB before going to sleep
MOVF PORTB, W ; fetch the current state
MOVWF ORIGINAL ; current state in high nibble

TOP_1:
BSF INTCON, GIE ; enable general interupts
BSF INTCON, RBIE ; enable interrupt on change

L1:
SLEEP
NOP
GOTO L1

WAKE_UP: ; interrupt service routine
MOVF PORTB, W ; sample changed state of pins
MOVWF NEW ; this will become the new original
XORWF ORIGINAL, W
MOVWF CHANGE ; 1's now in high nibble now identifies
; the bit that has changed
CLRF N ; set index to 0
BTFSC CHANGE, CH0
GOTO BLINK

INCF N, F ; N=1
BTFSC CHANGE, CH1
GOTO BLINK

INCF N, F ; N=2
BTFSC CHANGE, CH2
GOTO BLINK

INCF N, F
GOTO BLINK

BLINK: ; N is either 0, 1, 2 or 3 corresponding to the channel
; this is now mapped into a delay

CALL DELAY_LOOKUP
MOVWF LOOP1 ; save the delay in LOOP1
GOTO BLINK_AT_SPEED

DELAY_LOOKUP: ; map N into 100, 150, 200 or 250 msecs
MOVF N, W
ADDWF PCL, F
DT .100, .150, .200, .250

BLINK_AT_SPEED:
MOVLW .10
MOVWF LED_CNT
L2:
BSF PORTA, LED
CALL DELAY
CALL DELAY
BCF PORTA, LED
CALL DELAY
CALL DELAY
DECFSZ LED_CNT, F
GOTO L2
MOVF NEW, W
MOVWF ORIGINAL ; new original states 
BCF INTCON, RBIF ; clear interrupt flag
RETFIE

DELAY: 
L3:
MOVLW .110
MOVLW LOOP2
L4:
CLRWDT
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ LOOP2, F
GOTO L4
DECFSZ LOOP1, F
GOTO L3
RETURN

END

 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久最新网址| 亚洲香蕉伊在人在线观| 一区二区三区精密机械公司| 免费在线观看精品| 成人av片在线观看| 久久综合色综合88| 日韩和欧美的一区| 在线欧美日韩精品| 欧美日韩在线播放三区| 欧美大片一区二区| 亚洲人成网站色在线观看| 精品一区二区三区久久| 欧美最猛性xxxxx直播| 国产精品乱码妇女bbbb| 国产麻豆精品在线| 欧美一区二区在线观看| 亚洲国产中文字幕在线视频综合 | 一区二区三区免费观看| 欧美性猛交xxxxxxxx| 久久久国产综合精品女国产盗摄| 欧美一区二区三区在线视频| 91免费版在线| 中文字幕av不卡| 国产麻豆一精品一av一免费 | 亚洲综合一区二区三区| av电影在线观看一区| 国产亲近乱来精品视频| 国产一区二区在线看| 欧美xfplay| 久久精品国产久精国产| 欧美一级淫片007| 久久国产精品99久久人人澡| 日韩一级完整毛片| 久久精品国内一区二区三区| 亚洲精品在线免费观看视频| 国产一区亚洲一区| 中文字幕的久久| 色婷婷狠狠综合| 亚洲综合色网站| 欧美一区二区福利在线| 国产呦精品一区二区三区网站| 久久中文娱乐网| 粉嫩av一区二区三区粉嫩 | 成人精品亚洲人成在线| 国产精品久久久久久久久免费丝袜 | 中文字幕在线观看不卡视频| 成人动漫一区二区| 亚洲一区二三区| 5858s免费视频成人| 激情图片小说一区| 国产精品理论在线观看| 欧美亚洲动漫另类| 开心九九激情九九欧美日韩精美视频电影| 日韩欧美国产综合| 成人免费视频视频| 亚洲观看高清完整版在线观看| 在线电影国产精品| 国产高清在线精品| 一区二区三区四区不卡在线 | 亚洲一区二区三区视频在线播放| 欧美日韩成人在线| 国产一区二区三区在线观看精品 | 国产亚洲欧美色| 色婷婷亚洲婷婷| 精品一区二区在线看| 亚洲欧美综合网| 日韩欧美国产一区二区在线播放| 成人精品亚洲人成在线| 日韩综合一区二区| 国产精品午夜春色av| 56国语精品自产拍在线观看| 国产.欧美.日韩| 亚洲大片一区二区三区| 久久精品一区二区三区不卡牛牛 | 亚洲综合久久久久| 777奇米四色成人影色区| 精品国产三级电影在线观看| 久久草av在线| 欧美精品久久久久久久多人混战| 亚洲欧美成人一区二区三区| 91亚洲精品久久久蜜桃| 日本一区二区三区高清不卡| 国产呦萝稀缺另类资源| 久久久精品国产99久久精品芒果| 天天色综合天天| 色综合天天做天天爱| 国产精品三级视频| 欧美国产视频在线| 欧美一区二区黄| 欧美日韩电影一区| 色综合久久中文综合久久牛| 国产美女精品人人做人人爽| 蜜臀av在线播放一区二区三区| 曰韩精品一区二区| 日韩毛片一二三区| 久久精品人人做| 精品国产污污免费网站入口| 欧美一区二区网站| 在线区一区二视频| 色综合天天综合给合国产| 国产一区二区三区最好精华液| 日韩高清一级片| 视频精品一区二区| 亚洲成人av一区| 亚洲国产欧美一区二区三区丁香婷| 中文字幕在线观看一区二区| 国产精品久线在线观看| 欧美国产精品一区二区三区| 久久精品日韩一区二区三区| 久久看人人爽人人| 精品国产91九色蝌蚪| 精品少妇一区二区三区视频免付费 | 欧美精品一二三| 欧美视频一区在线| 欧美日韩国产一级片| 精品视频123区在线观看| 欧美日韩久久久久久| 7777精品伊人久久久大香线蕉经典版下载 | 欧美日韩aaaaa| 欧美日本一区二区在线观看| 欧美精品高清视频| 欧美一二三在线| 久久久亚洲高清| 国产亚洲va综合人人澡精品| 国产区在线观看成人精品| 国产精品久久久久一区二区三区| 国产精品美女久久福利网站| 曰韩精品一区二区| 日av在线不卡| 岛国av在线一区| 色成年激情久久综合| 91精品视频网| 久久精品在线免费观看| ●精品国产综合乱码久久久久 | 热久久国产精品| 激情综合色丁香一区二区| 国产精品12区| 99久久精品国产导航| 欧美日韩情趣电影| 国产日韩欧美精品一区| 一卡二卡欧美日韩| 欧美aⅴ一区二区三区视频| 风流少妇一区二区| 在线观看日产精品| 精品91自产拍在线观看一区| 中文字幕制服丝袜成人av| 首页国产丝袜综合| 国产精品一区一区三区| 99r国产精品| 欧美电影免费观看完整版| 国产精品日产欧美久久久久| 亚洲一区二区三区不卡国产欧美| 日韩中文字幕区一区有砖一区| 大尺度一区二区| 欧美美女一区二区三区| 国产精品拍天天在线| 亚洲成人福利片| 99久久国产免费看| 日韩片之四级片| 亚洲国产成人av好男人在线观看| 国产乱码精品一区二区三区忘忧草| 欧美天堂一区二区三区| 国产精品丝袜一区| 日日夜夜精品视频免费| 色婷婷精品大在线视频| 国产婷婷一区二区| 视频一区视频二区中文| 91黄色激情网站| 国产精品久久久久久亚洲毛片| 蜜臀av性久久久久av蜜臀妖精 | 亚洲国产精品久久久久秋霞影院 | 亚洲三级在线播放| 狠狠色丁香久久婷婷综合丁香| 欧美三级蜜桃2在线观看| 国产精品国产三级国产aⅴ中文| 日本不卡一区二区三区| 91国偷自产一区二区三区成为亚洲经典| 欧美大片拔萝卜| 亚洲第一主播视频| 99久久综合国产精品| 久久亚洲一区二区三区明星换脸 | 一区二区久久久| 成人动漫中文字幕| 国产欧美综合色| 韩国在线一区二区| 日韩女优av电影| 日本va欧美va瓶| 91精品蜜臀在线一区尤物| 亚洲专区一二三| 在线视频一区二区免费| 亚洲一区二区三区自拍| 波多野结衣精品在线| 欧美国产精品久久| 北岛玲一区二区三区四区| 精品国产在天天线2019| 麻豆视频观看网址久久| 日韩视频中午一区| 精品一区二区影视| 久久亚洲一级片| 国产美女一区二区三区|