0

そのため、ボタンが押されたときに乱数を生成する方法は知っていますが、1 つの数値を格納する方法はわかりません。ここに私のコードがあります。

乱雑で申し訳ありません。このサイト用に適切にフォーマットする方法がわかりません。

#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 関数を保持することもできます。ラップするだけで (必要なプッシュ、ポップ呼び出しを使用して)、C コンテキストから呼び出すことができます。

于 2011-07-12T01:05:35.263 に答える