📄 main.c
字号:
#include "main.h"
#include <msp430x13x.h>
#include "rc531.h"
#include "globe.h"
/*
/****************************************************************
* 函数名:usart0_rx
* 功能说明:串口0 收中断服务程序
* 入口参数:N/A
* 出口参数:RS_RECVSTATUS
/****************************************************************
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
char comm_buff;
//power_down();
comm_buff = RXBUF0;
switch (RS_RECVSTATUS) //当前通信状态
{
case 0: //空闲状态
if (comm_buff == STX) //没有DLE照常命令操作
{
RS_RecvPoint = 0; //接收指针清零
RS_RECVSTATUS = 1;
Timer0_Count = 0; //定时器0计数器
}
break;
case 1: //Point=1;数据交换包序号
Uart_buffer.PRO_RecvBuf[RS_RecvPoint++] = comm_buff;
//P1OUT = 0x08;
//delay(5);
//P1OUT = 0;
RS_RECVSTATUS = 2;
break;
case 2: //Point=2;通信命令字
Uart_buffer.PRO_RecvBuf[RS_RecvPoint++] = comm_buff;
RS_RECVSTATUS = 3;
break;
case 3: //Point=3;帧数据长度
Uart_buffer.PRO_RecvBuf[RS_RecvPoint++] = comm_buff;
RS_RecvLen = comm_buff; //数据长度字节
RS_RecvLen++; //长度+1包括BCC校验字
RS_RECVSTATUS = 4;
break;
case 4: //Point=4 TO 4+LEN;帧数据容
Uart_buffer.PRO_RecvBuf[RS_RecvPoint++] = comm_buff;
RS_RecvLen--;
if (RS_RecvLen == 0) //数据内容是否已到指定长度
{
RS_RECVSTATUS = 5;
}
break;
case 5: //帧尾ETX字符
if (comm_buff == ETX)
{
RS_RECVSTATUS = 6;
__low_power_mode_off_on_exit();
}
else
{
RS_RecvPoint = 0;
RS_RECVSTATUS = 0;
}
break;
default:
RS_RecvPoint = 0;
RS_RECVSTATUS = 0;
break;
}
}
/****************************************************************
* 函数名:usart0_tx
* 功能说明:串口0发送中断服务程序
* 入口参数:N/A
* 出口参数:RS_RECVSTATUS
/****************************************************************
#pragma vector=UART0TX_VECTOR
__interrupt void uart0_tx(void)
{
if (RS_SENDSTATUS != 0) //发送数据
{
if(RS_SendPoint < RS_SendLen)
{
TXBUF0 = Uart_buffer.PRO_SendBuf[RS_SendPoint++];
}
else
{
RS_SENDSTATUS = 0;
// P1OUT = 0x04;
// delay(5);
// P1OUT =0;
//ClrLED1();
}
}
}
*/
/****************************************************************
* 函数名:Intial_Mcu
* 功能说明:MCU初始化程序
* 入口参数:N/A
* 出口参数:
****************************************************************/
void Intial_Mcu(void)
{
char i;
char * Flash_ptr;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
/*
//osc set
BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?
BCSCTL2 |= SELM_3; // MCLK = LFXT1 (safe)
//time set
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 0x1000;
TACTL = TASSEL_2+ MC_1; // SMCLK, contmode
//uart set
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
ME2 |= UTXE0 + URXE0; // Enabled USART0 TXD/RXD
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 =0xe8; // 7.37Mhz/9600 - 372
UBR10 =0x02; //
UMCTL0 = 0x00; // no modulation
UCTL0 &= ~SWRST; // Initalize USART state machine
IE2 |= URXIE0+UTXIE0; // Enabled USART0 RX interrupt
//变量定义
//Led_Delay_Flag=0;
Power_Status=1;
Flash_ptr=(char *)0x1080;
Trigger_Mode=Read_flash(Flash_ptr++);
Trigger_Time=Read_flash(Flash_ptr++);
Module_ID=Read_flash(Flash_ptr++);
Uart_Baud=Read_flash(Flash_ptr++);
Encrypt_Mode=Read_flash(Flash_ptr++);//zhouping
Change_Baud(Uart_Baud);
*/
}
int main( void )
{ char i,tip;
char data_snd[16],data_rev[16];
for(i=0;i<16;i++)
{ data_rev[i]=0x88;
}
Intial_Mcu();
rc531_init();
/* while(1)
{
while(1)
{
_NOP();
if(Request(REQA)==0);
break;
}
if(AntiColl()==0)
{
if(Select_Card()==0);
{
tip=MIF_private(2);
break;
}
}
}
*/
while(1)
{
while(1)
{
_NOP();
//tip=Request(REQA);
if(Request(REQA)==0)
break;
_NOP();
}
w=0;
i=AntiColl();
_NOP();
if(i==0)
{
tip=MIF_Halt();
_NOP();
}
}
_NOP();
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -