打印

请教TMR0用于定时TMR1用做计数的问题

[复制链接]
2387|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
暮雨修竹|  楼主 | 2008-6-30 21:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾,我想用TMR0定时1S,TMR1计数。

思路是电路4M晶振,256分频,所以16次TMR0溢出得到1S延时。       

TMR0采用查询方式,等待1S后调用读取TMR1计数,送上位机。

写了段程序。

现在的情况是程序运行后,上位机一直显示00 似乎没有计数值。

请教是什么原因。

CESU
           BSF               STATUS,RP0            ;选体1
           CLRF            T1CON
           CLRF            TMR1L                       ;清除TMR1计数内容
           CLRF            TMR1H
           MOVLW         07H                           ;定义TMR0的工作方式
           MOVWF        OPTION_REG           ;TMR0分频比1:256
           BCF               STATUS,RP0            ;选体0,用以定义TMR1工作方式
           MOVLW         0X06                        ;设置控制寄存器,预分频比为1:1
           MOVWF         T1CON                    ;外部时钟源、异步
           BCF               INTCON,T0IF           ;清TMR0溢出标志位
           MOVLW        .12                              ;开启TMR0
           MOVWF         TMR0                  
           BSF               T1CON,TMR1ON          ;开启TMR1

LP1   
           BTFSS            INTCON,T0IF           ;检测是否发生TMR0溢出
           GOTO              LP1                       ;未发生TMR0溢出,跳转到LP1,等待溢出
           BCF                 INTCON,2              ;清空溢出标志位
LP2     

            BTFSC           TMR0,0                ;检测TMR0的末位
            GOTO             LSB_1                 ;末位为1,跳转到LSB_1
LSB_0:     

           BTFSS             TMR0,0                ;末位为0,继续检测TMR0的末位
           GOTO               LSB_0                 ;末位仍为0,继续检测
           GOTO             CHANGE                ;末位变1,跳转到CHANGE
LSB_1:    

            BTFSC             TMR0,0                ;继续测TMR0的末位
            GOTO               LSB_1                 ;末位仍为1,继续检测
            NOP                                              ;末位变0,空操作,插入2条空指令
            NOP                                              ;以均衡检测0变1和1变0所用时间
CHANGE:   

             MOVLW            08H                   ;用于延时
             MOVWF     TEMP2                      ;用于延时
LOOP:     

            DECFSZ        TEMP2,1               ;用于延时
           GOTO              LOOP                  ;4条指令共产生25个指令周期的延时
           INCF              TEMP1,1               ;TMR0溢出次数加1
           MOVLW          .12
           ADDWF          TMR0,1                ;将TMR0值加12写入TMR0
           BTFSC            STATUS,0              ;检查进位标志位
           GOTO             LP2                       ;若发生进位,转去执行下一次溢出服务,而省略等待和验证溢出过程
           MOVLW          .16
           SUBWF            TEMP1,0
           BTFSS            STATUS,0              ;判断溢出次数是否达到16
           GOTO             LP1                   ;未达16次,结束本次查询,继续等待下次溢出
           CLRF             TEMP1                 ;达到16次,溢出次数清零
           GOTO             L3                    ;调用取转速程序
           RETURN


把程序改成不用TMR0定时,而用软件延时,可以在上位机接收到数据。

大家帮我看看这个是什么问题,

谢谢了。
沙发
兰天白云| | 2008-7-2 22:37 | 只看该作者

电路4M晶振,256分频

电路4M晶振,256分频  256us T0+1一次  16次大约1秒

T0溢出后T0IF=1,如果不清除则一直为1

建议用T1中断

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝