本人初学PIC,只会汇编语言,呵呵。现在把我写的八路抢答器源程序贡献出来与各位坛友一起分享。错误或不妥之处,还请见谅。本程序已经在我的PIC开发板上实际验证通过了。
汇编源程序如下:
;开机默认显示0,表示没有选手按下。
;若只要当其中有一名选手最先按下,则显示相应选手的号码值,同时并伴有蜂鸣音,已提示之作用。
;其余选手再按,均无效。只有当主持人复位后,方可进行下一轮的抢答。
#INCLUDE<P16F877A.INC>
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC
;调试模式关闭,写保护,一半ROM可在线改写,EEPROM加密,低压编程关闭,掉电检测关闭,上电延时开,看门狗关,4M晶振XT振荡
ORG 0000H
START:
CLRF PORTD
BSF STATUS,RP0
CLRF TRISD
BCF STATUS,RP0
MOVLW 0
CALL TABLE
MOVWF PORTD
LOOP1:
BTFSC PORTC,0
GOTO LOOP2
CALL DELAY
BTFSC PORTC,0
GOTO LOOP2
MOVLW 1
CALL TABLE
MOVWF PORTD
CALL BEEP
GOTO $
LOOP2:
BTFSC PORTC,1
GOTO LOOP3
CALL DELAY
BTFSC PORTC,1
GOTO LOOP3
MOVLW 2
CALL TABLE
MOVWF PORTD
CALL BEEP
GOTO $
LOOP3:
BTFSC PORTC,2
GOTO LOOP4
CALL DELAY
BTFSC PORTC,2
GOTO LOOP4
MOVLW 3
CALL TABLE
MOVWF PORTD
CALL BEEP
GOTO $
LOOP4:
BTFSC PORTC,3
GOTO LOOP5
CALL DELAY
BTFSC PORTC,3
GOTO LOOP5
MOVLW 4
CALL TABLE
MOVWF PORTD
CALL BEEP
GOTO $
LOOP5:
BTFSC PORTC,4
GOTO LOOP6
CALL DELAY
BTFSC PORTC,4
GOTO LOOP6
MOVLW 5
CALL TABLE
MOVWF PORTD
CALL BEEP
GOTO $
LOOP6:
BTFSC PORTC,5
GOTO LOOP7
CALL DELAY
BTFSC PORTC,5
GOTO LOOP7
MOVLW 6
CALL TABLE
MOVWF PORTD
CALL BEEP
GOTO $
LOOP7:
BTFSC PORTC,6
GOTO LOOP8
CALL DELAY
BTFSC PORTC,6
GOTO LOOP8
MOVLW 7
CALL TABLE
MOVWF PORTD
CALL BEEP
GOTO $
LOOP8:
BTFSC PORTC,7
GOTO START
CALL DELAY
BTFSC PORTC,7
GOTO START
MOVLW 8
CALL TABLE
MOVWF PORTD
CALL BEEP
GOTO $
TABLE:
ADDWF PCL,1
RETLW 3FH
RETLW 06H
RETLW 5BH
RETLW 4FH
RETLW 66H
RETLW 6DH
RETLW 7DH
RETLW 07H
RETLW 7FH
RETLW 6FH
BEEP:
BSF STATUS,RP0
CLRF TRISB
BCF STATUS,RP0
BSF PORTB,0
CALL DELAY1S
CLRF PORTB
RETURN
DELAY1S:
MOVLW 06H
MOVWF 30H
LOOOP1:
MOVLW 0EBH
MOVWF 31H
LOOOP2:
MOVLW 0ECH
MOVWF 32H
LOOOP3:
DECFSZ 32H
GOTO LOOOP3
DECFSZ 31H
GOTO LOOOP2
DECFSZ 30H
GOTO LOOOP1
RETURN
DELAY:
MOVLW 02H
MOVWF 30H
LOP1:
MOVLW 0A5H
MOVWF 31H
LOP2:
DECFSZ 31H
GOTO LOP2
DECFSZ 30H
GOTO LOP1
RETURN
END
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>