搜索
bottom↓
回复: 2

马老师,能否帮忙看一下这段程序里的问题?长.....

[复制链接]

出0入0汤圆

发表于 2012-11-4 21:52:14 | 显示全部楼层 |阅读模式
#include <iom128v.h>
#include <macros.h>
#include <limits.h>
#include "parme.h"

#define uchar unsigned char      //定义无符号字符为 uchar
#define uint  unsigned int       //定义无符号整型
#define ulong unsigned long

uint cord = 53326;;//全局变量

ulong trans()
{
   ulong dtr;

   dtr = (ulong)compute(cord);//

   
   usart0_char_send(dtr>>24);/////通过单片机串口返回计算结果观察
   usart0_char_send(dtr>>16);/////通过单片机串口返回计算结果观察
   usart0_char_send(dtr>>8);/////通过单片机串口返回计算结果观察
   usart0_char_send(dtr);/////通过单片机串口返回计算结果观察
}

ulong compute(uint data)//test
{
ulong result;

result = (ulong)data*(ulong)(data+1);


return(result);

}


void main()
{
  trans();

}


上面的例子的计算结果应当是:53326*53327 = 0xA97FA812
可是串口返回的结果从高位至低位是:0xFF 0xFF 0xA8 0x12
高16位全变成了 “1”

有人跟我说在C51平台下测试程序是没问题的
是不是跟硬件平台有关?

这段程序是在AVR单片机上跑的

开发环境是ICCAVR

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2012-11-4 21:57:14 | 显示全部楼层
单独定义了一个测试数据

ulong dr = 0xA97FA812;

usart0_char_send(dr>>24);/////通过单片机串口返回计算结果观察
   usart0_char_send(dr>>16);/////通过单片机串口返回计算结果观察
   usart0_char_send(dr>>8);/////通过单片机串口返回计算结果观察
   usart0_char_send(dr);/////通过单片机串口返回计算结果观察

输出结果是正确的

出0入0汤圆

 楼主| 发表于 2012-11-4 22:14:10 | 显示全部楼层
完整程序如下,硬件平台是ATmega128,环境是ICCAVR

#include <iom128v.h>
#include <macros.h>
#include <limits.h>

#define uchar unsigned char      //定义无符号字符为 uchar
#define uint  unsigned int       //定义无符号整型
#define ulong unsigned long

uint cord = 53326;;//全局变量

ulong dr = 0xA97FA812;

//****************发送一个字符,查询方式******************************
void usart0_char_send(uchar i)
{
while(!(UCSR0A&(1<<UDRE0)));
UDR0=i;
}



/******************端口初始化*******************************/
void port_init(void)
{
PORTA = (1<<PA7)|(1<<PA6)|(1<<PA5);
DDRA  = 0xE0;
PORTB = 0xFF;
DDRB  = 0xFF;
PORTC = 0xFF;
DDRC  = 0x00;
PORTD = 0xFF;
DDRD  = 0x08;  //设置RXD1和TXD1
PORTE = 0xFF;   
DDRE  = 0x02;  //设置RXD0和TXD0
//PORTF = 0x00;
// DDRF  = 0xE0;  //设置ADRO和ADRI
// PORTF = (1<<PF7)|(1<<PF6)|(1<<PF5);
DDRF  = 0x00;  //设置ADRO和ADRI
PORTF = 0xFF;
PORTG = 0xFF;
DDRG  = 0x00;
}
/******************初始器件**************************************/
void init_devices(void)
{
port_init();
usart0_init();
usart1_init();
}
/*****************串口初始化*********************************/
void usart0_init(void)
{
UCSR0B = 0x00;                     //禁止发送和接收
UCSR0A = 0x02;                     //倍速异步模式USX0=1
UCSR0C = 0x06;                     //0000 0110,8位字符,1位停止位,无校验
UBRR0L = 0x1F;                       //波特率 4800
UBRR0H = 0x01;                     //参见ATMAGE128使用手册
UCSR0B = (1 << TXEN0) | (1 << RXEN0) | (1 << RXCIE0) | (1 << TXCIE0) ; //允许发送和接收,接收和发送结束中断使能(写成UCSR0B = 0xD8也可以 ;)
}
void usart1_init(void)
{
UCSR1B = 0x00;                     //禁止发送和接收
UCSR1A = 0x02;                     //倍速异步模式USX1=1
UCSR1C = 0x06;                     //0000 0110,8位字符,1位停止位,无校验
UBRR1L = 0x17;                     //波特率 9600*6
UBRR1H = 0x00;                     //参见ATMAGE128使用手册
UCSR1B = (1 << TXEN1) | (1 << RXEN1) | (1 << RXCIE1) | (1 << TXCIE1) ;//允许发送和接收,接收和发送结束中断使能(写成UCSR1B = 0xD8也可以 ;)
}

ulong trans()
{
         ulong dtr;

   dtr = (ulong)compute(cord);//
   
   usart0_char_send(dtr>>24);
   usart0_char_send(dtr>>16);
   usart0_char_send(dtr>>8);
   usart0_char_send(dtr);
}

ulong compute(uint data)//test
{
        ulong result;
//        uchar r1,r2,r3,r4;
       
        result = (ulong)data*(ulong)(((ulong)data)+1);
       
//        r1 = result;
//        r2 = (result>>8);
//        r3 = (result>>16);
//        r4 = (result>>24);
       
        return(result);
       
}


void  main()
{

  init_devices();

        trans();

   
}


我觉得是硬件平台的原因,或是编译器的问题


回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 14:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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