• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::

論壇索引


Board index » All Posts (abewu)




Re: 笨鴨有問題????
#11
初級會員
初級會員


Hi! Duck,

That was Billie Chic on Mars.
I was on the moon with the fairy (and you were by my side). Remenber?! ^_^.

Full name of 'rlf f,d' instruction is 'rotate left f through carry'.
After rlf operation, content in carry flag will be in the LSBit of register f.

Imagine that if content of 'Index' is '0000 0000', 'SDA' is 'HI' and it is cloned to carry flag.
Content of __ 'Index' ___ 'Carry Flag'
'_________ 0000 0000____ 1

after 'rlf Index' is excuted,
Content of __ 'Index' ___ 'Carry Flag'
'_________ 0000 0001____ 0

Content of carry flag is now rotated into 'Index' as its LSB and the MSB of 'Index' is now in carry flag.

Let's take another example,
If serial data byte sent to SDA is '1010 1010'.
Whole strory of 'Read_byte' will be,
Content of __ 'Index' ___ 'Carry Flag'
'_________ 0000 0000____ 1 ; New SDA value cloned
'_________ 0000 0001____ 0 ; 'rlf Index' excuted.

'_________ 0000 0001____ 0 ; New SDA value cloned
'_________ 0000 0010____ 0 ; 'rlf Index' excuted.

'_________ 0000 0010____ 1 ; New SDA value cloned
'_________ 0000 0101____ 0 ; 'rlf Index' excuted.

'_________ 0000 0101____ 0 ; New SDA value cloned
'_________ 0000 1010____ 0 ; 'rlf Index' excuted.

'_________ 0000 1010____ 1 ; New SDA value cloned
'_________ 0001 0101____ 0 ; 'rlf Index' excuted.

'_________ 0001 0101____ 0 ; New SDA value cloned
'_________ 0010 1010____ 0 ; 'rlf Index' excuted.

'_________ 0010 1010____ 1 ; New SDA value cloned
'_________ 0101 0101____ 0 ; 'rlf Index' excuted.

'_________ 0101 0101____ 0 ; New SDA value cloned
'_________ 1010 1010____ 0 ; 'rlf Index' excuted.

Serial data byte on SDA now is in 'Index'.
Is it amazing?!

Carry flag is not for the purpose of testing, but for bit transitting.
Did you catch what I'm trying to tell?


發表於: 2006/2/5 14:41
頂部


Re: 如何接收一長串UART的資料
#12
初級會員
初級會員


Hi! kennyk,

"只要將收到的資料一個 BYTE 一個 BYTE得存入指標Buffer 或陣列都可以的。"

版主說的這句話, 與您所提的 ReadUSART( ) 間的關係, 你或可參考
"在中斷服務程式中~~什麼叫做PASS"
本人的回應.

發表於: 2006/2/4 15:29
頂部


Re: 在中斷服務程式中~~什麼叫做PASS
#13
初級會員
初級會員


Dear 007,
我想你老師或許是說 如何將 ISR 的資訊 Pass 到 ISR 以外的 AP. 是嗎?

1. ISR 執行時將影響其他或/及自己的中斷運行. 所以, 一般而言, ISR 講究的是時效. 尤其對多重中斷更應重視執行效率.
2. 因此, ISR 越短越好. 應只處理必要的程序, 而將複雜的運算或處理給 ISR 以外的 AP 程式處理之.
3. 這就造成 ISR 與外界 AP 程式有溝通的必要.

4. 例如, UART 通訊程式中, 單一 byte 資訊沒有多大意義, 我們通常是要處理 一個字串 或 一筆 multi-byte 的資訊.
5. 然而這個複雜的 multi-byte 的處理或運算 如果由 ISR 處理時, ISR 不知道什麼時候才可以釋放資源, 這勢必影響 CPU 的整體運作.
6. 因此 ISR 只有在 IBF 或 OBE 中斷產生時 接收 或 發送 single byte 的資訊 自/給 UART 硬體. 而複雜的 multi-byte 的處理或運算必須是在 ISR 以外的AP程式處理之.
7. 因此, ISR 必需透過某種方式與 AP 作資訊交換.
AP 平時透過測試特定 status 知道 ISR 是否有新資訊送來, 或 前一個 字串 是否已送走.
如果有新字元送來, 該自元是加在 緩衝器 還是 字串 後, 則由 AP 處理之. 甚至 字串 是否已完整? 是否要執行 其他事物? 是否 time out? ... 等等, 都是 AP 的事, 完全與 ISR 無關, 因此 ISR 可以在最小, 最有效率下執行他的任務.

8. 這種資訊交換通常是藉由適當的 global varialbe declaration 完成.
9. 對於特定的 peripheral device, 這些宣告通常又會集中於一起, 或匯整成 header file. 對外只需知道 header file 中 變數 或 fuction / suboutine 的格式及名稱即可使用之.

10. 看起來你對 linux 很熟悉, 或可抓幾個 header file 來研究一下就會知道我再說啥了.

或許 您的老師所說的 PASS 是指這種 ISR 與 AP 作資訊交換 時的宣告 及 程式處理 等事物.

以上, 謹提供您參考之.

發表於: 2006/2/4 15:19
頂部


Re: 笨鴨有問題????
#14
初級會員
初級會員


Hi! Dear Duck,

For some private reasons, I disapeared for a period.
Did you back to TWN for Thanksgiving?
IOU one meal. You may get it anytime you will be in TWN again.

In your 'R_loop':
Carry flag was firstly reset to 'LO' and then 'SDA' is tested.
If 'SDA' is 'HI', then set carry flag (to 'HI').
It implies that
"if 'SDA' is 'LO', carry flag stays as 'LO'".

The 'SDA' state is now cloned to carry flag, isn't it?
After 'rlf' 8 times, one complete byte sent to 'SDA' is now in 'Index'.

OK La!
Look forward to hearing from you again.


發表於: 2006/2/4 11:55
頂部


Re: 18f4420 的 PLLEN
#15
初級會員
初級會員


參照:

calvinho 發表時間: 2006-01-27 11:38
版主

Re: 還是弄不出內部四倍頻...
你好,

都怪 Data Sheet 可能沒有很清處的表達 , 所以造成一些使用上的誤解啦 !

基本上你在 Configuration Bits 裡設定 Internal RC 為 Promary Oscillator , 這是對的 . 但是要把 Internal 4 or 8 Mhz 能用 PLL 倍頻 , OSCCON 的 bit 1..0 就要是 00.

為什麼呢 ? 因為 Internal RC 是 Primary 啊 . 如果你看 Data Sheet , 也會發現在方塊圖上 4 & 8 Mhz 若要有 PLL , 必須走上面啦 !

還有 , 設定 在 OSCTUNE 暫存器的 PLLEN 位元 , 透過 BSF 指令應該比較不會強制設定到某些值吧 !

新年快樂並祝你順利成功地讓 PLL 工作 :)


這篇回覆也同時回答了我10月的問題, 超讚的!

發表於: 2006/2/4 2:20
頂部


Re: 請問如何將10 bit ADC 轉換成 10進位資料
#16
初級會員
初級會員


Dear RYYu,

1. 您可引用 AN544 的 Appendix B 裡面的 16-bit 轉成 5-digit BCD (也就是 3 bytes, 每個 byte 有兩個 BCD <Dual-digit BCD Byte>) 的程式. 該處提供兩個 16-bit 轉成 5-digit BCD 轉換程式, 您可了解一下異同之處.

http://ww1.microchip.com/downloads/en/appnotes/00544d.pdf

2. 由於 10-bit 只佔 4-digit 的 BCD, 所以可以將 Dual-digit BCD 的 MSByte 丟棄. 剩 2 個 Dual-digit BCD bytes.
3. 取用 Dual-digits BCD 的 LSByte. 轉成兩個 bytes 的 10 進位 ascii code(右第一位數及第二位數).方法如4~7:

4. 該 Dual-digit BCD 以 logic "AND" 0FH, 再 logic "OR" 30H. 這將使得 MSNibble 的 BCD 內容被丟棄, 而將 LSNibble 部分的 BCD 轉成 10 進位 ascii code (30H~39H).
5. 這成為的較低位數的10 進位 ascii code, 將其存入適當的位置.
6. 取回該 Dual-digit BCD byte, 再用 swapf 指令將 BCD 的 nibbles 對調, 使得該 dual-digit BCD byte 中較高的 BCD digit 被調到 LSNibble 的位置.
7. 重複 4. 將被調到 LSNible 的較高位數 BCD digit 轉成 10 進位 ascii code, 並存入適當的位置.

8. 再取用 Dual-digit BCD 的第二個 Byte. 重複 4~7 得到第三及第四位數的 10 進位 ascii code, 並存入適當的位置..

也就是說, 對於 '02FDH' 這個 16-bit 數字, 經過前述處理時的結果如下,
1. 得到 '00H', '07H', '65H' 三個 bytes.
2. 丟掉 '00H', 因為永遠是 '00H'.
3. 取用 '65H', 得到 '36H' 及 '35H' 兩個 bytes 的 ASCII.

4. '65H' AND '0FH' -> '05H', OR '30H' -> '35H'.
5. Store '35H'.
6. '65H' swapf -> '56H'.
7. '56H' AND '0FH' -> '06H', OR '30H' -> '36H'.
Store '36H'.

8. 取用 '07H', 得到 '30H' 及 '37H' 兩個 bytes 的 ASCII.
'07H' AND '0FH' -> '07H', OR '30H' -> '37H'.
Store '37H'
'07H' swapf -> '70H'.
'70H' AND '0FH' -> '00H', OR '30H' -> '30H'.
Store '30H'.

OK啦! 這樣就可以得到 '30H', '37H', '36H', '35H' 等 4 位數的 ASCII CODE 啦!

Any other question?



發表於: 2006/2/4 0:49
頂部


Re: 請問如何將10 bit ADC 轉換成 10進位資料
#17
初級會員
初級會員


Dear RYYu,
將資料透過 rs232 傳送至PC不一定要十進位或多少進位. 你的問題應該是兩個獨立不相關的問題,
問題1. 如何將10-bit ADC的資料透過rs232傳送至電腦:
Binary Code 或 ASCII Code等都能傳. 但是如果你要透過如超級終端機等軟體連線時, 則需以ASCII Code傳比較好, 否則若干數值會被當成特殊碼, 無法讀取.
所以你的題目是否應該是如何要將 Binary Code換成 ASCII Code呢?
至於換成 ASCII Code時若仍保持16進位的話(0~9,A~F), 無論發送端還是接收端都會比較容易處理.

問題2. 將10-bit的16進位訊號轉換10進位的資料:
您可參考AN544 的 Appendix B.

發表於: 2006/2/3 17:32
頂部


Re: 簡單的開關問題
#18
初級會員
初級會員


Dear Tina,
是否能再清楚一點地描述問題。
是一隻 pin 要接兩個 Switch?
還是 Port A 要接 4x4 不夠用?

發表於: 2005/11/11 10:42
頂部


Re: 簡單的開關問題
#19
初級會員
初級會員


Dear Tina,
是否能再清楚一點地描述問題。
是一隻 pin 要接兩個 Switch?
還是 Port A 要接 4x4 不夠用?

發表於: 2005/11/11 10:42
頂部


Re: 請教10F220的A/D功能??
#20
初級會員
初級會員


Dear Duck,
I was just aware that you are in LA.
If you back to TW, just let me know.
You are my guest.
BR
Abe Wu

發表於: 2005/11/9 11:25
頂部



« 1 (2) 3 4 »



:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------