程序如下,用的是51单片机
#include "RX8F103.h"
#include "intrins.h"
#include <stdio.h>
//从串口发送一个字符
void EUart0_SendOneChar(char c)
{
ES0=0; //发送数据时关串口中断
TI0=0; //清TI位
S0BUF = c; //将待发送字符放入串口数据缓冲寄存器,并开始传输。
while(!TI0); //等待传送结束。当字符发送结束后由硬件置位请求中断,
//此时while循环结束,而串口中断处理函数需等到ES重新置1后才可能响应。
TI0=0; //软件清TI位,亦可在中断处理函数中清0
ES0 = 1; //开串口中断
}
void EUart0_SendString(char *st)
{
while(*st)
{
EUart0_SendOneChar(*st++);
}
}
unsigned char x[50] ={0x1e,0x00,0x00,0x00,0xca,0xfb,0x5f,0xf8,0x8f,0x00,0x1a,0x00,0x02,0xcf,0x81,
0xdb,0xff,0xe7,0xc8,0x00,0x20,0x00,0x01,0x5e,0x46,0xf5,0x71,0xd1,0x50,0x00,
0x21,0x00,0x01,0xa9,0xe1,0xfc,0xdf,0xc0,0x85,0x00,0x23,0x00,0x02,0xc8,0x44,
0xd7,0xf5,0xe9,0x47,0x00};
void main(void)
{ int a1=8;
int a2=0x8f;
int a3;
unsigned char* iKeyP = x;
CLKCON |= 0x1F; //默认所有时钟打开
RSTPORTEN = 1; //使能复位功能
UART0PORTEN = 1; //串口端口使能
S0CON = 0x50; //SCON: Mode 1, 8-bit UART, Enable Rcvr
S0RELH = 0x03; //S0RELH + S0RELL 构成波特率设置S0REL[9:0]
S0RELL = 0xF7; //Baud rate = SYSCK/(16×(1024-S0REL)) SYSCK跟CLKDIV寄存器有关 波特率为115200
ES0 = 1; //允许串口中断位
EUart0_SendString("RX8F103 IIC Slave Init! V2.0\r\n");
a1 = ((long)(a1)) << (9);
a2 = (a2)+(128);
a3 = *((short*)(iKeyP + (8)));
while(1)
{
printf("Hello RX8F103 UART0\r\n");
printf("a1==0x%x\r\n",a1);
printf("a2==0x%x\r\n",a2);
printf("a3==0x%x\r\n",a3);
}
}
char putchar (char c)
{
EUart0_SendOneChar(c);
return c;
}
以下位打印的结果
RX8F103 IIC Slave Init! V2.0
Hello RX8F103 UART0
a1==0x1000
a2==0x10f
a3==0x8f00
问题在打印a3,a3不应该是a3=0x8f么,而是a3=0x8f00
|