推 ruemann:這個排版真是……太贊了……orz 11/07 22:39
→ ruemann:看不懂你說的1~4us和1~15us的誤差是如何算出的 11/07 22:39
→ ruemann:所謂的誤差是?另外,30ns一個座標是指?看不懂 11/07 22:40
→ tea1116:我的意思是我做這CODE是接收串列資料後不處理 11/07 22:47
→ tea1116:然後DELAY一段時間CLR P1.1腳 11/07 22:48
→ tea1116:而至於怎麼知道DELAY時間的問題,因為以800*600為例 11/07 22:49
→ tea1116:我要定位Y=300在螢幕上的話,就送出300*30ns的delay 11/07 22:50
→ tea1116:線在單純只定位在我想讓滑鼠停在螢幕某點可以做到 11/07 22:51
推 ruemann:所以你的意思是,當滑鼠點了以後,你顯示的點和滑鼠的位置 11/07 22:53
→ ruemann:有誤差就是了? 11/07 22:53
→ tea1116:所以我只要燒玩啟動電路就知道滑鼠位置跟加部份1的結果 11/07 22:52
→ ruemann:再問一下,你的8051是幾T的,另外用多少MHz的Crystal 11/07 22:54
→ tea1116:差多少了?主要問題在這兩個放一起是否需設定什麼 11/07 22:54
→ tea1116:對阿...我的意思是這樣~希望可以幫我解決 11/07 22:55
推 ruemann:依你的條件,假設誤差要設在1us以內,則每個指令的時間需 11/07 22:57
→ ruemann:要小於1us,最好是每個指令能小於0.5us比較容易做 11/07 22:57
→ tea1116:可是現在問題點是我加了接收串列資料跟沒家結果有出入 11/07 22:59
→ tea1116:問題在於我不清楚這兩者加起來怎麼會干擾? 11/07 23:00
→ tea1116:因為我接受串列資料只是做到碰一下做一個DELAY. 11/07 23:00
→ tea1116:理論上應該不影響我要做的後面的DELAY部分,但結果有影響 11/07 23:01
推 ruemann:要確定在接收UART時,垂直訊號是否已經進來了? 11/07 23:04
→ ruemann:你現在是先收3bytes,然後再去檢查P1,所以如果在收UART 11/07 23:05
→ ruemann:時,P1的狀態已經改變的話,那麼誤差就有可能產生 11/07 23:05
→ tea1116:垂直訊號一直有進來...所以大大的意思是我收UART時 11/07 23:07
→ tea1116:有可能影響到P1的垂直訊號摟? 11/07 23:08
→ tea1116:那單純只看加上UART跟沒加只做DELAY的CODE 11/07 23:09
→ tea1116:加了以後不做什麼設定不會影響後面做DELAY嗎? 11/07 23:11
→ tea1116:因為垂直訊號是固定從螢幕送出來的...應該不會有問題 11/07 23:12
推 ruemann:我的意思是,沒有收UART的話,那垂直訊號應該不會漏掉 11/07 23:12
→ tea1116:如果有問題的話在我只單純做DELAY的時候就會有問題 11/07 23:13
→ ruemann:但加了UART後,就有可能會漏掉幾個訊號,那會不會影響結 11/07 23:13
→ ruemann:果不清楚 11/07 23:13
→ tea1116:不會等我加了URAT以後才又增大誤差(1~15us) 11/07 23:13
→ tea1116:那有辦法拿到漏掉的訊號嗎?減慢做UART的速度之類的 11/07 23:14
→ tea1116:我有試過可是沒影響 11/07 23:15
推 ruemann:UART不是可以用中斷去收嗎? 11/07 23:16
→ tea1116:用中斷就可以去掉考慮訊號漏掉的問題嗎? 11/07 23:19
→ tea1116:因為我後面還需要這些BYTE的資料作處理 11/07 23:20
→ tea1116:所以我才寫在最前面...那如果用中斷我該怎麼寫呢 11/07 23:21
推 ruemann:UART是只有一次,還是會一直去讀? 11/07 23:22
→ tea1116:把它改成副程式?然後ACALL UART副程式 11/07 23:21
→ tea1116:感覺也是做同樣的動作的樣子 11/07 23:22
→ tea1116:一直讀...因為要做定位的工作...所以一直要再同一點 11/07 23:22
推 ruemann:用中斷的話,在讀UART時就不用一直耗在那裡,影響會小很多 11/07 23:25
推 tea1116:嗯嗯..那我明天TRY看看再回報請大大幫忙 11/07 23:27
→ tea1116:也感謝大大不辭辛勞回答我的問題 11/07 23:27
→ tea1116:因為我也覺得是UART接收部分影響作DELAY部分 11/07 23:28
推 ruemann:你設9600,那收3個bytes至少要3.4375ms,如果訊號的速度 11/07 23:29
→ ruemann:比這個還慢的話,大概影響不大 11/07 23:29
→ tea1116:只是不清楚UART要怎麼做才不會影響作DELAY的方法 11/07 23:28
→ tea1116:訊號的速度大概16ms會出現一次高電位 11/07 23:30
→ tea1116:可惜理論跟結果出來的有出入阿...所以要假設會影響才行 11/07 23:31
→ tea1116:目前沒有找到書有講說類似這方面的問題 11/07 23:32
推 ruemann:有多的IO的話,在讀UART時設成high,然後和訊號做比較 11/07 23:33
→ ruemann:看會不會打架 11/07 23:33
→ ruemann:如果你有示波器或LA的話 11/07 23:33
→ tea1116:我都有...那我也會測試看看...先建立副程式然後再做這動作 11/07 23:34
→ tea1116:恩?可是我的P1.1就是設為HIGH然後做比較耶 11/07 23:35
→ tea1116:現在我就有用到3個PORT 1個接收訊號做DELAY 一個UART 11/07 23:37
→ tea1116:一個等DALAY完立刻送低電位 11/07 23:38
→ tea1116:而我的IC 89C51只有三個I/O PORT ....用滿了 11/07 23:38
推 tea1116:做中斷結果一樣..看樣子又卡關了.... 11/08 23:26
※ 編輯: tea1116 來自: 140.127.77.235 (11/09 13:51)
推 ruemann:解決了是很好,不過方便的話大概敘述一下原因… 11/09 20:57
推 tea1116:原因是uart收資料的時間影響做延遲的時間~不過加判斷式就 11/10 00:15
→ tea1116:好了...還是感謝大大幫忙 11/10 00:16
推 ruemann:就是a+b>c……還真的沒想到 11/10 09:45
→ ruemann:所以要調整一下b的值…… 11/10 09:46
推 ruemann:其實用timer計時,時間到就送訊號出去,做法上會比較簡單 11/10 16:26