久久丫精品无码视频|亚洲成人黄色电影|超碰国产在线观看|亚洲Aⅴ综合免费在线|久久青青草原国产精品|极品美女三级片国产无码a|女人的黄色片子综合AV|日韩成人?毛片

技術(shù)熱線: 4007-888-234
設(shè)計(jì)開(kāi)發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開(kāi)發(fā)工具

提供開(kāi)發(fā)工具、應(yīng)用測(cè)試 完善的開(kāi)發(fā)代碼案例庫(kù)分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力

新聞中心

提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)

實(shí)戰(zhàn)十三:按鍵觸發(fā)的1位累加器

更新時(shí)間: 2019-03-25
閱讀量:1116

按鍵觸發(fā)的1位累加器
;按鍵S3觸發(fā)累加計(jì)數(shù)顯示0---9的數(shù)碼管程序
;使用資源
 ;1、PORTA口,做為6位數(shù)碼管的位選信號(hào)
 ;2、PORTB口,在此只利用了RBO口做按鍵輸入
 ;3、PORTC口,7段數(shù)碼管的段信號(hào)
;功能說(shuō)明
;1、該程序的功能是把演示板當(dāng)做一個(gè)按鍵計(jì)數(shù)器。接通電源時(shí),按下IDE軟軟件的運(yùn)行鍵6只數(shù)碼管全顯示000000。
;每按下開(kāi)關(guān)S3(RB0)時(shí),計(jì)數(shù)器的值加1,數(shù)碼管顯示也增加1,然后松開(kāi)按鈕;以些類推,反復(fù)循環(huán)。
;2、程序中包含按鍵按下檢測(cè)跟釋放檢測(cè),并且都伴有一定的延時(shí)去抖功能,只有在一次按鍵被釋放后才進(jìn)行第2次按鍵的判斷
;3、程序中需開(kāi)啟B口的內(nèi)部弱上拉功能,因DEMO板上無(wú)上拉電阻;并把A口全部設(shè)置為普通I/O口,上電復(fù)位后A口為模擬輸入口。

;硬件連接
;1、DEMO實(shí)驗(yàn)板作以下設(shè)置  s1拔到0FF,S13除拔碼開(kāi)關(guān)1為ON外其余的全拔到OFF
;2、S4,S5全部拔到ON    LCD不要插在演示板上
;程序文件名“count.ASM"

;程序清單如下:
;**************************************************
  __CONFIG 3F39H;設(shè)置配置位中振蕩方式為XT,其它全部禁止或關(guān)閉
;*************************************************
PCL       equ     2h     ;定義寄存器PCL的地址為02H
status    equ     3h     ;定義狀態(tài)寄存器地址
porta     equ     5h     ;定義端口A的數(shù)據(jù)寄存器地址
portb     equ     6h     ;定義端口B的數(shù)據(jù)寄存器地址
portc     equ     7h     ;定義端口C的數(shù)據(jù)寄存器地址
trisa      equ     85h    ;定義端口A的方向控制寄存器地址
trisb     equ     86h    ;定義端口B的方向控制寄存器地址
trisc     equ     87h    ;定義端口C的方向控制寄存器地址
option_reg equ    81h
adcon1    equ     9fh    ;ADC控制寄存器1
;**************************************************
data1     equ     20h    ;定義一個(gè)廷時(shí)變量寄存器
data2     equ     21h    ;定義另一個(gè)廷時(shí)變量寄存器
n1        equ     d'13'  ;定義一個(gè)外層循環(huán)廷時(shí)常數(shù)
n2        equ     0ffh   ;定義一個(gè)內(nèi)層廷時(shí)常數(shù)
rp0       equ     5      ;定義狀態(tài)寄存器的頁(yè)選位RP0
z         equ     2      ;定義0標(biāo)志位位地址
;********************************************** ***
wang      equ     22h        ;定義顯示寄存器的地址
yan       equ     23h        ;定義計(jì)數(shù)寄存器的地址
;*************************************************
          org    000h        ;定義程序存放區(qū)域的起始地址
          nop                ;放置一條ICD必須的空操作指令
          goto   main
main      bsf    status,rp0  ;設(shè)置文件寄存器體1
          movlw  00h         ;將端口C的方向控制碼00H先送W
          movwf  trisa       ;再轉(zhuǎn)到方向寄存器,將其設(shè)置為輸出
          movwf  trisc       ;設(shè)置C口為輸出
          movlw  0ffh        ;同理,將端口B設(shè)置為輸入
          movwf  trisb    
          clrf   option_reg  ;開(kāi)起內(nèi)部弱上拉
          movlw  06h
          movwf  adcon1      ;設(shè)置A口為普通的數(shù)字口
          bcf    status,rp0  ;恢復(fù)到文件寄存器體0
          clrf   porta       ;使PORTA輸出為低電平,讓所有數(shù)碼管共陽(yáng)極都為高電平
loop1     movlw  .10
          movwf  yan         ;設(shè)置循環(huán)值10
          movlw  00h      
          movwf  wang        ;送初值00H到wang顯示寄存器
loop2     
          movf   wang,0
          subwf  yan,0       ;判斷是否到了顯示數(shù)值“9”
          btfsc  status,z     ;全亮則返回loop1重新給yan,wang賦值為0
          goto   loop1
          movf   wang,0      ;否則繼續(xù)調(diào)用顯示程序
          call   CHABIAO     ;調(diào)用數(shù)碼段顯示程序
          movwf  portc
         
;-----------------------------------------------------------------------------
;測(cè)試按鍵與否,以及如按下鍵則寄存器wang的數(shù)據(jù)加1
;-----------------------------------------------------------------------------
check     btfsc  portb,0     ;測(cè)試S3按下否?是!跳過(guò)下條指令
          goto   check       ;否!則循環(huán)檢測(cè)
          call   delay       ;調(diào)用廷時(shí)子程序,消除按鈕抖動(dòng)的影響
          btfsc  portb,0     ;再次測(cè)試S3按下否?是!跳過(guò)下條指令
          goto   check       ;否!則循不檢測(cè)
          incf   wang,1      ;寄存器wang的數(shù)據(jù)寄存器加1
         
check1    btfss  portb,0    ;測(cè)試S3斷開(kāi)否?是!跳過(guò)下條指令
          goto   check1     ;否!則循不檢測(cè)
          call   delay      ;調(diào)用廷時(shí)子程序,消除按鈕抖動(dòng)的影響
          btfss  portb,0    ;再次測(cè)試S3斷開(kāi)否?是!跳過(guò)下條指令
          goto   check1     ;否!則循不檢測(cè)
          goto   loop2      ;返回
;*************10MS廷時(shí)子程序************************
delay                       ;子程序名,也是子程序入口地址
          movlw n1          ;將外層循環(huán)參數(shù)值送到DATA1
          movwf data1     
lp0       movlw n2          ;將內(nèi)層循環(huán)參數(shù)值送到DATA2
          movwf data2    
lp1       decfsz data2,1    ;變量DATA2內(nèi)容遞減,若為0則跳躍
          goto lp1          ;跳轉(zhuǎn)到LP1
          decfsz data1,1    ;變量DATA1內(nèi)容遞減,若為0則跳躍
          goto lp0          ;跳轉(zhuǎn)到LP0
          return            ;返回主程序
;***********共陽(yáng)數(shù)碼管查表子程序***************           
CHABIAO                     ;取數(shù)碼管段碼
            ADDWF PCL,1     ;地址偏移量加當(dāng)前PC
            RETLW 0C0H      ;0                            
            RETLW 0F9H      ;1
            RETLW 0A4H      ;2
            RETLW 0B0H      ;3
            RETLW 99H       ;4
            RETLW 92H       ;5
            RETLW 82H       ;6
            RETLW 0F8H      ;7
            RETLW 80H       ;8
            RETLW 98H       ;9

;-----------------------------------------------------------------------------
            END             ;源程序結(jié)束
;-----------------------------------------------------------------------------

;    進(jìn)入該實(shí)戰(zhàn)演練的工序流程如下:
;    1.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的”記事本”
;   這個(gè)為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過(guò)有兩點(diǎn)需要注意,一是注釋前面的
;   分號(hào)”;”必須用西文半角輸入;二是必須用”.asm”擴(kuò)展名存儲(chǔ)到事先建立的一個(gè)專用子目錄下.
;    2.打開(kāi)MPLAB集成開(kāi)發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開(kāi)始>程序>Microchip MPLAB>MPLAB命令,啟動(dòng)MPLAB
;   并進(jìn)入MPLAB的桌面.
;    3.創(chuàng)建項(xiàng)目:選用菜單File>New或Project>New Project,在事先建立的一個(gè)專用子目錄下創(chuàng)建一個(gè)新項(xiàng)目,將
;   用記事本創(chuàng)建的源文件加入到該項(xiàng)目中.
;    4.建立項(xiàng)目中的目標(biāo)文件:選擇菜單Project >Build All(項(xiàng)目>建立所有文件),MPLAB將自動(dòng)調(diào)用MPASM將項(xiàng)目
;   文件管理下的源文件(.asm)匯編成十六進(jìn)制的目標(biāo)文件(.hex).