|
程序如下
#include "RX8F103.h"
#include "intrins.h"
#include <stdio.h>
#define BSWAP_16(x) \
(uint16_t)((((uint16_t)(x) & 0x00ff) << 8) | \
(((uint16_t)(x) & 0xff00) >> 8) \
)
#define BSWAP_32(x) \
(uint32_t)((((uint32_t)(x) & 0xff000000) >> 24) | \
(((uint32_t)(x) & 0x00ff0000) >> 8) | \
(((uint32_t)(x) & 0x0000ff00) << 8) | \
(((uint32_t)(x) & 0x000000ff) << 24) \
)
//從串口發(fā)送一個(gè)字符
void EUart0_SendOneChar(char c)
{
ES0=0; //發(fā)送數(shù)據(jù)時(shí)關(guān)串口中斷
TI0=0; //清TI位
S0BUF = c; //將待發(fā)送字符放入串口數(shù)據(jù)緩沖寄存器,并開始傳輸。
while(!TI0); //等待傳送結(jié)束。當(dāng)字符發(fā)送結(jié)束后由硬件置位請(qǐng)求中斷,
//此時(shí)while循環(huán)結(jié)束,而串口中斷處理函數(shù)需等到ES重新置1后才可能響應(yīng)。
TI0=0; //軟件清TI位,亦可在中斷處理函數(shù)中清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)
{ long a1=8;
long a2=0x8f;
int a3;
int i = 48;
int* p = &i;
char c = 0;
unsigned char* iKeyP = x;
CLKCON |= 0x1F; //默認(rèn)所有時(shí)鐘打開
RSTPORTEN = 1; //使能復(fù)位功能
UART0PORTEN = 1; //串口端口使能
S0CON = 0x50; //SCON: Mode 1, 8-bit UART, Enable Rcvr
S0RELH = 0x03; //S0RELH + S0RELL 構(gòu)成波特率設(shè)置S0REL[9:0]
S0RELL = 0xF7; //Baud rate = SYSCK/(16×(1024-S0REL)) SYSCK跟CLKDIV寄存器有關(guān) 波特率為115200
ES0 = 1; //允許串口中斷位
// EUart0_SendString("RX8F103 IIC Slave Init! V2.0\r\n");
printf("a1==0x%x\r\n",a1);
a1 = ((a1) << (9));
a2 = (a2)+(128);
a3 = *((short*)(iKeyP + (8)));
a3=BSWAP_16(a3);
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;
}
第一個(gè)問題問題在于這個(gè)語句a1 = ((a1)) << (9);printf("a1==0x%x\r\n",a1);
long型數(shù)據(jù)是四位的,定義a1=8,按照二進(jìn)制就是0000 0000 0000 0000 0000 0000 0000 1000
左移九位就是0000 0000 0000 0000 0001 0000 0000 0000
輸出的數(shù)不應(yīng)該是0x1000么,為什么輸出的是0x0
第二個(gè)問題,是a2 = (a2)+(128);已經(jīng)定義a2=0x8f,進(jìn)行運(yùn)算a2應(yīng)該等于0x10f,但是打印出來是90
以下是打印結(jié)果
Hello RX8F103 UART0
a1==0x0
a2==0x90
a3==0x8f
|
|