main.c
#include "STC15F2K60S2.h"
#include "uart.h"
#define u8 unsigned char
u8 true_data[]={'A','A','A','S','S','S'};
u8 judge_data(u8 a[],u8 b[])
{
u8 i;
for(i=0;i<6;i++)
{
if(a[i]!=b[i])
{
return 0;
}
}
return 1;
}
void main()
{
P2=0x80;P0=0xff;P2=0;
P2=0xa0;P0=0;P2=0;
UartInit();
while(1)
{
if(rec_index>5)
{
for(rec_index=0;rec_index<6;rec_index++)
{
SendData(rec_table[rec_index]);
}
if(judge_data(rec_table,true_data))
{
P2=0x80;P0=~0x01;P2=0;
}
rec_index=0;
}
}
}
uart.c
#include "uart.h"
bit busy;
unsigned char rec_table[6];
unsigned char rec_index=0;
void UartInit(void) //1200bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0x00; //设定定时初值
TH1 = 0xF7; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES = 1;
EA = 1;
SendString("STC15F2K60S2\r\nUart Test !\r\n");
}
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI = 0; //清除RI位
rec_table[rec_index] = SBUF; //P0显示串口数据
rec_index++;
}
if (TI)
{
TI = 0; //清除TI位
busy = 0; //清忙标志
}
}
/*----------------------------
发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy); //等待前面的数据发送完成
busy = 1;
SBUF = dat; //写数据到UART数据寄存器
}
/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
{
while (*s) //检测字符串结束标志
{
SendData(*s++); //发送当前字符
}
}
uart.h
#ifndef _UART_H_
#define _UART_H_
#include "STC15F2K60S2.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
extern unsigned char rec_table[6];
extern unsigned char rec_index;
void UartInit(void);
void SendData(BYTE dat);
void SendString(char *s);
#endif
蓝桥杯电子类串口部分代码
最新推荐文章于 2024-02-20 16:26:32 发布