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

📄 source.asm

📁 基于PIC16F877A的反应测试仪汇编程序
💻 ASM
字号:
	LIST P=16F877A
	INCLUDE "P16F877A.INC"

;*************************************************
RANDOM	    EQU		20H
CLOCK1		EQU		21H
CLOCK2		EQU		22H
COUNTERL	EQU		23H
COUNTERH	EQU		24H
CNT1 		EQU		25H
CNT2		EQU		26H
CNT			EQU		27H
TEMP1		EQU		28H
TEMP2		EQU		29H
TEMP3		EQU		2AH
RLT			EQU		2BH
LED0		EQU		2CH
LED1		EQU		2DH
LED2		EQU		2EH
LED3		EQU		2FH
;*************************************************
	ORG		00H
	GOTO	START
;	nop
START
	BSF		STATUS,RP0
	BCF		STATUS,RP1
	CLRF	TRISB
	CLRF	TRISC
	CLRF	TRISD
	MOVLW	0FFH
	MOVWF	TRISA
	MOVLW	06H
	MOVWF	ADCON1
	BCF		STATUS,RP0	
		
LOOP2
	MOVLW	00H
	MOVWF	PORTC
	MOVWF	PORTD          
	MOVWF	COUNTERL		;计数位初始化,清零	
	MOVWF	COUNTERH
LOOP1
	INCF	RANDOM,1   ;得随机数,共256种可能性
	BTFSS	PORTA,0
	GOTO	LOOP1     ;扫描按钮开关

	MOVLW	0FFH     ;按键后灯灭
	MOVWF	PORTD
	MOVLW	00H
	MOVWF	PORTB
	CALL	DELAY	;延时随机时间	
	
	MOVLW	00H
	MOVWF	PORTD	;重新发光
;***************************************************

LOOP3
	BTFSC	PORTA,0
	GOTO	LOOP4		;从loop4跳出到LED输出
	INCFSZ	COUNTERL,F
	GOTO	TIME
	INCF	COUNTERH,F
TIME
	CALL	TIMER
	GOTO	LOOP3
LOOP4
	CALL	BCD
	CALL	GETLED
LOOP5
	MOVLW	01H         ;led输出
	MOVWF	PORTC
	MOVF	LED0,0
	CALL	TABLE
	MOVWF	PORTB
	CALL	TIMER
	MOVLW	02H
	MOVWF	PORTC
	MOVF	LED1,0
	CALL	TABLE
	MOVWF	PORTB
	CALL	TIMER
	MOVLW	04H
	MOVWF	PORTC
	MOVF	LED2,0
	CALL	TABLE
	MOVWF	PORTB
	CALL	TIMER
	MOVLW	08H
	MOVWF	PORTC
	MOVF	LED3,0
	CALL	TABLE
	MOVWF	PORTB
	CALL	TIMER
;	BTFSC	PORTA,0
;	GOTO	LOOP2
	GOTO	LOOP5
	
	
	
;**************************************************
;                     子程序
;**************************************************


;*******************随机时间产生*******************
DELAY
D2	MOVLW	0FFH
	MOVWF	CLOCK2
D1	MOVLW	05FH
	MOVWF	CLOCK1   ;first TURN
D3	DECFSZ	CLOCK1
	GOTO	D3
	DECFSZ	CLOCK2
	GOTO	D1	
	decfsz	RANDOM
	goto	D2
	RETURN
;*******1ms延时程序**************
TIMER
	MOVLW	D'09'
	MOVWF	CNT2
LO2  
	MOVLW	D'33'     ;1ms延时
    MOVWF	CNT1
LO1                       
    DECFSZ	CNT1,1
    GOTO  	LO1
	DECFSZ	CNT2,1
	GOTO	LO2 
    RETURN
;********BCD转换*****************
BCD
	MOVF	COUNTERL,W
	MOVWF	TEMP2
	MOVF	COUNTERH,W
	MOVWF	TEMP3
	CLRF	COUNTERL
	CLRF	COUNTERH
	CLRF	RLT
	BCF		STATUS,C 
	MOVLW	10H
	MOVWF	CNT
LOOPC
	RLF		TEMP2,F
	RLF		TEMP3,F
	RLF		COUNTERL,F
	RLF		COUNTERH,F
	RLF		RLT,F
	DECFSZ	CNT,F
	GOTO	ADJDEC
	RETLW	0
ADJDEC
	MOVLW	COUNTERL
	MOVWF	FSR
	CALL	ADJBCD
	MOVLW	COUNTERH
	MOVWF	FSR
	CALL	ADJBCD
	MOVLW	RLT
	MOVWF	FSR
	CALL	ADJBCD
	GOTO	LOOPC
ADJBCD
	MOVLW	03H
	ADDWF	INDF,W
	MOVWF	TEMP1
	BTFSC	TEMP1,3
	MOVWF	INDF
	MOVLW	30H
	ADDWF	INDF,W
	MOVWF	TEMP1
	BTFSC	TEMP1,7
	MOVWF	INDF
	RETLW	0
;********获得LED片选偏移****************
GETLED
	MOVF	COUNTERL,W
	MOVWF	LED0
	MOVWF	LED1
	SWAPF	LED1,F
	MOVF	COUNTERH,W
	MOVWF	LED2
	MOVWF	LED3
	SWAPF	LED3,F

	MOVLW	0FH
	ANDWF	LED0,F
	ANDWF	LED1,F
	ANDWF	LED2,F
	ANDWF	LED3,F
	RETURN

;**************数码管编码********************
TABLE
	addwf	PCL,F         ;相对寻址法
	retlw	3FH
	retlw	06H
	retlw	5BH
	retlw	4FH
	retlw	66H
	retlw	6DH
	retlw	7DH
	retlw	07H
	retlw	7FH
	retlw	6FH	
;*************LED片选编码*********************
;TABLE2
;	ADDWF	PCL,F
;	RETLW	0EH
;	RETLW	0DH
;	RETLW	0BH
;	RETLW	07H


	END

⌨️ 快捷键说明

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