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

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

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

?? mcu眾多的開發實例
?? 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一区二区三区免费野_久草精品视频
欧美优质美女网站| 久久久久综合网| 成人高清在线视频| 日本伊人午夜精品| 国产精品国产馆在线真实露脸| 欧美日韩夫妻久久| 99久久久久久| 国产精品正在播放| 蜜臀av一级做a爰片久久| 国产精品污www在线观看| 制服丝袜av成人在线看| aaa国产一区| 国产精品一区二区免费不卡 | 91麻豆精品一区二区三区| 久久99热99| 日韩专区在线视频| 一区二区三区四区乱视频| 国产精品久久久一区麻豆最新章节| 欧美精品久久一区| 欧美三级日韩三级国产三级| 99久久99久久综合| 成人性视频网站| 国产成人h网站| 国产一区二区三区在线观看精品 | 日韩一区二区在线免费观看| 91久久一区二区| 91小视频免费观看| 不卡视频一二三| 成人性视频免费网站| 国产成人av电影在线播放| 国产乱子轮精品视频| 国产自产v一区二区三区c| 蜜桃一区二区三区在线| 日韩精品一级中文字幕精品视频免费观看| 亚洲色图另类专区| 亚洲欧美成人一区二区三区| 最新热久久免费视频| 国产精品每日更新| 国产精品国产馆在线真实露脸| 中文字幕精品在线不卡| 中文字幕av一区二区三区| 国产偷国产偷精品高清尤物 | 色av成人天堂桃色av| 成人午夜在线免费| 成人动漫av在线| 99久精品国产| 在线精品视频一区二区三四| 欧美在线播放高清精品| 精品视频一区三区九区| 欧美一区二区在线不卡| 日韩欧美国产一区在线观看| 精品久久久久99| 久久久久久久一区| 中文字幕亚洲区| 一个色综合av| 日韩在线a电影| 精一区二区三区| 国产成人综合亚洲网站| jlzzjlzz亚洲女人18| 日本韩国精品在线| 4438x成人网最大色成网站| 精品裸体舞一区二区三区| 久久久久99精品一区| 国产精品青草综合久久久久99| 亚洲日韩欧美一区二区在线| 亚洲h在线观看| 韩国欧美国产一区| 成人免费看的视频| 一本色道亚洲精品aⅴ| 宅男噜噜噜66一区二区66| 久久伊人蜜桃av一区二区| 亚洲欧洲性图库| 午夜久久久久久| 国产成人精品1024| 欧美影院精品一区| 久久综合九色综合欧美就去吻 | 亚洲成人免费视频| 九九久久精品视频| 色婷婷久久综合| 日韩免费福利电影在线观看| 国产精品免费av| 日本不卡视频在线观看| 夫妻av一区二区| 69久久夜色精品国产69蝌蚪网| 国产偷v国产偷v亚洲高清| 亚洲成人777| 国产91高潮流白浆在线麻豆| 欧美二区三区91| 国产精品久久久久一区| 麻豆精品在线看| 色噜噜狠狠成人网p站| 久久色视频免费观看| 亚洲午夜免费视频| 成人三级在线视频| 欧美一区二区福利视频| 专区另类欧美日韩| 国产乱码一区二区三区| 777欧美精品| 亚洲私人影院在线观看| 久久草av在线| 欧美剧情片在线观看| 亚洲欧美另类在线| 国产美女精品人人做人人爽| 欧美日韩国产一级| 亚洲桃色在线一区| 懂色av噜噜一区二区三区av| 日韩欧美区一区二| 亚洲成a人片在线不卡一二三区| 丁香桃色午夜亚洲一区二区三区| 91精品久久久久久久久99蜜臂| 中文字幕日韩精品一区| 国产成人免费视频网站高清观看视频 | 欧美肥妇bbw| 一区二区欧美在线观看| 99re这里只有精品首页| 国产日韩欧美精品综合| 欧美aa在线视频| 欧美精品乱码久久久久久| 亚洲国产欧美一区二区三区丁香婷| 成人国产精品免费观看动漫| 国产夜色精品一区二区av| 久久精品99国产国产精| 欧美丰满一区二区免费视频| 亚洲国产精品综合小说图片区| 欧美tk—视频vk| 五月婷婷激情综合网| 欧美亚洲国产一区在线观看网站| ...xxx性欧美| 97超碰欧美中文字幕| 国产精品久久久久久户外露出| 国产精品影视在线| 久久精品亚洲麻豆av一区二区| 精品一区二区三区在线视频| 91精品国产品国语在线不卡| 日韩av电影免费观看高清完整版 | 成人综合婷婷国产精品久久免费| 国产网站一区二区| 国产成人精品免费在线| 欧美极品美女视频| 成人三级伦理片| 亚洲免费观看高清完整版在线观看熊| 91年精品国产| 一区二区三区在线观看国产| 欧美日韩中文字幕一区| 亚洲大片精品永久免费| 91麻豆精品久久久久蜜臀| 男人的天堂久久精品| 精品日韩欧美在线| 国产.欧美.日韩| 亚洲欧洲日产国码二区| 欧美午夜一区二区| 日韩av成人高清| 久久先锋影音av| 99久久精品免费精品国产| 一区二区视频免费在线观看| 欧美日韩一级片网站| 久久99精品一区二区三区三区| 久久久国产综合精品女国产盗摄| 成人黄色网址在线观看| 亚洲狠狠丁香婷婷综合久久久| 欧美日产国产精品| 国产一区二区三区av电影| 中文字幕在线免费不卡| 欧美日韩三级在线| 国产资源在线一区| 亚洲男人都懂的| 91精品国产色综合久久不卡电影 | 日产欧产美韩系列久久99| 2021国产精品久久精品| 91网上在线视频| 日产欧产美韩系列久久99| 国产色91在线| 欧美私模裸体表演在线观看| 久久99精品久久久久久动态图| 亚洲国产高清aⅴ视频| 色哟哟国产精品免费观看| 日韩av一区二区三区四区| 久久精品亚洲精品国产欧美| 91黄色免费版| 裸体一区二区三区| 亚洲欧洲日产国产综合网| 91精品国产91久久久久久一区二区 | 精品国产一区久久| 91丨porny丨首页| 久久国产精品99久久久久久老狼| 最新热久久免费视频| 日韩免费成人网| 色综合久久久久综合体| 极品少妇一区二区三区精品视频 | www.亚洲人| 日韩黄色片在线观看| 一色桃子久久精品亚洲| 精品美女在线播放| 在线免费精品视频| 成人免费看片app下载| 久久99久久精品欧美| 亚洲成av人影院在线观看网| 国产精品久久久久精k8| 久久奇米777| 日韩一卡二卡三卡四卡|