普中单片机 串口 接收数据 控制灯亮灭
简介
1.硬件部分
普中单片机开发板 USB To TTL
2.软件部分
keil软件 串口调试助手
硬件部分
普中单片机开发板
一般的开发板即可
软件部分
/*-----------------------------------------------------------------------------
* 实 验 名 : 串口试验
* 实验说明 : 普中单片机串口接收数据控制灯亮灭
* 连接方式 :
* 注 意 : 该试验使用的晶振是12MHZ
*******************************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define jingzhen 12000000UL /*使用12.0M晶体*/
#define botelv 4800UL /*波特率定义为4800*/
uchar PuZh[] = "广州汇承信息科技有限公司www.hc01.com";
//--定义使用的IO--//
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
//--声明全局函数--//
void UsartConfiguration();
void Delay_1ms(uint i);
void DELAY_nMS(unsigned int time);
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无 * 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
uchar i;
uchar receive_data;
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
RI = 0;
receive_data = SBUF;//接收到的数据
if(receive_data == '1')
{
LED1= 0;
DELAY_nMS(500);
LED2= 0;
DELAY_nMS(500);
LED3= 1;
DELAY_nMS(500);
}
else
{
LED1 = 1;
DELAY_nMS(500);
LED2 = 1;
DELAY_nMS(500);
LED3 = 0;
DELAY_nMS(500);
}
}
for(i=0; i<36; i++)
{
SBUF = PuZh[i]; //将要发送的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
Delay_1ms(1);
}
EA = 1;
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
UsartConfiguration();//初始化串口
while(1);
}
/*******************************************************************************
* 函 数 名 : UsartConfiguration()
* 函数功能 : 设置串口
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void UsartConfiguration(void) //串口初始化
{
EA=0; //暂时关闭中断
TMOD&=0x0F; //定时器1模式控制在高4位
TMOD|=0x20; //定时器1工作在模式2,自动重装模式
SCON=0x50; //串口工作在模式1
TH1=256-jingzhen/(botelv*12*16); //计算定时器重装值
TL1=256-jingzhen/(botelv*12*16);
PCON|=0x80; //串口波特率加倍
ES=1; //串行中断允许
TR1=1; //启动定时器1
REN=1; //允许接收
EA=1; //允许中断
}
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms
* x * 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void DELAY_nMS(unsigned int time)
{
unsigned int i,j;
for(i=0;i<time;i++)
for(j=0;j<939;j++);
}
参考资料
1.普中开源电子发现网站http://prechin.net/
2.普中单片机开发板资料网站http://www.prechin.net/forum.php?mod=viewthread&tid=35264&page=1&extra=#pid44329
3.51黑电子论坛http://www.51hei.com/bbs/