專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開(kāi)發(fā)工具、應(yīng)用測(cè)試 完善的開(kāi)發(fā)代碼案例庫(kù)分享
從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!
提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力
提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)
按鍵觸發(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).