www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]作為一個簡單實用的示例,圖1中的電路利用一個8位PIC微控制器控制一個4位LED顯示器,顯示出按下了哪個按鈕。當(dāng)任意按鈕被按下時,比較器中斷程序會立即作出響應(yīng)。

作為一個簡單實用的示例,圖1中的電路利用一個8位PIC微控制器控制一個4位LED顯示器,顯示出按下了哪個按鈕。當(dāng)任意按鈕被按下時,比較器中斷程序會立即作出響應(yīng)。該程序會在VREF值之間進行循環(huán),直至比較器輸出COUT返回高電平,表明該按鈕被按下。完整注釋的匯編程序源代碼總共不到100字。該代碼并未作過度優(yōu)化,從而可方便理解或易于轉(zhuǎn)化到其他控制器上。

 

匯編程序源代碼:

; MULTIBTN.ASM: sensing upto 15 pushbuttons with one I/O (pin6: GP1/CIN-)

; BENABADJI Noureddine - ORAN - Dec. 11...14th, 2013

;

Errorlevel -302 ; avoid warning #302: Register in operand not in bank0.

; Ensure that bank bits are correct.

List P = 12F683

#include "p12f683.inc"

__CONFIG _INTOSCIO&_MCLRE_OFF&_PWRTE_ON&_WDT_OFF&_FCMEN_OFF&_IESO_OFF&_BOD_ON&_CPD_OFF&_CP_OFF

#define LED1 GPIO, 0 ; output bit0 of the 4-bit binary LED display

#define LED2 GPIO, 2 ; output bit1 of the 4-bit binary LED display

#define LED3 GPIO, 4 ; output bit2 of the 4-bit binary LED display

#define LED4 GPIO, 5 ; output bit3 of the 4-bit binary LED display

;----------------------------- define variables ------------------------------

CBLOCK 0x20 ; bank0 = [0x20...0x7F] = 94 bytes

;delay

cnt1, cnt2, cnt3 ; counters

ENDC

;------------------------------------------------------------------------------

BANK0 macro

BCF STATUS, RP0 ; bank0

endm

;------------------------------------------------------------------------------

BANK1 macro

BSF STATUS, RP0 ; bank1

endm

;------------------------------------------------------------------------------

SIregGEval8b macro file, val, jmpOk ; if (file >= val) goto jmpOk ;

MOVLW val

SUBWF file, w ; w = file - val

BTFSC STATUS, C

GOTO jmpOk ; yes

endm

;/////////////////////////////////////////////////////////////////////////////

; MAIN PROGRAM

;/////////////////////////////////////////////////////////////////////////////

ORG 0x00 ; reset vector

GOTO Setup

ORG 0X04 ; interrupt vector

GOTO IntCmp

;/////////////////////////////////////////////////////////////////////////////

;-----------------------------------------------------------------------------

LEDsOFF

CALL Delay256ms

CLRF GPIO ; all LEDs off

RETLW 0

;-----------------------------------------------------------------------------

Delay256ms

CLRF cnt2

CLRF cnt1

NOP ; 1us

DECFSZ cnt1, f ; 1us

GOTO $-2 ; 2us => 4*256 = 1024 us, approx. 1 ms internal delay loop

DECFSZ cnt2, f ; approx. 256 ms external delay loop

GOTO $-4

RETLW 0

;/////////////////////////////////////////////////////////////////////////////

Setup

BANK1

CLRF TRISIO ; config. all I/O as outputs

BCF OPTION_REG, T0CS ; use pin5 as GP2, not TOCKI

CLRF ANSEL ; use all AN as digital I/O

BANK0

CLRF GPIO ; all LEDs off

MOVLW b'00000111'

MOVWF CMCON0 ;comparator off

splash ; (initial test for LEDs)

BSF LED1

CALL LEDsOFF

BSF LED2

CALL LEDsOFF

BSF LED3

CALL LEDsOFF

BSF LED4

CALL LEDsOFF

;;;;;;;;;;

initializeComparator

BANK1

MOVLW b'00001010' ;config. GP1 as input (will be CIN-)

MOVWF TRISIO

;BANK0

MOVLW b'10100001'

;BANK1

MOVWF VRCON ;Vref on, low range, VR=0001 => ratio = 1/24

BANK0

MOVLW b'00000100'

MOVWF CMCON0 ;comparator on: CIN- = GP1; CIN+ = Vref; Cout internal

;;;;;;;;;

;enable interrupt

BANK1

BSF INTCON, PEIE ; enable interrupt on Comparator trip

BSF PIE1, CMIE ; enable interrupt on Comparator trip

BANK0

BSF INTCON, GIE ; set general interrupt enable

goto $ ; infinite loop (waiting for an interrupt)

;-----------------------------------------------------------------------------

; Comparator trip interrupt routine

;-----------------------------------------------------------------------------

IntCmp

;don't need to save any context, only interrupting a goto $

BANK0

MOVLW .1

MOVWF cnt3

nextBtn

INCF cnt3, F

SIregGEval8b cnt3, .16, whichBtn ; if (cnt3 >= 16) goto whichBtn ;

MOVLW b'10100000'

ADDWF cnt3, W

BANK1

MOVWF VRCON ;Vref on, low range, VR=cnt3

BANK0

BTFSS CMCON0, COUT ; Cout == 1 ?

GOTO nextBtn

whichBtn

DECF cnt3, F

BTFSC cnt3, 0

BSF LED1

BTFSC cnt3, 1

BSF LED2

BTFSC cnt3, 2

BSF LED3

BTFSC cnt3, 3

BSF LED4

CALL LEDsOFF

endIntCmp

MOVLW b'10100001'

BANK1

MOVWF VRCON ;Vref on, low range, VR=0001 => ratio = 1/24

BANK0

BCF PIR1, CMIF ; clear comparator interrupt flag

RETFIE

;-----------------------------------------------------------------------------

 

END

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉