导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[cq2000]第一次搞PIC,帮忙看看这段键盘程序



No.83237
作者:cq2000
邮件:cq2000@ah163.com
ID:31359
登陆:5次
文章数:3篇
最后登陆IP:218.106.90.4
最后登陆:2006/11/20 11:12:22
注册:2005/3/2 14:08:36
财富:125
发帖时间:2005/9/5 22:09:34
发贴者IP:61.190.89.155
标题:cq2000:第一次搞PIC,帮忙看看这段键盘程序
摘要:No.83237第一次搞PIC,帮忙看看这段键盘程序 为看得明白指令,把指令注释都加上了
这段程序的键盘扫描看不懂,好像有定时中断又有PORTB电平变化中断

;*********************** MJ_KEYSCAN.ASM  ***************************
;   f=4.00000MHZ      Date:2005-08-30
;   ID==050830        Checksum=xxxx
;   TMR0 USED
;****************************************************************
        LIST P=16f628A
        INCLUDE "P16f628A.INC"
;-------------------------------------
;DEFINE PORTA.0    C011
;DEFINE PORTA.1    C012
;DEFINE PORTA.2    C013
;DEFINE PORTA.3    C014
;DEFINE PORTB.4    ROW1
;DEFINE PORTB.5    ROW2
;DEFINE PORTB.6    ROW3
;DEFINE PORTB.7    ROW4
;-------------------------------------
#define    FOSC   D'4000000'    ;INTER CLOCK
;--------------------------------
OPTIONREG  EQU     01H         ;
PCL        EQU     02H         ;
TEMPC      EQU     20H
TEMPD      EQU     21H
TEMPE      EQU     22H
PABUF      EQU     23H
PBBUF      EQU     24H
COUNT      EQU     25H
MSDTIME    EQU     26H
LSDTIME    EQU     27H
KEYFLAG    EQU     28H          ;
DEBNCE     EQU     29H
NEWKEY     EQU     2AH          ;
WBUFFER    EQU     2BH          ;
STATBUFFER EQU     2CH          ;
;******************************************
;KEYFLAG   EQU     28H          ;
KEYHIT     EQU     0            ;
DEBNCEON   EQU     1            ;
NOENTRY    EQU     2            ;
SERVKEY    EQU     3            ;
;******************************************
PUSH       MACRO
           MOVWF   WBUFFER           ;将W 内容送至WBUFFER
           SWAPF   WBUFFER           ;WBUFFER寄存器的高半字节和低半字节相互交换。
        SWAPF   STATUS,W
        MOVWF   STATBUFFER
           ENDM
;
POP        MACRO
           SWAPF   STATBUFFER,W
        MOVWF   STATUS
        SWAPF   WBUFFER,W
           ENDM
;*************************************
           ORG     0
        GOTO    START
;-------------------------------------
           ORG     4
;****************************************
PICINT
           PUSH
        CALL    SERVICEINTERRUPTS
        POP
           RETFIE
;***************************************************************************************************************
START                                       ;主程序
           CALL    INITPORTS                ;端口初始化
        CALL    INITTIMERS           ;中断初始化
LOOP
           BTFSC   KEYFLAG,SERVKEY          ;KEYFLAG.SERVKEY=0则跳过下一条指令。KEYFLAG.SERVKEY=1--有键
        CALL    SERVICEKEY           ;调键盘服务
        GOTO    LOOP
;***************************************************************************************************************
SERVICEKEY                                  ;键盘服务
           MOVF    NEWKEY,W                 ;将NEWKEY单元(2AH)键值内容传送到TEMPE单元(22H)
           MOVWF   TEMPE
           SWAPF   MSDTIME,W                ;MSDTIME(26H)[MD7,MD6,MD5,MD4,MD3,MD2,MD1,MD0]-->  MSDTIME[MD3,MD2,MD1,MD0,0,0,0,0]
           ANDLW   B'11110000'
           MOVWF   MSDTIME
           SWAPF   LSDTIME,W                ;LSDTIME(27H)[LD7,LD6,LD5,LD4,LD3,LD2,LD1,LD0]-->  W[0,0,0,0,LD7,LD6,LD5,LD4]
           ANDLW   B'00001111'
           IORWF   MSDTIME                  ;MSDTIME OR W-->  MSDTIME[MD3,MD2,MD1,MD0,LD7,LD6,LD5,LD4]
           SWAPF   LSDTIME,W                ;LSDTIME(27H)[[LD7,LD6,LD5,LD4,LD3,LD2,LD1,LD0]-->  W[LD3,LD2,LD1,LD0,0,0,0,0]
           ANDLW   B'11110000'
           IORWF   TEMPE,W                  ;TEMPE(22H) OR W[LD3,LD2,LD1,LD0,0,0,0,0]-->  LSDTIME
           MOVWF   LSDTIME
           BCF     KEYFLAG,SERVKEY          ;KEYFLAG.SERVKEY=0
           RETURN
;*************************************************************************************************************************
INITPORTS
           CLRF    PORTA                    ;立即数00000000---->  PORTA锁存器
           MOVLW   0X0E                     ;立即数00001110---->  PORTB锁存器
           MOVWF   PORTB
           BSF     STATUS,RP0               ;STATUS状态寄存器RP0位置1(选择存储体BANK1)
           MOVLW   0XF0                     ;立即数11110000送TRISA,设置RA端口高四位输入,低四位输出
        MOVWF   TRISA
        MOVLW   0XF1                 ;立即数11110001送TRISB,设置RB端口高四位输入和最低位输入,RB1RB2RB3输出
        MOVWF   TRISB
           BCF     STATUS,RP0               ;STATUS状态寄存器RP0位置0(选择存储体BANK0)
           RETURN
;-----------------------------------------
INITTIMERS                               ;允许RB口电平变化中断,允许TMR2对PR2匹配中断
           CLRF    MSDTIME
           CLRF    LSDTIME
           CLRF    KEYFLAG
;
           MOVLW    0X07                    ;关闭比较器的功能,RA端口设为数字口
           MOVWF    CMCON
;
           BANKSEL  PIE1                ;T2 20MS  ;BANK存储块选择1
           BSF      PIE1,TMR2IE         ;         ;允许TMR2对PR2匹配中断
           MOVLW    0X4E                ;         ;PR2寄存器赋值
           MOVWF    PR2                 ;
           MOVLW    B'10000100'         ;立即数10000100送OPTION_REG 寄存器(RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0)
           MOVWF    OPTIONREG           ;RBPU=1---(PORTB 弱上拉使能位)禁止PORTB 弱上拉
                                        ;INTEDG=0---(中断触发边沿选择位)RB0/INT 引脚下降沿触发中断
                                        ;T0CS=0---(TMR0 时钟源选择位)内部指令周期时钟(CLKOUT)
                                        ;T0SE=0---(TMR0 计数脉冲边沿选择位)在RA4/T0CKI 引脚上的上升沿递增1
                                        ;PSA=0---(预分频器分配位)预分频器分配给Timer0 模块(=1 预分频器分配给WDT)
                                        ;PS2 PS1 PS0=100---(预分频器分频比选择位)TMR0 分频比1:32,WDT分频比1:16

           BANKSEL  PORTA               ;         ;BANK存储块选择0
           MOVLW    0X7F                ;立即数01111111送T2CON寄存器(— TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0)
           MOVWF    T2CON               ;TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0(Timer2 输出后分频比选择位)=1111(1:16 后分频比)
                                        ;TMR2ON(Timer2 使能位)=1,使能
                                        ;T2CKPS1:T2CKPS0(Timer2时钟预分频比选择位)=11(预分频比为16)

           M ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:47毫秒 最大:5186毫秒 查询6次