c51串口通讯(下位机通讯)

本文介绍了一款基于DB1(PCB1)硬件的下位机程序设计,实现了7路开关控制及全局开关功能。程序使用了串口通信,波特率为4800,通过接收数据头码和控制序号进行操作。详细阐述了硬件接口定义、延时函数、串口初始化及主函数流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

###下位机程序

/*********************************************************************************************
硬件支持:	DB1(PCB1)   
修改日志:  
 完成开发,7路开关控制+全局开关
 加入5到11路的扩展项目								
/*********************************************************************************************
说明:
请使用DBC软件进行控制。
DB1端串口波特率4800,每次接收2个字节的数据(数据头码+控制项目序号)

/*********************************************************************************************/
#include <reg52.h>	//头文件
#define HEAD 0x00//数据头码
sbit J1 = P0 ^ 0;//控制器接口定义 
sbit J2 = P0 ^ 1;// 
sbit J3 = P0 ^ 2;// 
sbit J4 = P0 ^ 3;//
sbit J5 = P0 ^ 4;//
sbit J6 = P0 ^ 5;// 
sbit J7 = P0 ^ 6;// 
sbit J8 = P0 ^ 7;// 
sbit LED_RUN = P1^4;
sbit LED_ERROR = P3^3;
/*sbit J9 = P1 ^ 7;// 
sbit J10 = P1 ^ 7;// 
sbit J11 = P1 ^ 7;// 
/*********************************************************************************************/
void DELAY_MS (unsigned int a){//毫秒级延时
	unsigned int i;
	while( a-- != 0){
		for(i = 0; i < 600; i++);
	}
}
/*********************************************************************************************/
void UART_init (void){//UART串口初始化函数
	TMOD = 0x20;	//定时器T/C1工作方式2,定时器自动重载8位计数器
	SCON = 0x50;	//串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
	TH1 = 0xFD;	//定时器初值高8位设置()
	TL1 = 0xFD;	//定时器初值低8位设置
	PCON = 0x80;	//波特率倍频
	TR1 = 1;	//定时器启动    
}
/**********************************************************************************************/
void main (void){
	unsigned char UART_data1,UART_data2; //定义串口接收数据变量
	unsigned int s; //
	LED_RUN = 0; //运行灯
	DELAY_MS(1000);//延时防止下载时死机
	UART_init();//串口初始化(查寻)
	while(1)
	{
		if (RI == 1)
		{		//接收中断标志位为1时//接受数据头码
			UART_data1 = SBUF;	//接收数据 SBUF 为单片机的接收发送缓冲寄存器
			RI = 0;			//令接收中断标志位为0(软件清零)
			s=0;
			while (s<2000 && UART_data1==HEAD)
			{
				//判断头码是否正确,等待时间过长时跳出。
				s++;
				if (RI == 1)
				{//开始接受控制数据
					UART_data2 = SBUF;//
					RI = 0;
					switch (UART_data2)
					{
						case 0x01:J1=0;break;//第1路开
						case 0x81:J1=1;break;//第1路关
						case 0x02:J2=0;break;
						case 0x82:J2=1;break;
						case 0x03:J3=0;break;
						case 0x83:J3=1;break;
						case 0x04:J4=0;break;
						case 0x84:J4=1;break;
						case 0x05:J5=0;break;
						case 0x85:J5=1;break;
						case 0x06:J6=0;break;
						case 0x86:J6=1;break;
						case 0x07:J7=0;break;
						case 0x87:J7=1;break;
						case 0x08:J8=0;break;
						case 0x88:J8=1;break;
						/*case 0x09:J9=0;break;
						case 0x89:J9=1;break;
						case 0x0A:J10=0;break;
						case 0x8A:J10=1;break;
						case 0x0B:J11=0;break;
						case 0x8B:J11=1;break;*/
						case 0x0C:J1=0;J2=0;J3=0;J4=0;J5=0;J6=0;J7=0;/*J8=0;J9=0;J10=0;J11=0;*/break;//全局开关
						case 0x8C:J1=1;J2=1;J3=1;J4=1;J5=1;J6=1;J7=1;/*J8=1;J9=1;J10=1;J11=1;*/break;
						default://冗余语句
							break;
					}
				}
			}
		}
	}
}


常用波特率 Fosc(MHZ) SMOD TH1初值
19200 11.0592 1 FDH
9600 11.0592 0 FDH
4800 11.0592 0 FAH
2400 11.0592 0 F4H
1200 11.0592 0 E8H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手搓人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值