第十二讲 串口模块

一、理论部分

串口重定向串讲4

1.通讯的分类

①并行通信

②串行通信

③同步方式

④异步方式

⑤单工

⑥半双工

⑦全双工

2.SCON:串行控制寄存器(可位寻址)

①方式1

②具体配置(软件生成

3.PCON:电源控制寄存器(不可位寻址)

①波特率选择器

4.SBUF:串口数据缓存寄存器(0x99)

  ①串行发送/接收 :                                    ②数据发送/接收:

发送:向SBUF写入                                                    发送:TI=1

接收:读SBUF的数据                                                接收:RI=1

5.IE:中断允许寄存器(可位寻址)

6.串口编写步骤

①初始化函数

②中断服务函数(串口1中断号为4)

③字节发送函数

二、代码实现

1.串口初始化函数设置

定时器0:计时、数码管显示

定时器1:超声波、ne55

定时器2:串口

2.串口初始化函数

3.字节发送函数

EA:CPU的总中断允许控制位

ES:串行口中断允许位

4.字符串发送函数(搭载字节发送函数)

5.串口1中断服务函数(interrupt 4)

三、代码编写

1.接收指令Uart_Send_String()在按键里实现

①程序上写,接收区显示

中文显示问题

s

/* Main */
void main()
{
	
	System_Init();
	Timer0Init();
	UartInit();
	Uart_Send_String("鲨鱼");
	while (1)
	{
		Key_Proc();
		Seg_Proc();
		Led_Proc();
		Uart_Proc();
	}
}

②sprintf函数

③接收温度,显示温度

unsigned char Uart_Send[10];//串口接收数据储存数组 
float t;



/* 键盘处理函数 */
void Key_Proc()
{
	if(Key_Slow_Down) return;
	Key_Slow_Down = 1;//键盘减速程序

	Key_Val = Key_Read();//实时读取键码值
	Key_Down = Key_Val & (Key_Old ^ Key_Val);//捕捉按键下降沿
	Key_Up = ~Key_Val & (Key_Old ^ Key_Val);//捕捉按键上降沿
	Key_Old = Key_Val;//辅助扫描变量

	switch(Key_Down)
	{
		case 4:
			sprintf(Uart_Send,"T = %.2f\r\n",t);
			Uart_Send_String(Uart_Send);
		break;
	}
}

/* 信息处理函数 */
void Seg_Proc()
{
	if(Seg_Slow_Down) return;
	Seg_Slow_Down = 1;//数码管减速程序

	t = rd_temperature();
}

2.发送指令(控制类)dat = Uart_Recv[];在Uart_Proc()里实现

:把指令解析出来然后在逻辑里去运用起来

①在发送区写数字,在数码管上显示

unsigned char dat;
unsigned char Uart_Recv[10];//串口接收数据储存数组 默认10个字节 若接收数据较长 可更改最大字节数
unsigned char Uart_Recv_Index;//串口接收数组指针
unsigned char Uart_Slow_Down;//串口减速专用变量

/* 串口处理函数 */
void Uart_Proc()
{
	if(Uart_Slow_Down) return;
	Uart_Slow_Down = 1;//串口减速程序	
	
	if(Uart_Recv_Index == 1)
	{
		dat = Uart_Recv[0];//把接收数组储存到dat里
		Uart_Recv_Index = 0;//读完之后把指针复位
	}
}

/* 信息处理函数 */
void Seg_Proc()
{
	if(Seg_Slow_Down) return;
	Seg_Slow_Down = 1;//数码管减速程序
	
	Seg_Buf[0] = dat / 10;
	Seg_Buf[1] = dat % 10;
}

②在发送区输入Led_=_,板子上实现相应功能

unsigned char dat;
unsigned char Uart_Recv[10];//串口接收数据储存数组 默认10个字节 若接收数据较长 可更改最大字节数
unsigned char Uart_Recv_Index;//串口接收数组指针
unsigned char Uart_Slow_Down;//串口减速专用变量

/* 串口处理函数 */
void Uart_Proc()
{
	if(Uart_Slow_Down) return;
	Uart_Slow_Down = 1;//串口减速程序	

	/*LED_=_  6个*/
	if(Uart_Recv_Index == 6)
	{
		if(Uart_Recv[0] == 'L' && Uart_Recv[1] == 'e' && Uart_Recv[2] == 'd' && Uart_Recv[4] == '=')
			ucLed[Uart_Recv[3] - 48] = Uart_Recv[5] - 48;
		Uart_Recv_Index = 0;
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值