Re: 軟體UART
|
||||
---|---|---|---|---|
資深會員
|
我在16上面用CCS很久了,CCS跟很多Basic Like的編譯器一樣,對於程式撰寫人員在開發上是很友善的。無所謂專不專業。用CCS一樣可以寫到跟組語一樣很底層。
個人認為只有不專業的人,沒有不專業的編譯器。
發表於: 2008/8/21 21:52
|
|||
不要問我哪裡來,我只是個流浪天涯的工程師
|
||||
|
Re: 軟體UART
|
||||
---|---|---|---|---|
資深會員
|
To bramn:
所以啊,一般來說,CCS 被稱為非專業的compiler,呵呵
發表於: 2005/3/17 16:49
|
|||
|
Re: 軟體UART
|
||||
---|---|---|---|---|
資深會員
|
灌水一下 po 一篇以前寫的老文章 ... 突破一百篇啦
CCS 不要求高水平 某人說 >> 个人认为如果你刚刚入门,又不想从汇编下手,用PICC工具也可以让你领会底层的操作控制。如果已经有较高水平,那就可以用CCS。这样你的开发速度可以加快,很多细节的考虑可以忽略。 我說: 對於水平高低,我的看法如下: 個人認為, PICC 較接近匯編,它強迫你,先學會那一堆寄存器的名稱與功能,才能開始寫 C 程式,甚至於強迫你自己做記憶體的配置 (分配 bank)。PICC 要求你领会底层的操作控制,我覺得,這是要求你有較高的水平! 剛開始用 CCS 的人,根本不用知道任何一個寄存器的名稱,不用懂匯編,更不用知道什麼叫做 bank,只要知道接腳名稱與功能,就可以開始寫程式啦,就可以開始玩 RS232,玩 PWM,玩 I2C,不用管細節,直接用 CCS 提供的庫函數與範例就可以搞定啦。我就是這樣的,我覺得我是低水平的人,呵呵。 我認為, C 語言的精神應該是去降低程式員處理底層操作的必要性。 就以延時函數和 RS232 寄存器設定為例,我覺得,在匯編來說是基本功夫,但是,要求 C 語言的初學者去寫一個具有移植性的延時函數或 RS232 寄存器設定那根本就是折磨人嘛。不過,玩過一陣子 CCS 之後,還是得視需要,去瞭解細節,去深入研究相關的寄存器,研究底層的操作控制才能提昇水平啦。我的看法是, CCS 允許你延後深入細節的時間點,RMW操作與中斷處理就是最好的例子。 剛開玩 CCS 時,總覺得 output_high ( PIN_C0 ) 這種 CCS 語法真是好笑,為什麼不直接用 C0 = 1 這種簡單明瞭的語法,玩過兩年之後,才體會到那都是為了安全性以及移植性的考慮,是 CCS 在默默的保護我!
發表於: 2005/3/17 13:32
|
|||
|
Re: 軟體UART
|
||||
---|---|---|---|---|
新會員
|
不....會吧.....就這樣喔......
CCS那麼好用喔.... 真是直觀的寫法./_\.... 嗚~~~不放棄C18...繼續Try..../_\ 等try出來再寫個類似CCS的function來用....
發表於: 2005/3/17 12:36
|
|||
|
Re: 軟體UART
|
||||
---|---|---|---|---|
資深會員
|
插花一下
CCS 一行搞定 #use delay(clock=4000000) #use rs232(baud=9600, xmit=PIN_B4, stream=SW_UART) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // HW_UART main() { printf(SW_UART, 'hello world'); // 送到軟體 UART 去 printf('hello world, HW_UART'); // 送到硬體 UART 去 不要打我啦
發表於: 2005/3/17 11:59
|
|||
|
Re: 軟體UART
|
||||
---|---|---|---|---|
新會員
|
呼~~~跑不出來..
可以幫我看一下source嗎.?. 簡化成只用sw_uart來丟TX...定義RB4為TX Pin........ OSC = 4MHz , Baud = 9600.... #include <p18cxxx.h> #include <sw_uart.h> void main(void) { char data='a'; OpenUART(); while( 1 ){WriteUART(data);} } 根據spec另外我提供了delay subroutine如下: #define Nop() {_asm nop _endasm} int i; void DelayRXHalfBitUART(void) { for(i=0;i<0X5C;i++) Nop();} void DelayRXBitUART(void) { for(i=0;i<0X5A;i++) Nop();} void DelayTXBitUART(void) { for(i=0;i<0X5C;i++) Nop();} 結果他連叫都不叫一聲出來./_\.... 麻煩提供點方向就好.....
發表於: 2005/3/17 10:41
|
|||
|
Re: 軟體UART
|
||||
---|---|---|---|---|
高級會員
|
當使用SW USART時 , 請注意函數所使用的腳位是否連接正 , 在資料的傳送及收接的時侯 , 軟體是以DELAY的時間來POLLING資料的的收發 , 所以要求使用者依照各自使用的振盪時脈 , 提供函數正的延遲時間 , 所以你需要自行宣告這三個延遲副程式 , 將自己的OSC頻率及USART的鮑率套用所提供的公式 , 可以利用FOR廻圈達到延遲的要求 ,
EX , OSC = 4MHz , Baud = 9600 ((((2*4M)/(4*9600))+1)/2)-12 = (((8000000/38400)+1)/2)-12 = 92.66... cycle , 換言之 , 寫出一個延遲92或93個指令週期的廻圈給USART TX的函數用
發表於: 2005/3/16 13:48
|
|||
|
軟體UART
|
||||
---|---|---|---|---|
新會員
|
請問有人有使用過C18裡面所提供的軟體UART嗎.?.SW_UART
使用I/O pin來做RS-232傳輸.而不使用TxRx... 試了一天.......試不太出來/_\ Spec裡面有提到該提供的Delay DelayTXBitUART Delay for: ((((2*FOSC) / (4*baud)) + 1) / 2) - 12 cycles DelayRXHalfBitUART Delay for: ((((2*FOSC) / (8*baud)) + 1) / 2) - 9 cycles DelayRXBitUART Delay for: ((((2*FOSC) / (4*baud)) + 1) / 2) - 14 cycles 這邊看不大懂. 有人可以指點迷津嗎.?....
發表於: 2005/3/16 12:02
|
|||
|