⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serial.c

📁 使用了TI的TRF7960和Atmel的52来实现RFID功能(ISO-15693)
💻 C
字号:
#include <reg52.h>
#include <intrins.h>
#include <string.h>
#include "define.h"
#include "var.h"
#include "function.h"

/*****************************************************************
    Func Name: RFID_Init_Timer1
  Description: 对定时器1以及串口进行初始化,
        Input: None
       Output: None
       Return: None
      Caution: None
*****************************************************************/
void RFID_Init_Timer1(void)
{
	TMOD = 0x21;                           /* Initial the timers,timer0 is used for ISO
												and timer1 is used to serial download */
	EA = 1;
	ES = 1;                                /* Open the serial communication gate */
	ET1 = 0;                               /* Choose the timer 1 but not interrupt */
	TH1 = 0XF3;                            /* Initial the timer 1 */
	TL1 = 0XF3;								/* TL1随便赋予什么值 */

	SCON = 0X50;
	PCON = 0X80;						   /* 这里SMOD为1,即波特率为4800 */
    TR1 = 1;                               /* Open the timer 1 */
	//PS = 1;								   /* 设置为高优先级 */
}


/*****************************************************************
    Func Name: RFID_Serial_Trans
  Description: 通过串口将卡片上的数据发送给电脑
        Input: IN uchar *pucData, 要发送的数据
       Output: None
       Return: None
      Caution: 暂时还没有想到什么判断调试的方法,所以返回值待定
*****************************************************************/
void RFID_Serial_Trans(IN uchar *pucData)
{
	uchar ucNum;
	uchar ucIndex;

	ucNum = strlen(pucData);
	ucIndex = 0;
	if(ucNum >= 15)
	{
		return;
	}
	TI = 0;
	for(ucIndex = 0; ucIndex < ucNum; ucIndex++)
	{
		SBUF = *(pucData +ucIndex);
		while(1 != TI)
		{
		}
		TI = 0;
	}
}


void RFID_Serial_TransSingle(IN uchar ucData)
{
	TI = 0;
	
	SBUF = ucData;
	while(1 != TI)
	{
	}
	TI = 0;
}


/*****************************************************************
    Func Name: RFID_Serial_Rev
  Description: 使用串口中断来通过串口接受电脑传送过来的指令,并将指令传出
        Input: None
       Output: None
       Return: None
      Caution: 中断函数不能有参数和返回值
*****************************************************************/
void RFID_Serial_Rev(void) interrupt 4
{
	uchar tmp;
	tmp = 0;

	/* 判断RI是否为1来判断是否接受 */
	if(1 == RI)
	{
		tmp = SBUF;
		RI = 0;//软件清零
		if(1 == bSerialBuf)/* 接收到新的数据 */
		{
			bSerialBuf = 0;
			/* 开始接受新的数据,将原来的数据清空 */
			memset(aucSerialRecvBuf, '\0', sizeof(aucSerialRecvBuf));
		}
		if('\\' == tmp || 14 == ucSerialIndex)/* 定义符号\为接受结尾符 */
		{
			ucSerialIndex = 0;
			bSerialBuf = 1;/* 标识已经接受完 */
		}
		else
		{
			aucSerialRecvBuf[ucSerialIndex++] = tmp;//将电脑传送过来的数据或命令存放在缓存中
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -