|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
究竟是AVR的問題還是GCC的問題?或者是我的問題? |
| 作者:fen_mo 欄目:單片機(jī) |
各位DX,小弟我遇到一個(gè)新的問題,百思不得其解。 還望各位給予慷慨相助。先謝謝了啊 按照本人的想法,一直從串口送出以下數(shù)據(jù)從00到FF。 程序見后面。可是這Y運(yùn)行后的結(jié)果卻是這樣: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA 7B FC FD FE FF 瞧,中間的部分都不見了?!郁悶啊 unsigned CHAR pp; void main(void) { wdt_disable(); CPU_INIT(); while(1) { for(pp=0;pp<0xff;pp++) { put_CHAR_to_uart(pp); } } } void put_CHAR_to_uart(unsigned CHAR xDATA) { cli(); loop_until_bit_is_set(UCSRA,UDRE); UDR =xDATA; } |
| 2樓: | >>參與討論 |
| 作者: winsu 于 2005/8/30 23:02:00 發(fā)布:
可參看芯片DataSheet,照搬其例程序即可。 |
|
| 3樓: | >>參與討論 |
| 作者: zsmbj 于 2005/8/31 12:52:00 發(fā)布:
是不是計(jì)算機(jī)uart接收軟件的問題,是串口調(diào)試助手嗎? 1、把pp改為從0x40開始看看 2、為什么FA后邊是7B啊? |
|
| 4樓: | >>參與討論 |
| 作者: fen_mo 于 2005/9/1 0:14:00 發(fā)布:
是的 用的是串口調(diào)試助手 |
|
| 5樓: | >>參與討論 |
| 作者: fen_mo 于 2005/9/1 0:25:00 發(fā)布:
改成0X40開始后成了這樣 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE FF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F |
|
| 6樓: | >>參與討論 |
| 作者: zsmbj 于 2005/9/1 9:05:00 發(fā)布:
應(yīng)該是波特率的問題,你用的什么波特率。 內(nèi)部晶振還是外部晶振。電壓多少V?還有把那個(gè)初始化函數(shù)貼上來看看。 |
|
| 7樓: | >>參與討論 |
| 作者: fen_mo 于 2005/9/9 23:45:00 發(fā)布:
老大 參考datasheet也不行啊 |
|
| 8樓: | >>參與討論 |
| 作者: fen_mo 于 2005/9/16 21:26:00 發(fā)布:
對(duì)AVR和GCC都快失去信心了! 初始化設(shè)置程序如下: void CPU_INIT(void) { TCCR1A =0x00; TCCR1B =0x02; TCNT1 =0xD8F0; TIMSK =0X00; //----------RS232 SETUP---------- UBRRL =0x67; UBRRH =0x00; UCSRC =0x86; UCSRB =0x98; UCSRA =0x02; //設(shè)置倍速 //---------SPI SETUP--------- SPCR =0x41; //SPI使能并設(shè)置其時(shí)鐘為晶體時(shí)鐘的1/16.注意沒有開啟SPI中斷功能 SPSR |=0x01; //設(shè)置SPI速度加倍 DDRB =0xEF; //PB4為MISO,設(shè)置為輸入 PORTB =0xFF; //此時(shí)端口輸出1電平 //------外部中斷設(shè)置--- MCUCR =0x02; GICR =0x40; //外部中斷0使能 //------端口設(shè)置------- DDRC =0xFF; PORTC =0xFF; DDRD =0xFA; PORTD =0xFF; } put_char_to_uart程序完全照搬stdio.h文中的定義方式,結(jié)果還是這樣。實(shí)在是沒有招了 看來呀8位機(jī)還是51好用啊 要想快點(diǎn)就用430或者ARM算了 反正這玩意兒也不會(huì)貴多少。 簡直忍受不了啦!!有沒有人救一把啊 要不我可就真放棄AVR和GCC了啊 |
|
| 9樓: | >>參與討論 |
| 作者: ipman 于 2005/9/16 22:03:00 發(fā)布:
外部晶振就好了 |
|
| 10樓: | >>參與討論 |
| 作者: hotpower 于 2005/9/16 22:26:00 發(fā)布:
改成for(unsigned int pp=0;pp<0x100;pp++)試試 |
|
| 11樓: | >>參與討論 |
| 作者: zhermit 于 2005/9/16 22:59:00 發(fā)布:
:) 那絕對(duì)不是avr和gcc的錯(cuò),我串口2K多數(shù)據(jù)連續(xù)發(fā)過,可沒丟或者錯(cuò)一個(gè). 檢查你的熔絲位設(shè)置,avr默認(rèn)可是1M內(nèi)部. 另外,你選擇了倍速,PC做相應(yīng)設(shè)置了? 祝 好運(yùn) * - 本貼最后修改時(shí)間:2005-9-16 23:01:06 修改者:zhermit |
|
| 12樓: | >>參與討論 |
| 作者: gbchang 于 2005/9/17 0:43:00 發(fā)布:
AVR中單周期指令比430多的多,我從430又改回用AVR了. |
|
| 13樓: | >>參與討論 |
| 作者: zsmbj 于 2005/9/17 8:35:00 發(fā)布:
應(yīng)該是波特率的問題,你用的什么波特率? 問了半天,只貼了一個(gè)代碼,還是有許多情況不知道啊,如何幫你。 哪個(gè)CPU,M8?內(nèi)部晶振還是外部晶振?電壓多少V?這些都是很重要的。 問題提的也有問題:“究竟是AVR的問題還是GCC的問題?或者是我的問題?” 告訴你,肯定是你問題。 采用外部晶振看看。 |
|
| 14樓: | >>參與討論 |
| 作者: fen_mo 于 2005/9/17 18:26:00 發(fā)布:
熔絲位設(shè)置的是內(nèi)部8M。波特率是按照數(shù)據(jù)手冊進(jìn)行設(shè)置的 熔絲位設(shè)置的是內(nèi)部RC、8M。波特率是按照數(shù)據(jù)手冊進(jìn)行設(shè)置的。在9600時(shí)設(shè)置值為103(即0X67)。請(qǐng)問在PC上還應(yīng)該有什么設(shè)置? |
|
| 15樓: | >>參與討論 |
| 作者: zsmbj 于 2005/9/17 18:42:00 發(fā)布:
呵呵,改為外部晶振吧! 電壓是5V嗎? 程序和設(shè)置都沒有問題。 |
|
| 16樓: | >>參與討論 |
| 作者: HotPower 于 2005/9/17 19:18:00 發(fā)布:
郁悶...樓主一直不回答正題---晶振是內(nèi)還是外??? |
|
| 17樓: | >>參與討論 |
| 作者: 一甲 于 2005/9/21 23:19:00 發(fā)布:
肯定不是GCC和AVR的問題,是自己的問題 我個(gè)人覺得做我們這一行的,先不要去懷疑芯片或開發(fā)軟件、硬件,先要檢討的是自己! * - 本貼最后修改時(shí)間:2005-9-21 23:21:39 修改者:一甲 |
|
| 18樓: | >>參與討論 |
| 作者: javie 于 2005/9/22 9:40:00 發(fā)布:
支持一甲的說法 不過應(yīng)該是內(nèi)部晶振的問題 做AVR的USART出問題99.9999%是這個(gè)問題 |
|
| 19樓: | >>參與討論 |
| 作者: suspension 于 2005/9/22 9:59:00 發(fā)布:
應(yīng)該是你硬件的問題! 內(nèi)部8M,你仔細(xì)查看Datasheet,上面寫的很清楚,USART傳輸時(shí),會(huì)有誤差。 你要把教正系數(shù)寫入OSCCAL寄存器里,自重新試一試,如果還是不可以,你要考慮用外部晶振了! 不要懷疑AVR MCU,你要耐心些,AVR的MCU真的很不錯(cuò)的。只是你自己有點(diǎn)著急。。 |
|
| 20樓: | >>參與討論 |
| 作者: fen_mo 于 2005/10/19 13:44:00 發(fā)布:
老大 你說的是有道理 可視我用匯編都是正確的呀 |
|
| 21樓: | >>參與討論 |
| 作者: fen_mo 于 2005/10/19 13:46:00 發(fā)布:
忙其他事去了 不好意思 用的是內(nèi)部的 |
|
| 22樓: | >>參與討論 |
| 作者: kanprin 于 2005/10/19 16:09:00 發(fā)布:
應(yīng)該是你的問題 人家問你很多問題你都沒有回答人家,他們也愛莫能助吧? 用內(nèi)部RC作波特率的發(fā)生器不穩(wěn)定,最好用外部的。 而下面的設(shè)置: //----------RS232 SETUP---------- UBRRL =0x67; ~~~~~~~~~~~~~~~ UBRRH =0x00; ~~~~~~~~~~~~~~~ UCSRC =0x86; UCSRB =0x98; UCSRA =0x02; //設(shè)置倍速 好像要先操作高位, 后操作低位吧 ? 以前碰到過類似的操作,先操作低位好像就不行了。 后來看了DATASHEET 才知道所有的16位寄存器都要先操作高位后操作低位。 |
|
| 23樓: | >>參與討論 |
| 作者: ipman 于 2005/10/19 17:36:00 發(fā)布:
uart發(fā)送大量數(shù)據(jù)不建議內(nèi)部rc,會(huì)出錯(cuò) 發(fā)送少量數(shù)據(jù)看不出來問題,當(dāng)然你要仔細(xì)校正好。 |
|
| 24樓: | >>參與討論 |
| 作者: sflfw 于 2005/10/19 19:36:00 發(fā)布:
建議 先做過定時(shí)器 例如1秒,檢測晶振速度,如果師默認(rèn)的話一般是1MHZ(8MHZ 8分頻)。 我也是剛學(xué)AVR的,自己做的板子,出問題起來還麻煩些。慢慢來吧! * - 本貼最后修改時(shí)間:2005-10-19 19:39:34 修改者:sflfw |
|
| 25樓: | >>參與討論 |
| 作者: xiaoerge 于 2005/10/30 9:37:00 發(fā)布:
看一下GCC編譯出來的匯編文件,比較一下,也許就知道了 |
|
| 26樓: | >>參與討論 |
| 作者: xinjie1023 于 2005/12/4 15:48:00 發(fā)布:
最好是用外部晶振 外部晶振應(yīng)該可以的,雙龍網(wǎng)站上有串口的代碼,你可以再試一下 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |