找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3479|回复: 17
收起左侧

很奇怪的问题,郁闷几天了

  [复制链接]
ID:83197 发表于 2015-6-21 17:36 | 显示全部楼层 |阅读模式
为什么相同的程序,同样的CVAVR和progisp,烧进单片机,运行的效果不一样?
最近刚接触mega128a,在使用由于是小白,遇到一些问题。
目的:发送20~0,21个数字,发完后便停止发送。
问题:单片机一直不停地发送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; //接收中断和发送中断允许
UCSR0C=0x06; //写UCSRC寄存器,异步通信无校验,8位数据1位停止位
UBRR0H=baud_h; //写波特率的值
UBRR0L=baud_l;
#asm("sei")
while (1)
{
if(tx_count >= 0)
USART0_Transmit();
}
}


回复

使用道具 举报

ID:81808 发表于 2015-6-22 08:54 来自手机 | 显示全部楼层
interrupt里加大delay,大忌啊。把这样会很容易引发中断优先级仲裁,结果很难预期的

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:83197 发表于 2015-6-22 13:28 | 显示全部楼层
yanjibao 发表于 2015-6-22 08:54
interrupt里加大delay,大忌啊。把这样会很容易引发中断优先级仲裁,结果很难预期的

我在这边把delay改到while里面去了,还是不行,主要是同样的程序,软件,老师的电脑烧进去是对的,我的编译一次再烧就错了
回复

使用道具 举报

ID:81808 发表于 2015-6-22 14:46 来自手机 | 显示全部楼层
堂吉诃德 发表于 2015-6-22 13:28
我在这边把delay改到while里面去了,还是不行,主要是同样的程序,软件,老师的电脑烧进去是对的,我的编 ...

编译的时候有没有什么错误提示?出错了运行肯定不正常。不同的编译器结果可能有差异。你编译错误的环境还是放弃吧,按老师的配置一次。

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:83197 发表于 2015-6-22 15:05 | 显示全部楼层
yanjibao 发表于 2015-6-22 14:46
编译的时候有没有什么错误提示?出错了运行肯定不正常。不同的编译器结果可能有差异。你编译错误的环境还 ...

编译的时候没问题。编译器和烧写软件都一样,安装的步骤也是一样的
回复

使用道具 举报

ID:83626 发表于 2015-6-22 15:51 | 显示全部楼层
程序改下吧,中断里尽量不要放延时

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:83634 发表于 2015-6-22 18:37 | 显示全部楼层
中断里尽量不要放延时

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:83197 发表于 2015-6-22 20:33 | 显示全部楼层
chhome 发表于 2015-6-22 18:37
中断里尽量不要放延时

已改,还是一样
回复

使用道具 举报

ID:83197 发表于 2015-6-22 20:33 | 显示全部楼层
slaoliu 发表于 2015-6-22 15:51
程序改下吧,中断里尽量不要放延时

改了,还是那个样
回复

使用道具 举报

ID:83829 发表于 2015-6-24 21:22 | 显示全部楼层
修改程序要紧

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:83877 发表于 2015-6-25 11:06 | 显示全部楼层
看下中断怎么写的

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:84002 发表于 2015-6-26 17:45 | 显示全部楼层
好像是挺牛的东西啊,学习学习
回复

使用道具 举报

ID:83349 发表于 2015-6-27 13:00 | 显示全部楼层
interrupt里加大delay,大忌啊。把这样会很容易引发中断优先级仲裁,结果很难预期的
回复

使用道具 举报

ID:84070 发表于 2015-6-27 15:00 | 显示全部楼层
看不懂
回复

使用道具 举报

ID:82588 发表于 2015-6-29 19:30 | 显示全部楼层
设置编译器的芯片类型了吗?

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:84652 发表于 2015-7-3 23:45 | 显示全部楼层
一步一步排查。把老师那编译好的hex程序拷过来烧进去试试行不行,要是没问题就看编译设置,仔细对一下没问题了就看程序,先把定时器屏蔽了,让变量tx_count在while里发送前自减看行不行。这样就排除了定时器出问题的可能……要是还不行那可能是波特率出问题了……(不过都发过来20了,不应该是波特率的问题……)慢慢的一步一步来排查问题,莫名其妙的出错是经常的,耐心点,这东西不能着急。希望你可以成功。

评分

参与人数 1威望 +50 黑币 +50 收起 理由
admin + 50 + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:83197 发表于 2015-9-11 16:44 | 显示全部楼层
很感谢大家能照顾菜鸟。问题虽然早已解决,但必须最后解释清楚是烧写软件设置有问题,不能勾选兼容模式。程序没问题,望下一个遇到此问题的人可以借鉴此程序,以及定位问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表