0

所以,我知道如何在按下按钮时生成一个随机数,但我不确定如何存储一个数字,更不用说两个了,然后让它不在按钮循环中时不会发疯。这是我现在的代码。

很抱歉它的不整洁,不知道如何为这个网站正确格式化。

#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  
4

1 回答 1

1

你真的必须使用汇编程序吗?如果没有,用 C 语言编写你想要的内容非常容易。在 ASM 中手动管理内存位置中的数据很麻烦,在 C 中您只需要声明 2 个变量来存储您的随机数。

您甚至可以保留您的 ASM 函数,只需包装它们(使用所需的 push、pop 调用),以便您可以从 C 上下文中调用它。

于 2011-07-12T01:05:35.263 回答