找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4244|回復: 17
收起左側

很奇怪的問題,郁悶幾天了

  [復制鏈接]
ID:83197 發(fā)表于 2015-6-21 17:36 | 顯示全部樓層 |閱讀模式
為什么相同的程序,同樣的CVAVR和progisp,燒進單片機,運行的效果不一樣?
最近剛接觸mega128a,在使用由于是小白,遇到一些問題。
目的:發(fā)送20~0,21個數(shù)字,發(fā)完后便停止發(fā)送。
問題:單片機一直不停地發(fā)送14(20的16進制表示),看著都累
程序:
#include <mega128.h>
#include <delay.h>
#define UDRE 5
#defineF_CPU 4000000
#define baud 9600 //設置波特率的大小
#define baud_setting (unsigned int)((unsigned long)F_CPU/(16*(unsigned long)baud)-1) //波特率計算公
#define baud_h (unsigned char)(baud_setting>>8) //提取高位
#define baud_l (unsigned char)(baud_setting) //低位


unsigned int tx_count=20;

interrupt [USART0_TXC] void txc0_over(void)
{
delay_ms(1000);
tx_count--;
}


void USART0_Transmit()
{
while(!(UCSR0A & (1 << UDRE)));
UDR0 = tx_count;
}


void main(void)
{
PORTE.6 = 0;
PORTE.7 = 0;
DDRE.6 = 1;
DDRE.7 = 1;
UCSR0A=0x00; //單倍速模式
UCSR0B=0x48; //接收中斷和發(fā)送中斷允許
UCSR0C=0x06; //寫UCSRC寄存器,異步通信無校驗,8位數(shù)據(jù)1位停止位
UBRR0H=baud_h; //寫波特率的值
UBRR0L=baud_l;
#asm("sei")
while (1)
{
if(tx_count >= 0)
USART0_Transmit();
}
}


回復

使用道具 舉報

ID:81808 發(fā)表于 2015-6-22 08:54 來自手機 | 顯示全部樓層
interrupt里加大delay,大忌啊。把這樣會很容易引發(fā)中斷優(yōu)先級仲裁,結果很難預期的

評分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:83197 發(fā)表于 2015-6-22 13:28 | 顯示全部樓層
yanjibao 發(fā)表于 2015-6-22 08:54
interrupt里加大delay,大忌啊。把這樣會很容易引發(fā)中斷優(yōu)先級仲裁,結果很難預期的

我在這邊把delay改到while里面去了,還是不行,主要是同樣的程序,軟件,老師的電腦燒進去是對的,我的編譯一次再燒就錯了
回復

使用道具 舉報

ID:81808 發(fā)表于 2015-6-22 14:46 來自手機 | 顯示全部樓層
堂吉訶德 發(fā)表于 2015-6-22 13:28
我在這邊把delay改到while里面去了,還是不行,主要是同樣的程序,軟件,老師的電腦燒進去是對的,我的編 ...

編譯的時候有沒有什么錯誤提示?出錯了運行肯定不正常。不同的編譯器結果可能有差異。你編譯錯誤的環(huán)境還是放棄吧,按老師的配置一次。

評分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:83197 發(fā)表于 2015-6-22 15:05 | 顯示全部樓層
yanjibao 發(fā)表于 2015-6-22 14:46
編譯的時候有沒有什么錯誤提示?出錯了運行肯定不正常。不同的編譯器結果可能有差異。你編譯錯誤的環(huán)境還 ...

編譯的時候沒問題。編譯器和燒寫軟件都一樣,安裝的步驟也是一樣的
回復

使用道具 舉報

ID:83626 發(fā)表于 2015-6-22 15:51 | 顯示全部樓層
程序改下吧,中斷里盡量不要放延時

評分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:83634 發(fā)表于 2015-6-22 18:37 | 顯示全部樓層
中斷里盡量不要放延時

評分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:83197 發(fā)表于 2015-6-22 20:33 | 顯示全部樓層
chhome 發(fā)表于 2015-6-22 18:37
中斷里盡量不要放延時

已改,還是一樣
回復

使用道具 舉報

ID:83197 發(fā)表于 2015-6-22 20:33 | 顯示全部樓層
slaoliu 發(fā)表于 2015-6-22 15:51
程序改下吧,中斷里盡量不要放延時

改了,還是那個樣
回復

使用道具 舉報

ID:83829 發(fā)表于 2015-6-24 21:22 | 顯示全部樓層
修改程序要緊

評分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:83877 發(fā)表于 2015-6-25 11:06 | 顯示全部樓層
看下中斷怎么寫的

評分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:84002 發(fā)表于 2015-6-26 17:45 | 顯示全部樓層
好像是挺牛的東西啊,學習學習
回復

使用道具 舉報

ID:83349 發(fā)表于 2015-6-27 13:00 | 顯示全部樓層
interrupt里加大delay,大忌啊。把這樣會很容易引發(fā)中斷優(yōu)先級仲裁,結果很難預期的
回復

使用道具 舉報

ID:84070 發(fā)表于 2015-6-27 15:00 | 顯示全部樓層
看不懂
回復

使用道具 舉報

ID:82588 發(fā)表于 2015-6-29 19:30 | 顯示全部樓層
設置編譯器的芯片類型了嗎?

評分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:84652 發(fā)表于 2015-7-3 23:45 | 顯示全部樓層
一步一步排查。把老師那編譯好的hex程序拷過來燒進去試試行不行,要是沒問題就看編譯設置,仔細對一下沒問題了就看程序,先把定時器屏蔽了,讓變量tx_count在while里發(fā)送前自減看行不行。這樣就排除了定時器出問題的可能……要是還不行那可能是波特率出問題了……(不過都發(fā)過來20了,不應該是波特率的問題……)慢慢的一步一步來排查問題,莫名其妙的出錯是經常的,耐心點,這東西不能著急。希望你可以成功。

評分

參與人數(shù) 1威望 +50 黑幣 +50 收起 理由
admin + 50 + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:83197 發(fā)表于 2015-9-11 16:44 | 顯示全部樓層
很感謝大家能照顧菜鳥。問題雖然早已解決,但必須最后解釋清楚是燒寫軟件設置有問題,不能勾選兼容模式。程序沒問題,望下一個遇到此問題的人可以借鑒此程序,以及定位問題。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表