新手上路
- 积分
- 31
- 金钱
- 31
- 注册时间
- 2019-7-31
- 在线时间
- 8 小时
|
5金钱
想用RFID做个门禁那样的写命令的时候
程序写的是:unsigned int HZHIDU1[] = {0x0AA,0x55,0X06,0X00,0X00,0X00,0X01,0X06,0X03,0X04};
结果从串口助手收到的是:AA 55 06 80 80 80 81 06 83 04 不知道为什么那几位0都变成8了 蒙了
波特率我看了都是9600
我漏了啥嘛 犯了啥低端错误么。。。???
程序:
#include<reg52.h>
unsigned char ReceiveData[4] = {0};
unsigned char ReceiveData1[4] = {0x39,0x0CC,0x0B5,0x8E};
volatile unsigned char Len = 0;
unsigned int i,j;
unsigned int HZHIDU1[] = {0x0AA,0x55,0X06,0X00,0X00,0X00,0X01,0X06,0X03,0X04};
volatile bit ReceiveEndFlag = 0; //接收完成标志
/*------------------------------------------------
函数声明
------------------------------------------------*/
void SendStr(unsigned char *s);
void SendByte(unsigned int dat);
void XIEML (void);
void delay (void);
/*------------------------------------------------
串口初始化
------------------------------------------------*/
void InitUART (void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: 定时器1, 工作方式2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
// ES = 1; //打开串口中断
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
InitUART();
ES = 1; //打开串口中断
XIEML();
while (1)
{
if (ReceiveEndFlag) //读到卡
{
ReceiveEndFlag = 0;
}
}
}
/*------------------------------------------------
发送一个字节
------------------------------------------------*/
void SendByte(unsigned int dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
/*------------------------------------------------
发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
{
SendByte(*s);
s++;
}
}
/*------------------------------------------------
串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
{
unsigned char Temp; //定义临时变量
if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
Temp=SBUF; //读入缓冲区的值
ReceiveData[Len++] = Temp;
if ( Len>= 4) //卡的4字节UID卡号接收完毕
{
Len = 0;
ReceiveEndFlag = 1;
}
}
if(TI) //如果是发送标志位,清零
TI=0;
}
/*------------------------------------------------
写RFID命令
------------------------------------------------*/
void XIEML (void)
{
for(i=0;i<10;i++)
{ ES=0;
SendByte(HZHIDU1);
delay();
ES=1;
}
}
void delay (void)
{
for(j=0;j<100;j++);
}
|
|