uart.h
代码如下:
#ifndef __UART_H__
#define __UART_H__
void UART_Init();
void send ( unsigned char d );
void send_str ( unsigned char *dat );
void send_str_len ( unsigned char *dat, unsigned int len );
#endif
uart.c
代码如下:
#include <STC12C5A.H>
#include "uart.h"
unsigned int count = 0, temp = 0;
void UART_Init() {
EA = 0;
SCON = 0x50;
TMOD = 0x20;
TL1 = 0xfd;
TH1 = 0xfd;
TR1 = 1;
ES = 1;
AUXR &= 0x7F;
TMOD &= 0xF0;
TMOD |= 0x02;
TL0 = 0xA4;
TH0 = 0xA4;
TF0 = 0;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void send ( unsigned char d ) {
/* 串口1发送一个字节的数据,形参d即为待发送数据 */
SBUF = d; /* 将数据写入到串口缓冲 */
while ( !TI ); /* 等待发送完毕 */
}
void send_str ( unsigned char *dat ) {
/* 串口1发送字符串 */
while ( *dat ) {
send ( *dat );
dat++;
}
}
void send_str_len ( unsigned char *dat, unsigned int len ) {
/* 串口1发送指定长度的字符串 */
unsigned char i = 0;
for ( ; i < len; i++ ) {
send ( dat[i] );
}
}
void uart() interrupt 4 {
/* 串口1用来与上位通讯 */
if ( RI ) {
/* 收到数据 */
RI = 0; /* 清中断请求 */
IE2 |= 0x01;
} else if ( TI ) {
/* 发送完一字节数据 */
TI = 0;
}
ES = 1; /* 允许串口中断 */
}
void timer0() interrupt 1 {
if ( count < 20000 ) {
count++;
if ( count >= 20000 ) {
/* 每100次花费1秒 */
count = 0;
}
}
}
mfrc522.h
代码如下:
#ifndef MFC522_H
#define MFC522_H
#include <STC12C5A.H>
/* MFRC522的端口定义 */
sbit MF522_RST = P2 ^ 3; /* RC500片选 */
sbit MF522_SO = P2 ^ 4;
sbit MF522_NSS = P2 ^ 5; /* SDA */
sbit MF522_SCK = P2 ^ 6;
sbit MF522_SI = P2 ^ 7;
char PcdReset ( void );
void PcdAntennaOn ( void );
void PcdAntennaOff ( void );
char PcdRequest ( unsigned char req_code, unsigned char *pTagType );
char PcdAnticoll ( unsigned char *pSnr );
char PcdSelect ( unsigned char *pSnr );
char PcdAuthState ( unsigned char auth_mode, unsigned char addr, unsigned char *pKey, unsigned char *pSnr );
char PcdRead ( unsigned char addr, unsigned char *pData );
char PcdWrite ( unsigned char addr, unsigned char *pData );
char PcdValue ( unsigned char dd_mode, unsigned char addr, unsigned char *pValue );
char PcdBakValue ( unsigned char sourceaddr, unsigned char goaladdr );
char PcdHalt ( void );
char PcdComMF522 ( unsigned char Command, unsigned char *pInData, unsigned char InLenByte,
unsigned char *pOutData, unsigned int *pOutLenBit );
void CalulateCRC ( unsigned char *pIndata, unsigned char len, unsigned char *pOutData );
void WriteRawRC ( unsigned char Address, unsigned char value );
unsigned char ReadRawRC ( unsigned char Address );
void SetBitMask ( unsigned char reg, unsigned char mask );
void ClearBitMask ( unsigned char reg, unsigned char mask );
char M500PcdConfigISOType ( unsigned char type );
void delay_10ms ( unsigned int _10ms );
/* MF522命令字 */
#define PCD_IDLE 0x00 /* 取消当前命令 */
#define PCD_AUTHENT 0x0E /* 验证密钥 */
#define PCD_RECEIVE 0x08 /* 接收数据 */
#define PCD_TRANSMIT 0x04 /* 发送数据 */
#define PCD_TRANSCEIVE 0x0C /* 发送并接收数据 */
#define PCD_RESETPHASE 0x0F /* 复位 */
#define PCD_CALCCRC 0x03 /* CRC计算 */
/* Mifare_One卡片命令字 */
#define PICC_REQIDL 0x26 /* 寻天线区内未进入休眠状态 */
#define PICC_REQALL 0x52 /* 寻天线区内全部卡 */
#define PICC_ANTICOLL1 0x93 /* 防冲撞 */
#define PICC_ANTICOLL2 0x95 /* 防冲撞 */
#define PICC_AUTHENT1A 0x60 /* 验证A密钥 */
#define PICC_AUTHENT1B 0x61 /* 验证B密钥 */
#define PICC_READ 0x30 /* 读块 */
#define PICC_WRITE 0xA0 /* 写块 */
#define PICC_DECREMENT 0xC0 /* 扣款 */
#define PICC_INCREMENT 0xC1 /* 充值 */
#define PICC_RESTORE 0xC2 /* 调块数据到缓冲区 */
#define PICC_TRANSFER 0xB0 /* 保存缓冲区中数据 */
#define PICC_HALT 0x50 /* 休眠 */
#define DEF_FIFO_LENGTH 64 /* MF522的FIFO长度定义 */
/* MF522寄存器定义 */
/* PAGE 0 */
#define RFU00 0x00
#define CommandReg 0x01
#define ComIEnReg 0x02
#define DivlEnReg 0x03
#define ComIrqReg 0x04
#define DivIrqReg 0x05
#define ErrorReg 0x06
#define Status1Reg 0x07