Proteus仿真PIC单片机汇编程序——RB中断和按键显示
扫描二维码
随时随地手机看文章
朋友们送上的使用Proteus仿真学习PIC汇编程序的最后一例,但遗憾的是,本例目前仍未完成,没有实现预期效果。
本例的构思如下:在PIC单片机的RB端口上接一个4×4的矩阵键盘,在RC端口上接一个数码管;在键盘上没有按键按下时,RC口上的数码管循环显示从0到9的数字;一旦有按键按下,则利用RB口的电平变化中断功能,进入中断子程序,在中断子程序中实现使用数码管显示按下的按键的键号的功能。本例和前面的例子Proteus仿真PIC汇编程序——键盘扫描和数码管显示类似,只是增加了RB口中断功能而已。
首先,和前面所有例子相同,在PIC文件夹下建立一个名为RBInterrupt的子文件夹;然后在MPLAB中新建一个工程项目,并将其以RBInterrupt之名保存在如上的子文件夹中。接着在MPLAB中新建一个源程序文件,将如下的源程序代码复制到文件中:
#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 ;选择相应的体
movlw 00h ;设置RB端口全部输出
movwf trisb
movlw 00h ;设置RC端口全部输出
movwf trisc
movlw 07h ;设置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 ;设置RB口高四位入,低四位出
movwf trisb
banksel portb