国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

利用單個(gè)PIC輸入監(jiān)控15個(gè)觸點(diǎn)

發(fā)布時(shí)間:2015-1-26 14:52    發(fā)布者:designapp
關(guān)鍵詞: PIC微控制器 , LED顯示器 , 匯編

        作為一個(gè)簡(jiǎn)單實(shí)用的示例,圖1中的電路利用一個(gè)8位PIC微控制器控制一個(gè)4位LED顯示器,顯示出按下了哪個(gè)按鈕。當(dāng)任意按鈕被按下時(shí),比較器中斷程序會(huì)立即作出響應(yīng)。該程序會(huì)在VREF值之間進(jìn)行循環(huán),直至比較器輸出COUT返回高電平,表明該按鈕被按下。完整注釋的匯編程序源代碼總共不到100字。該代碼并未作過(guò)度優(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



本文地址:http://m.qingdxww.cn/thread-145040-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
Zaxife 發(fā)表于 2015-1-27 09:27:20
你這樣的等比例電阻分壓,多個(gè)按鈕同時(shí)按下時(shí),會(huì)錯(cuò)誤的認(rèn)為是氣體按鈕按下的,沒(méi)啥意義。
電阻分組必須按1:2:4:8:16:32:64:128:256:1024:2048......這樣的2的N次方來(lái)分配才能確定是哪幾個(gè)按鍵按下了。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開(kāi)發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開(kāi)發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 黄图gif揉胸吸奶| 一级毛片大全免费播放| 欧美成人777| 日韩亚洲成a人片在线观看| 四虎在线最新永久免费播放| 99九九精品视频| 青娱乐在线一区| 一二三区在线视频| 青青草视频免费在线| 亚洲第一免费网站| 一二三四视频社区5在线高清视频| 国产精品系列在线一区| 色小说在线| 世界一级毛片| 五月婷婷丁香| 一级毛片真人免费播放视频| 久久精品久久久久| 午夜精品在线视频| 日本亚州视频在线八a| 特级片在线观看| 最新欧美老少配videos| 欧美亚洲国产专区在线| 亚洲综合男人的天堂色婷婷| 青青青青青青草| 四虎国产精品免费久久久| videossexotv极度另类| 我解开了岳的乳第一个女人| 青青艹在线| 亚洲日本成人| 综合欧美亚洲| 免费A级毛片无码无遮挡内射| 在教室伦流澡到高潮HNP视频| 欧美一级手机免费观看片| 睡男神的这件小事小说在线阅读| qvod 在线| 香蕉59tv视频| 日韩欧美一区二区久久| 亚洲精品123区| 中文字幕在线观看2023| 日本无码毛片久久久九色综合| 日韩精品视频福利资源站|