内容正文:
任务4 通信模块设计与制作
单片机技术与应用
项目二 智能车间生产线计数系统设计与制作
【基础任务要求】通过模拟企业智能车间药装生产线,甲单片机利用红外光电传感器检测药瓶并计数,然后把计数结果通过串口传送给乙单片机,并在乙单片机数码管显示药瓶数,当计到3个药瓶时,蜂鸣器报警,同时每1秒钟指示灯闪烁一次。
任务4 通信模块设计与制作
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
任务实现四步骤
绘制控制电路图
搭接硬件电路
硬件设计
调试控制电路
调试控制程序
软硬件调试
仿真运行
实物运行
功能实现
绘制流程图
编程实现功能:串行通信
软件设计
01
02
03
04
重点、难点
难点
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
系统框图
任务4 通信模块设计与制作
甲单片机
乙甲单片机
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
任务名:通信模块设计与制作
元件名称 图片 型号 数量 Proteus中的名称
单片机芯片 AT89C51 1 用AT89C51代替STC89C52
晶振 12MHZ 1 CRYSTAL
电容 22pF 2 CAP
电解电容 22μf/16V 1 CAP-ELEC
电阻 500Ω 1 RES
按钮 1 BUTTON
三极管 1 PNP
发光二极管 1 LED-RED
电阻 220Ω 1 RES
四位一体共阴极数码管 1 7SEG-MPX4-CC
锁存器 2 74HC573
元器件选型
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
硬件设计
甲单片机
乙单片机
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
硬件电路图
【小锦囊】在单片机串行通信接口设计中,建议使用振荡频率为11.0592MHZ的晶振,可以计算出比较精确的波特率。
在单片机与PC机的通信中,必须使用11.0592MHZ的晶振。
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
软件设计
1
如何编程实现串行通信?
重点、难点
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
(1) 串行通信:数据字节一位一位在一条传输线上逐个传送。
传输线少,可利用电话网,但传送控制复杂。
1.什么是串行通信?
8位顺次传送
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
(2) 同步通信与异步通信
异步通信
收、发设备使用各自时钟
UART
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
以字符(构成的帧)为单位
字符间是异步的
字符内各位是同步的
数据格式 :
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
同步通信
发送方时钟与接收方时钟同步。既保持位同步,也保持字符同步。同步方法:
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
2.串行通信的传输方向
单工:单工是指数据传输仅能沿一个方向,不能实现反向传输。
单工
广播
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
2.串行通信的传输方向
半双工:半双工是指数据传输可以沿两个方向,但需要分时进行。
半双工
对讲机
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
2.串行通信的传输方向
全双工:全双工是指数据可以同时进行双向传输。
全双工
电话机
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
3. 传输速率与传输距离
传输速率
比特率: 每秒钟传输二进制代码的位数
波特率: 每秒钟调制信号变化的次数,即每秒钟发送的位数,单位是:波特(Baud)。
波特率和比特率不总是相同的,但对于基带传输,比特率和波特率是相同的。
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
3.传输速率与传输距离
传输距离
传输距离与传输速率的关系
传输距离随传输速率的增加而减小。
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
4. 串行接口的结构及工作方式
串口结构
有两个物理上独立的接收、发送缓存器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓存器,因为发送时CPU是主动的,不会产生重叠错误。
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
串口引脚
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
串行通信的数据结构
异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
TI=0
RI=0
工作方式寄存器SCON
RI:接收中断标志位
接收结束时,会由硬件置1,向CPU发出中断请求。(要由软件复位)
TI:发送中断标志位
发送结束时,会由硬件置1,向CPU发出中断请求。要由软件复位)
TB8:用来存放发送的第9位。
RB8:用来存放接收的第9位。
REN:是串行接收允许位
0时:允许串行接收
1时:禁止串行接收
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
SM2:多机通信控制位。
因为多级通信是在工作方式2和工作方式3下进行的,因此SM2主要用在工作方式2和工作方式3。
当SM2=0时:不论接收的第9位是0还是1,都接收数据,产生中断;
当SM2=1时:只有在接收到的第9位为1时,才接收数据,并产生中断;而如果接收到的第9位为0时,则将接收到的数据丢弃,不产生中断。
串行口的工作方式
SM0 SM1 方式 说明 波特率
0 0 0 移位寄存器 fosc/12
0 1 1 10位异步收发器(8位数据) 可变
1 0 2 11位异步收发器(9位数据) fosc/64或fosc/32
1 1 3 11位异步收发器(9位数据) 可变
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
工作方式寄存器PCON
PCON是没有位寻址的,也就是说不能直接操作SMOD要直接操作PCON寄存器。
SMOD:是波特率是否加倍的选择位。
0时:波特率不加倍。
1时:波特率加倍。
例如:SMOD=1 ×
PCON=0x80 √
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
波特率的概念
波特率的定义是:串行口每秒钟发送的位数称为波特率。
比如说2400的波特率就是每秒钟发送2400个位数。
串行口的波特率是用定时器T1作为波特率发生器的,这是定时器自动设置在工作方式2(可自动重装初值)。
波特率=(2*SMOD)/32*定时器T1的溢出率
定时器T1的溢出率=单片机内部时钟频率/(256-X)
X是定时器的初值
波特率=(2*SMOD)/32*(单片机内部时钟频率/(256-X))
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
知识链接
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1 = P3^6;
void delay(uint ms)
{
uchar i;
while(ms--)
for(i = 0; i < 120; i++);
}
void Putc(uchar c) //定义串口发送数据函数
{
SBUF = c; //发送C变量中的数据到发送SBUF中
while(TI == 0) //查询等待发送是否完成
{
; //空语句
}
TI = 0; //发送完成,TI由软件清0
}
甲单片机程序:
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
void main()
{
uchar x = 0;
SCON = 0x40; //定义串行口工作方式1
TMOD = 0x20; //定时器T1工作方式2
PCON = 0x00; //波特率不变
TH1 = 0xfd; //设置串行口波特率为9600bps
TL1 = 0xfd;
TI = 0; //TI清0
TR1 = 1; //启动定时计数器T1
while(1)
{
if(K1 == 0)
{
while(K1 == 0); //检测到药瓶数
x = x + 1; //计数变量x加1
Putc(x); //调用串口发送数据函数
delay(100);
}
} }
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void baojing();
sbit beep=P3^5; //·äÃùÆ÷
sbit led=P3^6; //ÐźŵÆ
sbit we = P2^7;
sbit du = P2^6;
uchar c,x;
uchar ge,shi,bai,qian;
uchar time;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
乙甲单片机程序:
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
void delay(uint w)
{
uint j,k;
for(j = 0; j < w; j++)
for (k = 0 ; k < 120;k++);
}
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
void display(uint i)
{
uint qian,bai,shi , ge ;
qian = i / 1000;
bai = i %1000/100;
shi = i % 100 / 10;
ge = i % 10;
P1 = 0xff;
we = 1;
P1 = 0xf7;
we = 0;
du = 1;
P1 = table[qian];
du = 0;
delay(5);
P1 = 0xff;
we = 1;
P1 = 0xfb;
we = 0;
du = 1;
P1 = table[bai];
du = 0;
delay(5);
P1 = 0xff;
we = 1;
P1 = 0xfd;
we = 0;
du = 1;
P1 = table[shi];
du = 0;
delay(5);
P1 = 0xff;
we = 1;
P1 = 0xfe;
we = 0;
du = 1;
P1 = table[ge];
du = 0;
delay(5);
}
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
void main()
{
SCON = 0x50;
TMOD = 0x21;
PCON = 0x00;
TH1 = 0xfd;
TL1 = 0xfd;
ET0=1;
EA=1;
TR0=1;
RI = 0;
TR1 = 1;
P1 = 0;
while(1)
{
display(c);
if(RI)
{
RI = 0;
c = SBUF;
}
if(c==3)
{
beep = 0;
led = ~led;
Delay1000ms();
}
}
}
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
进阶任务
【任务要求】单片机甲使用矩阵式键盘输入6位密码,甲机发送密码给单片机乙机,乙机接收到密码后,在6位一体数码管上显示出来。
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
虚拟仿真
方案设计
任务拓展
实物联调
总结评价
任务引入
每天学习一点点,变成更好的自己
单片机技术与应用
�
���������
���������
�
8�����������
D0�
D7�
�
���������
���������
���������
�
10100100�
�
0�
1�
11100110�
0�
1�
�
10100100�
�
11100110�
1�
0�
$$