⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo451.asm

📁 键盘LED驱动芯片CH451S相关程序示例
💻 ASM
字号:
;CH451 PIC系列单片机演示程序
;USE PIC16XX
;Web http//www.winchiphead.com
;Author YHW  2003.8
;*************************************************************
;需要主程序定义的参数
CH451_DCLK    EQU     1		;串行数据时钟线,上升沿激活
CH451_DIN     EQU     2		;串行数据输出,按451数据加载
CH451_LOAD    EQU     3		;串行命令加载,上升沿激活
CH451_DOUT    EQU     0		;INT0,键盘中断和键值数据输入,按451的数据传输
CH451_COM1    EQU    20H	;451数据底8位数据
CH451_COM2    EQU    21H	;451数据高8位
CH451_CON     EQU    22H	;数据加载计数器
CH451_KEY     EQU    24H	;中断451键值存放

CH451_READ1    EQU    23H	;读出的451键值
;STATUS	      EQU    03H
;OPTION	      EQU    81H
;TRISA	      EQU    85H
;TRISB         EQU    86H
PA	      EQU    05H
PB	      EQU    06H
;INTCON        EQU    0BH
;RP0	      EQU    05H
;
;***********************************************************
;主程序
		ORG   00H
		GOTO	STARTE
		ORG	04H
		GOTO	CH451_INTER
		ORG	05H
STARTE:		NOP
		BSF  STATUS,RP0
		MOVLW    01H
 		MOVWF    TRISB
		BCF  STATUS,RP0
		MOVLW    0FFH
                MOVWF    CH451_KEY
;		............
		CALL	CH451_INIT
		MOVLW	3H
		MOVWF	CH451_COM1
		MOVLW	4H
		MOVWF	CH451_COM2
		CALL	CH451_WRITE
                MOVLW	80H
		MOVWF	CH451_COM1
		MOVLW	05H
		MOVWF	CH451_COM2
		CALL	CH451_WRITE
                MOVLW	1H
		MOVWF	CH451_COM1
		MOVLW	08H
		MOVWF	CH451_COM2
		CALL	CH451_WRITE
                MOVLW	2H
		MOVWF	CH451_COM1
		MOVLW	09H
		MOVWF	CH451_COM2
		CALL	CH451_WRITE
                MOVLW	3H
		MOVWF	CH451_COM1
		MOVLW	0AH
		MOVWF	CH451_COM2
		CALL	CH451_WRITE
                MOVLW	4H
		MOVWF	CH451_COM1
		MOVLW	0BH
		MOVWF	CH451_COM2
		CALL	CH451_WRITE
                MOVLW	5H
		MOVWF	CH451_COM1
		MOVLW	0CH
		MOVWF	CH451_COM2
		CALL	CH451_WRITE
                MOVLW	6H
		MOVWF	CH451_COM1
		MOVLW	0DH
		MOVWF	CH451_COM2
		CALL	CH451_WRITE
                MOVLW	7H
		MOVWF	CH451_COM1
		MOVLW	0EH
		MOVWF	CH451_COM2
		CALL	CH451_WRITE
                MOVLW	8H
		MOVWF	CH451_COM1
		MOVLW	0FH
		MOVWF	CH451_COM2
		CALL	CH451_WRITE
               BCF     INTCON,1
                BSF     INTCON,7
                MOVLW   00H
                MOVWF   29H

X6:            BSF      PB,5
                MOVF    CH451_KEY,0
                   BSF     PB,6
                BCF     STATUS,0
                SUBLW   0FEH
                BTFSS   STATUS,0
                GOTO    X6
X5:             MOVF   CH451_KEY,0

                ANDLW  3FH
                MOVWF  28H
                MOVLW   0FFH
                MOVWF   CH451_KEY
                INCF    29H
               ; MOVF    30H,0
               MOVF     29H,0
               MOVWF     CH451_COM1
                MOVLW   08H
                MOVWF   CH451_COM2
                CALL    CH451_WRITE
                 ;GOTO   X6
                 
                 MOVF    28H,0
                 ANDLW   0FH
                 ;SUBLW   080H
                 MOVWF   CH451_COM1
                 MOVLW   09H
                 MOVWF   CH451_COM2
                 CALL    CH451_WRITE
                 MOVF   28H,0

                 ANDLW   0F0H
                 MOVWF   2AH
                 SWAPF   2AH,0
                 MOVWF   CH451_COM1
                 MOVLW   0AH
                 MOVWF   CH451_COM2
                 CALL    CH451_WRITE
                ;GOTO    X6

               MOVF    28H,0
               ;SUBLW   40H
              ; MOVWF   25H
               CLRF   27H
               ;MOVF    25H,0

X7:            BCF     STATUS,0
                INCF    27H
                BCF     PB,5
                MOVF    28H,0
                MOVWF   26H
                MOVLW   0AH
                SUBWF   28H,1
                BTFSc   STATUS,0
                GOTO    X7
                MOVF    26H,0
                MOVWF   CH451_COM1
                MOVLW   0DH
                MOVWF   CH451_COM2
                CALL    CH451_WRITE
                DECF    27H,0

                ;BCF     STATUS,0

                MOVWF   CH451_COM1
                MOVLW   0EH
                MOVWF   CH451_COM2
                CALL    CH451_WRITE

               BCF     PB,4
              GOTO    X6
;
;************************************************************
;CH451初始化程序
CH451_INIT:	MOVLW	01H
		BSF	STATUS,5          ;选择体1
		MOVWF	TRISB
		BCF	STATUS,5
		BCF	PB,CH451_DIN      ;先高后低通知451选择四线传输
		BSF	PB,CH451_DCLK     ;置为高电平
		BSF	PB,CH451_DIN
		BSF	PB,CH451_LOAD
		BSF	PB,CH451_DOUT
;下面是开启中断指令
                BSF	STATUS,5	  ;选择体1
		BCF   81H,6		  ;设置下降沿有效
		BCF	STATUS,5
		BSF	INTCON,4	  ;INT0使能
               BCF	INTCON,1	  ;清中断标志
                RETURN
;*************************************************************
;CH451写入子程序
;USE W COM1 COM2 CON
CH451_WRITE:	BCF	INTCON,4	;关INT0中断
		BCF	PB,CH451_LOAD	;命令开始,此句也可以放在后面
		MOVLW	8H
		MOVWF	CH451_CON	;将低8位送入
CH451_WRITE_0:		RRF	CH451_COM1	;低位在前,高位在后
               BCF	PB,CH451_DCLK
		BTFSC	STATUS,0		;判断送入位高低电平
		GOTO	CH451_WRITE_1		;为高跳转
		GOTO	CH451_WRITE_2		;为低跳转
CH451_WRITE_1:
		BSF	PB,CH451_DIN		;送入高电平
		GOTO	CH451_WRITE_3
CH451_WRITE_2:
		BCF	PB,CH451_DIN		;送入低电平
CH451_WRITE_3:		BSF	PB,CH451_DCLK	;产生上升沿通知451输入位数据
                DECFSZ	CH451_CON		 ;未送完继续
		GOTO	CH451_WRITE_0
		MOVLW	04H			;送入低四位
		MOVWF	CH451_CON
CH451_WRITE_4:		RRF	CH451_COM2	;低位在前,高位在后
		BCF	PB,CH451_DCLK
		BTFSC	STATUS,0		;判断送入位高低电平
		GOTO	CH451_WRITE_5		;为高转移
		GOTO	CH451_WRITE_6		 ;为低转移
CH451_WRITE_5:
		BSF	PB,CH451_DIN		;送入高电平
		GOTO	CH451_WRITE_7
CH451_WRITE_6:	BCF	PB,CH451_DIN		;送入低电平

CH451_WRITE_7:	BSF	PB,CH451_DCLK
		DECFSZ	CH451_CON
		GOTO	CH451_WRITE_4
		BSF	PB,CH451_LOAD		;加载数据
		BSF	INTCON,4		 ;开中断
		RETURN
;**************************************************************
;CH451读入子程序
;
CH451_READ:
           	BCF	INTCON,4
		BCF	PB,CH451_LOAD		;命令开始
		MOVLW	03H			;写入控制字
		MOVWF	CH451_CON
CH451_READ_1:	BCF	PB,CH451_DCLK
		BSF	PB,CH451_DIN		;输入1
		BSF	PB,CH451_DCLK
		DECFSZ	CH451_CON
		GOTO	CH451_READ_1
		BCF	PB,CH451_DCLK
		BCF	PB,CH451_DIN		;输入0
		BSF	PB,CH451_DCLK
		BSF	PB,CH451_LOAD		;加载命令字
		MOVLW	07H			;读出7位
		MOVWF	CH451_CON
CH451_READ_4:		BTFSS	PB,CH451_DOUT	;判断CH451_DOUT高低电平
		GOTO	CH451_READ_2		;低电平跳转
		GOTO	CH451_READ_3		;高电平跳转
CH451_READ_2:		BCF	STATUS,0	;置C为0
			GOTO	CH451_READ_5
CH451_READ_3:	BSF	STATUS,0
CH451_READ_5:	BCF	PB,CH451_DCLK		;下降沿通知451送出下一组数据
		RLF	CH451_READ		;读进寄存器
		BSF	PB,CH451_DCLK		;置为
		DECFSZ	CH451_CON		;判断七组数据是否接受完
		GOTO	CH451_READ_4
		BCF     INTCON,1		;清中断标志
		BSF	INTCON,4		;开中断
		RETURN				;不带参数反回
;***********************************************************
;键盘中断程序
CH451_INTER:
		BTFSS	INTCON,1		;判断是否键盘中断
		GOTO	CH451_INTER_NO		 ;非键盘中断眺出
		BCF	PB,CH451_LOAD		;命令开始
	;	送入读控制字
		MOVLW	03H			;送入3位1
		MOVWF	CH451_CON
CH451_INTER_1:	BCF	PB,CH451_DCLK
		BSF	PB,CH451_DIN		;送入1
		BSF	PB,CH451_DCLK		;上升沿通知接收
		DECFSZ	CH451_CON
		GOTO	CH451_INTER_1
		BCF	PB,CH451_DCLK		 ;送入一位0
		BCF	PB,CH451_DIN
		BSF	PB,CH451_DCLK		;
		BSF	PB,CH451_LOAD		;加载数据
		MOVLW	07H			;读进七位
		MOVWF	CH451_CON
CH451_INTER_4:	BTFSS	PB,CH451_DOUT		;判断读出是低是高
		GOTO	CH451_INTER_2		;低转移
		GOTO	CH451_INTER_3		;高转移
CH451_INTER_2:		BCF	STATUS,0	;标志位置0
			GOTO	CH451_INTER_5
CH451_INTER_3:	BSF	STATUS,0		;标志位置1
CH451_INTER_5:	BCF	PB,CH451_DCLK		;产生下降沿通知451输出下一位
		RLF	CH451_KEY		;接收键值
		BSF	PB,CH451_DCLK
		DECFSZ	CH451_CON		;数据接收完眺一步
		GOTO	CH451_INTER_4
       		 BCF     INTCON,1		;清中断标志
CH451_INTER_NO:    NOP
		RETFIE

 END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -