- 打卡等级:初来乍到
- 打卡总天数:6
- 最近打卡:2025-10-20 10:11:44
注册会员
- 积分
- 92
|
程序段1
unsigned int A1;
unsigned char B2;
float y=0;
unsigned int AABB;
A1=1000;
B2=32;
y=(float)A1*B2;
y=y/180;
AABB=10*y;
1、芯片出厂序列号 : F854CA3703AEF1 可以计算浮点,AABB计算输出0x06F1;
2、芯片出厂序列号 : F854CA0A04DEF6 不可以计算浮点,,AABB计算输出0x07F1;
开始怀疑是板问题,我把STC对换,不能计算浮点的,依然不能,当A1=3000时候,两个单片机计算结果才一样,
求大神指导,
程序例子,是STC试验箱的串口例子,增加上面的程序段
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCAI.com ---------------------------------------------*/
/* --- BBS: www.STCAIMCU.com -----------------------------------------*/
/* --- QQ: 800003751 -------------------------------------------------*/
/* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò */
/*---------------------------------------------------------------------*/
/************* ¹¦ÄÜ˵Ã÷ **************
±¾Àý³Ì»ùÓÚSTC32GΪÖ÷¿ØÐ¾Æ¬µÄʵÑéÏä½øÐбàд²âÊÔ¡£
ʹÓÃKeil C251±àÒëÆ÷£¬Memory ModelÍÆ¼öÉèÖÃXSmallģʽ£¬Ä¬È϶¨Òå±äÁ¿ÔÚedata£¬µ¥Ê±ÖÓ´æÈ¡·ÃÎÊËٶȿ졣
edata½¨Òé±£Áô1K¸ø¶ÑջʹÓ㬿ռ䲻¹»Ê±¿É½«´óÊý×é¡¢²»³£ÓñäÁ¿¼Óxdata¹Ø¼ü×Ö¶¨Òåµ½xdata¿Õ¼ä¡£
´®¿Ú1ȫ˫¹¤ÖжϷ½Ê½ÊÕ·¢Í¨Ñ¶³ÌÐò¡£
ͨ¹ýPCÏòMCU·¢ËÍÊý¾Ý, MCUÊÕµ½ºóͨ¹ý´®¿Ú1°ÑÊÕµ½µÄÊý¾ÝÔÑù·µ»Ø.
Óö¨Ê±Æ÷×ö²¨ÌØÂÊ·¢ÉúÆ÷£¬½¨ÒéʹÓÃ1Tģʽ(³ý·ÇµÍ²¨ÌØÂÊÓÃ12T)£¬²¢Ñ¡Ôñ¿É±»²¨ÌØÂÊÕû³ýµÄʱÖÓÆµÂÊ£¬ÒÔÌá¸ß¾«¶È¡£
ÏÂÔØÊ±, Ñ¡ÔñʱÖÓ 22.1184MHz (Óû§¿É×ÔÐÐÐÞ¸ÄÆµÂÊ).
******************************************/
#include "STC32G.h"
#include "stdio.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
#define MAIN_Fosc 22118400L //¶¨ÒåÖ÷ʱÖÓ£¨¾«È·¼ÆËã115200²¨ÌØÂÊ£©
//==========================================================================
#define Baudrate1 (65536 - MAIN_Fosc / 115200 / 4)
#define UART1_BUF_LENGTH 128
//==========================================================================
/************* ±¾µØ³£Á¿ÉùÃ÷ **************/
/************* IO¿Ú¶¨Òå **************/
/************* ±¾µØ±äÁ¿ÉùÃ÷ **************/
u8 TX1_Cnt; //·¢ËͼÆÊý
u8 RX1_Cnt; //½ÓÊÕ¼ÆÊý
bit B_TX1_Busy; //·¢ËÍæ±êÖ¾
u8 RX1_Buffer[UART1_BUF_LENGTH]; //½ÓÊÕ»º³å
/************* ±¾µØº¯ÊýÉùÃ÷ **************/
void UART1_config(u8 brt); // Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ.
void PrintString1(u8 *puts);
/**************** Íⲿº¯ÊýÉùÃ÷ºÍÍⲿ±äÁ¿ÉùÃ÷ *****************/
void Delay10ms(void) //@11.0592MHz
{
unsigned char data i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
/******************** Ö÷º¯Êý **************************/
void main(void)
{
unsigned int A1;
unsigned char B2;
float y=0;
unsigned int AABB;
A1=1000;
B2=32;
y=(float)A1*B2;
y=y/180;
AABB=10*y;
WTST = 0; //ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È
/* P0M1 = 0x30; P0M0 = 0x30; //ÉèÖÃP0.4¡¢P0.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀµç×èµ½3.3V)
P1M1 = 0x30; P1M0 = 0x30; //ÉèÖÃP1.4¡¢P1.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀµç×èµ½3.3V)
P2M1 = 0x3c; P2M0 = 0x3c; //ÉèÖÃP2.2~P2.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀµç×èµ½3.3V)
P3M1 = 0x50; P3M0 = 0x50; //ÉèÖÃP3.4¡¢P3.6Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀµç×èµ½3.3V)
P4M1 = 0x3c; P4M0 = 0x3c; //ÉèÖÃP4.2~P4.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀµç×èµ½3.3V)
P5M1 = 0x0c; P5M0 = 0x0c; //ÉèÖÃP5.2¡¢P5.3Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀµç×èµ½3.3V)
P6M1 = 0xff; P6M0 = 0xff; //ÉèÖÃΪ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀµç×èµ½3.3V)
P7M1 = 0x00; P7M0 = 0x00; //ÉèÖÃΪ׼˫Ïò¿Ú
*/
UART1_config(2); // Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ.
EA = 1; //ÔÊÐíÈ«¾ÖÖжÏ
// PrintString1("STC32G UART1 Test Programme!\r\n"); //UART1·¢ËÍÒ»¸ö×Ö·û´®
SBUF=AABB/0x100;
Delay10ms();
SBUF=AABB%0x100;
while (1)
{
if((TX1_Cnt != RX1_Cnt) && (!B_TX1_Busy)) //ÊÕµ½Êý¾Ý, ·¢ËÍ¿ÕÏÐ
{
SBUF = RX1_Buffer[TX1_Cnt];
B_TX1_Busy = 1;
if(++TX1_Cnt >= UART1_BUF_LENGTH) TX1_Cnt = 0;
}
}
}
//========================================================================
// º¯Êý: void PrintString1(u8 *puts)
// ÃèÊö: ´®¿Ú1·¢ËÍ×Ö·û´®º¯Êý¡£
// ²ÎÊý: puts: ×Ö·û´®Ö¸Õë.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2014-11-28
// ±¸×¢:
//========================================================================
void PrintString1(u8 *puts)
{
for (; *puts != 0; puts++) //Óöµ½Í£Ö¹·û0½áÊø
{
SBUF = *puts;
B_TX1_Busy = 1;
while(B_TX1_Busy);
}
}
//========================================================================
// º¯Êý: SetTimer2Baudraye(u32 dat)
// ÃèÊö: ÉèÖÃTimer2×ö²¨ÌØÂÊ·¢ÉúÆ÷¡£
// ²ÎÊý: dat: Timer2µÄ֨װֵ.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2014-11-28
// ±¸×¢:
//========================================================================
void SetTimer2Baudraye(u32 dat)
{
T2R = 0; //Timer stop
T2_CT = 0; //Timer2 set As Timer
T2x12 = 1; //Timer2 set as 1T mode
T2H = (u8)(dat / 256);
T2L = (u8)(dat % 256);
ET2 = 0; //½ûÖ¹ÖжÏ
T2R = 1; //Timer run enable
}
//========================================================================
// º¯Êý: void UART1_config(u8 brt)
// ÃèÊö: UART1³õʼ»¯º¯Êý¡£
// ²ÎÊý: brt: Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2014-11-28
// ±¸×¢:
//========================================================================
void UART1_config(u8 brt)
{
/*********** ²¨ÌØÂÊʹÓö¨Ê±Æ÷2 *****************/
if(brt == 2)
{
S1BRT = 1; //S1 BRT Use Timer2;
SetTimer2Baudraye(Baudrate1);
}
/*********** ²¨ÌØÂÊʹÓö¨Ê±Æ÷1 *****************/
else
{
TR1 = 0;
S1BRT = 0; //S1 BRT Use Timer1;
T1_CT = 0; //Timer1 set As Timer
T1x12 = 1; //Timer1 set as 1T mode
TMOD &= ~0x30;//Timer1_16bitAutoReload;
TH1 = (u8)(Baudrate1 / 256);
TL1 = (u8)(Baudrate1 % 256);
ET1 = 0; //½ûÖ¹ÖжÏ
TR1 = 1;
}
/*************************************************/
SCON = (SCON & 0x3f) | 0x40; //UART1ģʽ, 0x00: ͬ²½ÒÆÎ»Êä³ö, 0x40: 8λÊý¾Ý,¿É±ä²¨ÌØÂÊ, 0x80: 9λÊý¾Ý,¹Ì¶¨²¨ÌØÂÊ, 0xc0: 9λÊý¾Ý,¿É±ä²¨ÌØÂÊ
// PS = 1; //¸ßÓÅÏȼ¶ÖжÏ
ES = 1; //ÔÊÐíÖжÏ
REN = 1; //ÔÊÐí½ÓÊÕ
P_SW1 &= 0x3f;
// P_SW1 |= 0x00; //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7, 0xC0: P4.3 P4.4
B_TX1_Busy = 0;
TX1_Cnt = 0;
RX1_Cnt = 0;
}
//========================================================================
// º¯Êý: void UART1_int (void) interrupt UART1_VECTOR
// ÃèÊö: UART1ÖжϺ¯Êý¡£
// ²ÎÊý: nine.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2014-11-28
// ±¸×¢:
//========================================================================
void UART1_int (void) interrupt 4
{
if(RI)
{
RI = 0;
RX1_Buffer[RX1_Cnt] = SBUF;
if(++RX1_Cnt >= UART1_BUF_LENGTH) RX1_Cnt = 0;
}
if(TI)
{
TI = 0;
B_TX1_Busy = 0;
}
}
|
|