| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
不停止timer1,如何正確讀出其值? | 
  
| 作者:wszqw 欄目:單片機(jī) | 
| 2樓: | >>參與討論 | 
| 作者: wszqw 于 2004/11/27 23:53:00 發(fā)布:
         這段指令好象還是不周全 movf TMR1H,w movwf temph movf TMR1L,w movwf templ movf TMR1H,w xorwf temph,w btfss STATUS,Z incf temph,f ...... 這段指令估算了半天好象還是不周全 有更好的辦法嗎  | 
  |
| 3樓: | >>參與討論 | 
| 作者: 碧水長天 于 2004/11/28 11:10:00 發(fā)布:
         請兄弟參考... 先分析一下您這個程序的思想: movf TMR1H,w movwf temph movf TMR1L,w movwf templ movf TMR1H,w xorwf temph,w btfss STATUS,Z incf temph,f ...... 先讀TMR1H,在讀TMR1L,然后繼續(xù)讀TMR1H,并比較如果兩次結(jié)果是否相同,如果不相同,則認(rèn)為讀去正確,如果不相同,則認(rèn)為TMR1L發(fā)生了進(jìn)位,于是將上次讀到的TMR1H值加1。 但是樓主這樣做有兩個應(yīng)該值得注意的地方: 1.應(yīng)先確保讀數(shù)前暫禁所有中斷,因?yàn)橹袛嗵幚淼臅r候,TMR1仍然在計(jì)數(shù)的話則會破壞讀數(shù)的實(shí)時性; 2.程序中當(dāng)判斷TMR1L有進(jìn)位時,便將上次讀到的TMR1H值加1,但是,此時進(jìn)位后的TMR1L值,卻忘了更新... 由于btfss STATUS,Z條件滿足時只能跳過一條指令,為了方便程序的編寫,可以將沒有進(jìn)位發(fā)生時的TMR1H,TMR1L的值作為讀去結(jié)果... 給出一個參考代碼: BANKSEL TMR1H ; 選擇bank0 BCF INTCON,GIE ; 暫禁所有中斷 again MOVFW TMR1H ; 讀TMR1H MOVWF temph MOVFW TMR1L ; 讀TMR1L MOVWF templ MOVFW TMR1H ; 再讀TMR1H XORWF temph,W ; 兩次TMR1H的值比較(異或) SKPZ ; 相同則跳過下一條指令,讀取成功 GOTO again ; 否則,則重新讀取并判斷 BSF INTCON,GIE ; 讀取正確,允許中斷  | 
  |
| 4樓: | >>參與討論 | 
| 作者: wszqw 于 2004/12/2 15:58:00 發(fā)布:
         謝謝 碧水長天 兄弟果然細(xì)致,你的程序段思路很好,很周全. 我的程序段是在中斷程序里執(zhí)行的 中斷程序只安排了這么一個任務(wù) 因?yàn)橐笾袛喑绦驁?zhí)行時間盡量短 并且每次從進(jìn)入中斷到讀出tmr1所花時間必須嚴(yán)格一致,具體說就是: 假設(shè)進(jìn)入中斷的時刻為0,讀出tmr1的時刻為N,那么每次都必須讀到tmr1在N時刻的值 你認(rèn)為有沒有更好的辦法?  | 
  |
| 5樓: | >>參與討論 | 
| 作者: wszqw 于 2004/12/2 16:01:00 發(fā)布:
         這是我寫程序時的分析,舉例不一定正確,但思路應(yīng)該是對的 中斷程序中準(zhǔn)確讀出tmr1的值(存到PPMCTH和PPMCTL): 動作 指令 可能情況舉例 tmr1 Ppmct 讀TMR1H的值到PPMCTH Movf TMR1H,w 00ff Movwf PPMCTH 0100 00XX 讀TMR1L的值到PPMCTL Movf TMR1L,w 0101 Movwf PPMCTL 0102 0001 TMR1H的值等于PPMCTH? Movf TMR1H,w 0103 Xorwf PPMCTH,w 0104 若不等則PPMCTH+1 Btfss STATUS,Z 0105 Incf PPMCTH,f 0106 0101 讀TMR1H的值到PPMCTH Movf TMR1H,w 00fe Movwf PPMCTH 00ff 00XX 讀TMR1L的值到PPMCTL Movf TMR1L,w 0100 Movwf PPMCTL 0101 0000 TMR1H的值等于PPMCTH? Movf TMR1H,w 0102 Xorwf PPMCTH,w 0103 若不等則PPMCTH+1 Btfss STATUS,Z 0104 Incf PPMCTH,f 0105 0100 讀TMR1H的值到PPMCTH Movf TMR1H,w 00fd Movwf PPMCTH 00fe 00XX 讀TMR1L的值到PPMCTL Movf TMR1L,w 00ff Movwf PPMCTL 0100 00ff TMR1H的值等于PPMCTH? Movf TMR1H,w 0101 Xorwf PPMCTH,w 0102 若不等則PPMCTH+1 Btfss STATUS,Z 0103 Incf PPMCTH,f 0104 01ff ////////error 讀TMR1H的值到PPMCTH Movf TMR1H,w 00fc Movwf PPMCTH 00fd 00XX 讀TMR1L的值到PPMCTL Movf TMR1L,w 00fe Movwf PPMCTL 00ff 00fe TMR1H的值等于PPMCTH? Movf TMR1H,w 0100 Xorwf PPMCTH,w 0101 若不等則PPMCTH+1 Btfss STATUS,Z 0102 Incf PPMCTH,f 0103 01fe ////////error 讀TMR1H的值到PPMCTH Movf TMR1H,w 00fb Movwf PPMCTH 00fc 00XX 讀TMR1L的值到PPMCTL Movf TMR1L,w 00fd Movwf PPMCTL 00fe 00fd TMR1H的值等于PPMCTH? Movf TMR1H,w 00ff Xorwf PPMCTH,w 0100 若不等則PPMCTH+1 Btfss STATUS,Z 0101 Incf PPMCTH,f 0102 00fd    | 
  |
  | 
    
 
  | 
  
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 | 
Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號  |