所以,我知道如何在按下按钮时生成一个随机数,但我不知道如何存储一个数字,更不用说两个,然后当它不在按钮循环中时不要发疯。 这是我现在的代码。
很抱歉它不整洁,不知道如何为此网站正确格式化。
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
cblock 0x20
Delay1
Delay2
Display
Num1
Boolean
Boolean2
Boolean3
Num2
Num3
LastStableState
Counter
endc
org 0
Start:
BANKSEL TRISA
movlw 0xFF
movwf TRISA
movwf TRISB
clrf TRISC
BANKSEL ANSEL
clrf ANSEL
BANKSEL PORTC
clrf Display
clrf Num1
clrf Num2
clrf Boolean
clrf PORTC
movlw 1
movwf Boolean
movwf Boolean2
movwf Boolean3
movwf LastStableState
clrf Counter
MainLoop:
btfsc LastStableState,0
goto LookingForUp
LookingForDown:
clrw
btfss PORTB,7
incf Counter,w
movwf Counter
goto EndDebounce
LookingForUp:
clrw
btfsc PORTB,7
incf Counter,w
movwf Counter
incf Display,f
EndDebounce:
movf Counter,w
;xorlw 4
btfss STATUS,Z
goto Delay1mS
comf LastStableState,f
clrf Counter
btfss LastStableState,0
goto Delay1mS
btfsc Boolean,0
goto Num1Set
btfsc Boolean2,0
goto Num2Set
goto Step3
Delay1mS:
movlw .02
Call Delay
goto MainLoop
Delay:
movwf Delay2
DelayLoop:
decfsz Delay1,f
goto DelayLoop
decfsz Delay2,f
goto DelayLoop
return
Num1Set:
movf Display,w
movwf Num1
movwf PORTC
clrf Boolean
goto Delay1mS
Num2Set:
movf Display,w
movwf Num2
movwf PORTC
clrf Boolean2
goto Delay1mS
Step3:
;movf Display,w
movlw Num2
movwf PORTC
goto Delay1mS
;andlw Num1
;movwf PORTC
;call Delay1mS
;goto Start
end
答案 0 :(得分:1)
你真的必须使用汇编程序吗?如果没有,在C中写下你想要的东西是非常容易的。在ASM中管理存储位置数据是很麻烦的,在C中你只需要声明2个变量来存储你的随机数。
您甚至可以保留ASM功能,只需将它们包装起来(使用所需的推送,弹出调用),这样您就可以从C上下文中调用它。