PIC组装代码不起作用,PICKit2,超声波传感器

时间:2014-06-29 22:50:40

标签: assembly pic electronics

我正试图搞砸一些电子产品,到目前为止还喜欢它!使用PIC16f1824获得PICKit 2进行编码。我有一个面包板,有一些LED,电线和超声波传感器。传感器有2个引脚,1个用于触发,1个用于回声。这是我的汇编代码,但它不起作用。红色LED根本没有点亮:S

据我所知,面包板正常工作,所有连接都正确连接。我已经测试过只需打开和关闭LED。

#include 

CBLOCK 0x70 ; DEFINE VARIABLES USED
d1
d2
d3
d4
Count
ENDC

ORG 0x00     ;RESET VECTOR

BANKSEL TRISA
movlw b'00000010' ;Setting all but RA1 to output, RA1 is input
movwf TRISA

MAINLOOP
CALL TRIG ;short burst to trigger pin
GOTO COUNT ;cout untill a signal is received
MLOOP
GOTO COUNTCHECK ;RA1, or echo, receives a signal, check how far
GOTO MAINLOOP

TRIG
CLRF Count
BANKSEL LATA
BSF LATA,0 ;trigger signal on
CALL Delay
BCF LATA,0 ;trigger signal off
RETURN

COUNT
INCF Count,1 ;increase by 1
CALL Delay ;delay 0.001 seconds
BANKSEL PORTA
BTFSS PORTA,1 ;checking if RA1 has recevied anything
GOTO COUNT ;loops
GOTO MLOOP ;RA1 received, go to main loop middle

COUNTCHECK
movlw d'6' ;gives w a value of 6
;movf Count,w ;
subwf Count,w ;count - w
BTFSC STATUS,C ;cheking c, is anything borrowed from w(nagative result) C is 0, nothing borrowed C is 1
;if result is 0, Z is 1(set), negative or positive is 0(clear)
GOTO REDLED ;turn on red led, Count is less than w(6) which means the obstacle is 1 meter away
GOTO GREENLED ;Count is larger than w(6), took more than 0.6 seconds before echo return, which means more than 1 meter away

REDLED
BANKSEL LATA
BCF LATA,3 ;turn off red led
BSF LATA,2 ;turn on green led
GOTO MAINLOOP ;go back to main loop, new trigger

GREENLED
BANKSEL LATA
BCF LATA,2 ;turn off green led
BSF LATA,3 ;turn on red led
GOTO MAINLOOP ;go back to main loop, new trigger

Delay       ;1 millisecond, 0.001 seconds
            ;993 cycles
    movlw   0xC6
    movwf   d1
    movlw   0x01
    movwf   d2
Delay_0
    decfsz  d1, f
    goto    $+2
    decfsz  d2, f
    goto    Delay_0

            ;3 cycles
    goto    $+1
    nop

            ;4 cycles (including call)
    return

END

3 个答案:

答案 0 :(得分:0)

我建议你先修改示例代码。 链接在这里: http://www.microchip.com/DevelopmentTools/ProductDetails.aspx?PartNO=dm164130-9 有一个链接“PICkit 3入门套件源代码”,其中包含许多汇编程序和C中的示例。

答案 1 :(得分:0)

我对PIC很新,所以我不知道我的帮助是否有用。

我认为命令BTFSC,Status,C意味着如果STATUS,C为0,则跳过下一个命令GOTO REDLED,即如果Count-w的结果为正。但是,有一些事情让我感到震惊。 如果它是7或更大(忽略0条件),则计数将是正数,但如果总延迟超过0.007秒,则这将是7或更大,因为延迟是0.001秒延迟。根据你的评论,不是0.6秒。这会对您的预期接近阈值产生影响。

只有在Count-w的结果为负时才会调用GOTO REDLED,这需要Count不超过5(延迟0.005秒)。

此外,您在GOTO REDLED命令旁边的注释表明这会打开红色LED,但子程序REDLED似乎会关闭红色LED。

我不知道使用Watch窗口和特殊功能寄存器窗口进行调试是否会有所帮助,因为我之前没有通过实时端口监控程序进行操作。

但是,我认为它是一段很有吸引力的代码,通过它很有趣。对不起,如果我无法给出明确的答案。

答案 2 :(得分:0)

对不起,还应该提到: 我不确定是什么 ; movf Count,w;

Countcheck中的

是为了,但我假设它是故意注释掉的。 一切顺利 - 我希望你能让它发挥作用。这听起来像一个有趣的项目。 马特