📄 main.c
字号:
#include <REG51.H>
#define F_CPU 11059200 //11.0592Mhz
#define UART_BAND_RATE 9600 // 9600 band
typedef unsigned char uint8_t;
//typedef signed char int8_t;
typedef unsigned int uint16_t;
//typedef signed int int16_t;
typedef unsigned long uint32_t;
//typedef signed long int32_t;
//接收数据
uint8_t receive_start,receive_number=0,bus_changed;
uint8_t receive_data[100];
uint8_t *uart_data_ptr;
uint8_t uart_counter;
void sei(void)
{
EA = 1;
}
/*
void cli(void)
{
EA = 0;
}
*/
void uart_init(void)
/* initialize uart */
{
// TH1 = 256-((F_CPU*(SMOD+1))/(384*UART_BAND_RATE));//mode 1 baud (SMOD=0 OR 1)
SCON = 0x50; // mode 1: 8-bit UART, enable receiver
TMOD |= 0x20; // timer 1 mode 2: 8-Bit reload
PCON |= 0x80; //SMOD=1,baud*2
TH1 = 0xfA; // 11.0592M,value 9600 baud
TR1 = 1; // timer 1 run
ES = 1; // UART INTERRUPT open
}
void delay(uint8_t delay_time)
{
uint8_t i,j,k;
for(i=0;i<255;i++)
{
for(j=0;j<200;j++)
{
for(k=0;k<delay_time;k++)
;
}
}
}
void uart_isr(void) interrupt 4
{
if (TI)
{ // 输出中断
TI = 0;
uart_data_ptr++;
if (--uart_counter)
{
SBUF = *uart_data_ptr;
}
}
if (RI)
{//接收中断
uint8_t receive;
RI = 0;
receive = SBUF;
/* /////////////////////// 接收协议:开始,长度receive_data[1],没结束
if ((receive==0xAA)&&(receive_number==0)) receive_start=1;
if (receive_start==1)
{
receive_data[receive_number]=receive;
receive_number++;
}
if(receive_number == (receive_data[1]+2))//receive_data[1]存放有效数据的长度
{
receive_start=receive_number=0;
bus_changed=1;
}
*/
/////////////////////////接收协议:开始,结束,没长度
if ((receive==0xDD)&&(receive_number==0)) receive_start=1;
if (receive_start==1)
{
receive_data[receive_number]=receive;
receive_number++;
}
if ((receive==0xEE)&&(receive_start==1)&&(receive_number>1))
{
receive_start=0;
bus_changed=1;
}
/////////////////////////
}
}
void uart_send(uint8_t *p,uint8_t size)
/* send buffer <buf> to uart */
{
uart_data_ptr = p;
uart_counter=size;
TI = 0;
SBUF = *uart_data_ptr;
}
void execute_cmd(void)
{
if(receive_data[2]==0x01)
{
P1 = 0x01; //p1.0=1;
}
if(receive_data[2]==0x02)
{
P1 = 0x02; //p1.1=1;
}
if(receive_data[2]==0x03)
{
P1 = 0x04; //p1.2=1;
}
if(receive_data[2]==0x04)
{
P1 = 0x08; //p1.3=1;
}
}
int main(void)
{
uart_init();
sei(); //允许中断
for (;;)
{
if(bus_changed == 1)//已接收
// if(receive_number >= 3)
{
execute_cmd(); // 执行命令
uart_send("ok",2);
delay(1);
//接收到数据,发送"ok"
uart_send(receive_data,receive_number);
bus_changed=0;
receive_number=0;
}
// uart_send("yes",3);
delay(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -