存储数字PIC ASM

时间:2011-02-14 05:38:30

标签: assembly microcontroller pic

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

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

#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  

1 个答案:

答案 0 :(得分:1)

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

您甚至可以保留ASM功能,只需将它们包装起来(使用所需的推送,弹出调用),这样您就可以从C上下文中调用它。