Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
|
||||
---|---|---|---|---|
初級會員
![]() ![]() |
謝謝Beee的回覆
![]() 用了Beee所講的方式去測了一下 Timer1 的起振時間,測起來平均在 1 秒左右, 我在 Timer1 中斷副程式加入計時程式,從 power on 開始到時間正常顯示這段時間,為 1 分鐘多一點, 也就是說 power on 約 1 秒後 Timer1 外接32768Hz震盪器已經起振完成開始震盪了,而且在這之後的 1 分多鐘,也都正常震盪, 我照Ryang板主所說用 ICD2 去執行程式,發現 Timer1 中斷每次都有發生 ![]() ![]() 看了一下暫存器跟變數的內容,發現有一個變數每次停在中斷點時都會減一,不過值是從 255 一直減下來, 再重新檢查了程式,發現一個計算秒的變數沒初始化到 ![]() power on ,Timer1 起振後由於 halfSec 沒初始化到,所以一開始 halfSec=0 ,一進入到 Timer1 中斷, 執行到 decfsz halfSec 後,halfSec 的值就變為 255(0-1=255) ![]() Bug 的原因是 halfSec 沒有初始化到 ![]() 感覺有點對不起大家 ~~~><~~~ 不過由於這次大家提供的意見跟除錯方法還有很多寶貴的知識,讓我獲益良多對ICD2的除錯用法也更加了解,再次謝謝大家 ![]() ![]() ![]() 以下對2個已解決的狀況作個總結:
1. 程式寫超過程式記憶體 page0(0005h~07ffh) 無法動作的問題
以上跟大家分享一下,希望對大家會有所幫助 ![]() 再次謝謝大家的回答 ![]() ![]() ![]()
發表於: 2009/12/2 14:15
|
|||
|
Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
|
||||
---|---|---|---|---|
初級會員
![]() ![]() |
謝謝Ryang板主及Beee的回覆
![]() 突然想到,我的程式 power on 的時候,時間顯示 00 00 再來 0.5 秒後時間顯示 00:00 再來就要1分鐘後才會顯示 00:01,然後開始正常動作, : -> 1秒亮滅一次(0.5秒亮,0.5秒滅) : 的顯示是在 Timer1 中斷直接處理,時間顯示是在時間顯示副程式處理, 也就是說 power on 時,大約1秒左右,Timer1 第一次中斷有執行到(: 有顯示出來),再來 Timer1 中斷就間隔 1 分鐘以後才又執行到, 依這樣分析好像是程式有問題,不過 power on 以後每次 reset 時間顯示都正常(馬上就動作了),這樣感覺程式好象又沒問題 ![]() 不知哪裡出了問題? ![]() 難道是一開始有震盪起來,後來又掉下來,再來又震盪起來 ![]() 明天到公司的時候再照Ryang板主及Beee的建議來debugger看看,看能不能找出哪裡出問題 一有蛛絲馬跡就馬上PO上來跟大家討論 ![]() 再次謝謝大家的回答 ![]() 祝大家晚安 ![]() ![]()
發表於: 2009/12/1 23:23
|
|||
|
Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
|
||||
---|---|---|---|---|
初級會員
![]() ![]() |
謝謝shpehg及Beee的回覆
![]() 我再從硬體方面來改看看,不過現在是用麵包板再做測試,接到 MCU 的線都很長,不知道是不是這樣造成的影響, 我再來測測看有結果在PO上來 ![]() 原來 Beee 想抓板主的小辮辮 ![]() ![]() ![]() ![]()
發表於: 2009/12/1 9:02
|
|||
|
Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
|
||||
---|---|---|---|---|
初級會員
![]() ![]() |
謝謝shpehg及Ryang板主及Beee的回覆
![]() 偷偷不用心一下被發現 ![]() ![]() 還好shpehg及Ryang板主再次提醒,讓我注意到 0x04h≠goto ISR ![]() 目前程式改成這樣:
STARTUP CODE
因為在 0x04h 加入好幾個指令,用 org 不知道要怎麼寫, 所以直接套用C:\Program Files\Microchip\MPASM Suite\LKR\16f946.lkr 這個檔案來修改 紅色部分是我修改的部份,中斷一發生,程式就跳到 0x04h,開始執行放在這裡的指令,banksel 和 pagesel 各佔 2 個記憶體位址, 所以從 0x04h 的 banksel tempW 指令到 goto ISR 指令,共用了 10 個記憶體位址,所以紅色部分我修改為 0x0D, 由於從 0x04h~0x0Dh 用掉了 page0(0005h~07ffh) 共 9 個記憶體位址,所以紅色部分我修改為 0x0E,程式段由 0x0E 開始, 以上如有說錯還請指正,謝謝 ![]() ![]() ![]()
// Sample linker command file for 16F946
以上提供給大家參考一下,pagesel 的問題解決了 ![]() 不過還有2個問題 ![]()
問題1. MCU 每次 power off 再 power on ,程式已開始動作,
以上再請大家指點一下,謝謝 ![]()
發表於: 2009/11/27 18:57
|
|||
|
Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
|
||||
---|---|---|---|---|
初級會員
![]() ![]() |
謝謝Ryang板主的回覆
![]()
org 00h
我的程式流程是一開始從 00h 進入就跳到 Start 開始變數給定初始值,暫存器設定,完成後才開始作其他的動作, Ryang板主說的 Cold Start or Warm Start 指的是這個嗎? 剛用 ICD2 debugger 在看 PCLATH 的值,結果有看到 1F ?我只用到page1(0800h~0fffh),應該不會跑到page3(1800h~1fffh)才對 ![]() 我再來看一下,有結果再PO上來跟大家討論一下 ![]() 以上再請大家指點一下,謝謝 ![]()
發表於: 2009/11/27 13:55
|
|||
|
Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
|
||||
---|---|---|---|---|
初級會員
![]() ![]() |
謝謝shpeng及Beee的回覆
![]() 昨天下午跑去送貨 ![]() ![]() 我的探棒是x10下去量的,會吃掉訊號,我再想想其他方式,因為沒有x100 ![]() 忘了電容並是提高容值耐壓不變,串聯是提高耐壓容值降低 ![]() 看了Beee的回覆,發現32768Hz震盪器似乎沒有問題,這樣問題就釐清了一些,
問題1. MCU 每次 power off 再 power on ,程式已開始動作,
以上再請大家指點一下,謝謝 ![]()
發表於: 2009/11/27 10:05
|
|||
|
Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
|
||||
---|---|---|---|---|
初級會員
![]() ![]() |
謝謝shpeng及Ryang板主的回覆
![]() 也謝謝shpeng的加油打氣 ![]() 目前發現2個問題點:
1. EEPROM的問題,我的程式目前設定程式一開始執行時,會從EEPROM讀出資料顯示在 LCD 上,
以上兩點還請大家指點一下,謝謝 ![]() 趕快來去惡補一下MPASM的講義 ![]()
發表於: 2009/11/26 14:46
|
|||
|
Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
|
||||
---|---|---|---|---|
初級會員
![]() ![]() |
用 ICD2 去 debugger 時發現
系統主時脈是用內部8MHz震盪器 Timer1 外接 32768Hz 震盪器當時鐘計時用 是 32768Hz 震盪器有問題的關係嗎? ![]() 還是有其他問題 ![]() 再請大家指點一下,謝謝 ![]()
發表於: 2009/11/25 17:25
|
|||
|
Re: 使用PIC16F946遇到pagesel問題跟timer1外接32768Hz震盪器問題
|
||||
---|---|---|---|---|
初級會員
![]() ![]() |
謝謝Ryang板主的回覆
![]() 目前測試有發現在 pagesel 副程式,call 副程式返回後, 如果接下來是變數,在變數之前沒加 banksel 就會不正常, 變數前有加 banksel 就正常, 感覺跟shpehg所提到的一樣跟bank有關係
banksel var0
目前我程式架構如下
主程式 -> 在page0(0005h~07ffh)
我有ICD2 不過都只拿來燒程式用,debugger還不太會用,我等一下去網路學園看一下,上次有看到影音檔裏有講到, SIM有些功能也還不會用,不知道有沒有SIM的中文教材? 以前程式還沒寫超過page0(0005h~07ffh), 這是第一次遇到程式寫超過2K,所以有點混亂 ![]() 目前變數已使用 bank0 21h~64h ,預計程式寫好會用到 bank1 去,趕快在來去改程式 有結果再PO上來跟大家分享一下 ![]()
發表於: 2009/11/25 14:44
|
|||
|