这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » VXWORKS,NUCLEUS,keil,for,arm,01a,ccd,135

共2条 1/1 1 跳转至

,VXWORKS,NUCLEUS,keil,for,arm,01a,ccd,13581980230, 请各位指点:一个比较简单的汇报程序

院士
2006-09-17 18:14:16     打赏
,VXWORKS,NUCLEUS,keil,for,arm,01a,ccd,13581980230, 请各位指点:一个比较简单的汇报程序



关键词: VXWORKS     NUCLEUS     135819802    

院士
2006-12-22 22:43:00     打赏
2楼
问 功能是超声波测距:先让其不断的发送声波,同时计时;接收到超声波后进入中断,停止计时,假如计时的时间大于1000us(12M的晶振,计时器加一就是一us没错吧)LED显示.
请问各位 时间大于1000us的算法对不对。另一个问题就是中断一次之后就不能再中断了,是什么原因呢?
程序如下:

初始化
             
PUZEL : SETB  P1.0    ;1us
        MOV  14H , #02H ;2us
        SETB  ET0    ;1us
        SETB  EX0    ;1us
        SETB  EA     ;1us
        SETB  P3.2    ;1us
        MOV  R0 ,  #02H     ;1us
DH :    DJNZ R0 , DH       ;2us*2=4us
        CPL  P1.0          ;1us
        NOP               ;1us
        MOV  R0 ,  #04H  ;1us
DL :    DJNZ  R0 ,  DL    ;2us*4=8us
        DJNZ  14H , PUZEL ;2us
;声波发生程序段    

INIT0 : CLR  TR0
        SETB P1.7
        MOV  R2 , TH0
        MOV  R3 , TL0
        MOV  R6 , #03H
        MOV  R7 , #0E8H
SUB1 :  CLR  C
        MOV  A , R3
        SUBB A , R7
        MOV  A , R2
        SUBB A , R6 ;计时时间若小于1000us,则跳LED显示     
        JC  LED
        MOV  TH0 ,  #00H ;若计时时间大于1000us则重新计时,等待下一次中断
        MOV  TL0 ,  #00H
        SETB TR0
        RETI  1: 打错,汇编程序以上是声波发生程序和中断程序段,各位看看问题出在哪里,谢啦 2: JC  LED?跳出去后没有了中断返回?硬件已经被锁!怎么可以再进中断呀!不知后面的程序如何!不好发表了! 3: LED的程序段如下LED :   CLR  P1.7
        MOV 20H , #64H
LOOP4 : MOV 21H , #64H
LOOP5 : MOV 22H , #64H
LOOP6 : DJNZ 22H , LOOP6
        DJNZ 21H , LOOP5
        DJNZ 20H , LOOP4
        SETB P1.7
        RET 4: RE:把RET去掉改成跳到上面的RETI吧!这样就OK了~~~因为跳出去后没有中断返回!RET只是子程序返回,问题应该就出在这里吧! 5: 帮你改了一下!INIT0 : CLR  TR0
        SETB P1.7
        MOV  R2 , TH0
        MOV  R3 , TL0
        MOV  R6 , #03H
        MOV  R7 , #0E8H
SUB1 :  CLR  C
        MOV  A , R3
        SUBB A , R7
        MOV  A , R2
        SUBB A , R6 ;计时时间若小于1000us,则跳LED显示     
        JNC  SUB2
        CALL LED
        AJMP SUB3
SUB2:   MOV  TH0 ,  #00H ;若计时时间大于1000us则重新计时,等待下一次中断
        MOV  TL0 ,  #00H
        SETB TR0
SUB3:   RETI
6: ACALL LED
ACALL LED  7: 吓我一跳……怎么搞出来一个‘汇报程序’…… 8: 严重反对这样使用时间常数,好好的一个东西糟蹋成这个样子了 9: TIMER0中断是在加一过程中产生了溢出,这时候才符合中断的条件你在程序这样用中断,只能为2^16uS产生一次中断。并且不能调用LED段(因为没有符合条件的),只有TH0 and TL0=0是才产生中断,你在这里永远不会得到TH0=03H and TL0=0E8H的。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]