Proteus仿真PIC單片機(jī)匯編程序——RB中斷和按鍵顯示
掃描二維碼
隨時(shí)隨地手機(jī)看文章
朋友們送上的使用Proteus仿真學(xué)習(xí)PIC匯編程序的最后一例,但遺憾的是,本例目前仍未完成,沒(méi)有實(shí)現(xiàn)預(yù)期效果。
本例的構(gòu)思如下:在PIC單片機(jī)的RB端口上接一個(gè)4×4的矩陣鍵盤(pán),在RC端口上接一個(gè)數(shù)碼管;在鍵盤(pán)上沒(méi)有按鍵按下時(shí),RC口上的數(shù)碼管循環(huán)顯示從0到9的數(shù)字;一旦有按鍵按下,則利用RB口的電平變化中斷功能,進(jìn)入中斷子程序,在中斷子程序中實(shí)現(xiàn)使用數(shù)碼管顯示按下的按鍵的鍵號(hào)的功能。本例和前面的例子Proteus仿真PIC匯編程序——鍵盤(pán)掃描和數(shù)碼管顯示類(lèi)似,只是增加了RB口中斷功能而已。
首先,和前面所有例子相同,在PIC文件夾下建立一個(gè)名為RBInterrupt的子文件夾;然后在MPLAB中新建一個(gè)工程項(xiàng)目,并將其以RBInterrupt之名保存在如上的子文件夾中。接著在MPLAB中新建一個(gè)源程序文件,將如下的源程序代碼復(fù)制到文件中:
#include <p16f877.inc>
keycode equ 70h ;鍵碼變量
io equ 71h ;輸出變量
w_temp equ 72h ;W暫存寄存器
status_temp equ 73h ;status暫存寄存器
portc_temp equ 74h ;portc暫存寄存器
value equ 76h ;鍵值寄存器
org 00h
goto main ;主程序
org 04h
goto int ;中斷子程序
main ;主程序
table ;在RAM30h-3fh中建立鍵值表
movlw 0eeh ;0的鍵值
movwf 30h
movlw 0deh ;1的鍵值
movwf 31h
movlw 0beh ;2的鍵值
movwf 32h
movlw 07eh ;3的鍵值
movwf 33h
movlw 0edh ;4的鍵值
movwf 34h
movlw 0ddh ;5的鍵值
movwf 35h
movlw 0bdh ;6的鍵值
movwf 36h
movlw 07dh ;7的鍵值
movwf 37h
movlw 0ebh ;8的鍵值
movwf 38h
movlw 0dbh ;9的鍵值
movwf 39h
movlw 0bbh ;a的鍵值
movwf 3ah
movlw 07bh ;b的鍵值
movwf 3bh
movlw 0e7h ;c的鍵值
movwf 3ch
movlw 0d7h ;d的鍵值
movwf 3dh
movlw 0b7h ;e的鍵值
movwf 3eh
movlw 077h ;f的鍵值
movwf 3fh
banksel trisb ;選擇相應(yīng)的體
movlw 00h ;設(shè)置RB端口全部輸出
movwf trisb
movlw 00h ;設(shè)置RC端口全部輸出
movwf trisc
movlw 07h ;設(shè)置TMR0分頻比
movwf option_reg ;啟用RB口上拉
banksel portc
movlw 0ffh
movwf portc ;RC端口輸出全1
clrf portb ;RB端口輸出全0
movlw 0f0h
movwf portb ;RB口低四位輸出0
banksel trisb
movlw 0f0h ;設(shè)置RB口高四位入,低四位出
movwf trisb
banksel portb