I know nothing but my ignorance.
5月18日
今天是单片机实习的第一天,因为疫情原因变成了线上开展。
上午,老师把六个选题都一一讲解了一遍,并告诉我们一些在实习过程中可能会出现的一些问题和注意事项。老师讲完后,我们就开始组队和选题了。
在经过一番并不激烈的讨论后,我们组选择了第二个项目:数字频率计设计
一、基本要求:
测量待测 TTL
电平信号的频率
- 频率范围:10 Hz ~ 50kHz,全测量范围误差不大于 1%;
- 用液晶屏
LCD1602
显示数值和单位,可显示频率及周期; - 数据刷新率每秒三次以上;
- 在同一台单片机上自行设计测试用信号源;
- 通过串口通信在远程单片机(仿真环境)显示测量结果。
二、扩展要求
- 占空比测量
- 在保证数据刷新率和精度的基础上拓展测量频率范围
下午,我们组四个人开始查文献讨论总体方案和分工。又是一番并不激烈的讨论后,我们确定好了分工。我选择了串口通信功能的实现。
5月19日
上午确定分工合作的一些细节部分的设计,资源的分配,引脚的功能等等。然后,听老师讲一些知识点。
下午,我开始查找串口通信的资料文献。最终确定采用异步通信的方式实现串口通信。接着开始着重异步通信方面的资料查询。经过一番并不困难的翻阅后,大致了解了异步通信的 4 种方式以及定时器的知识。
52单片机有三个定时器/计数器,与串口通信有关的就是 T1定时器了。定时器/计数器的实质是加 1 计数器(高 8 位 和低 8 位 两个寄存器组成)。TMOD
是确定工作方式和功能的寄存器;TCON
是控制 T0、T1 的启动和停止及设置溢出标志的寄存器。
TMOD
:
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | $GATE$ | $C/\overline{\text{T}}$ | $M1$ | $M0$ | $GATE$ | $C/\overline{\text{T}}$ | $M1$ | $M0$ |
D7~D4
为 T1
定时器,D3~D0
为 T0
定时器。$C/\overline{\text{T}}$ 为 0 时为定时器模式,为 1 时为计数器模式,M1
和 M0
是工作方式选择位。
M1 | M0 | 工作方式 |
---|---|---|
0 | 0 | 方式0,为13位定时器/计数器 |
0 | 1 | 方式1,为16位定时器/计数器 |
1 | 0 | 方式2,8位初值自动重装的8位定时器/计数器 |
1 | 1 | 方式3,仅适用于 T0,分成两个8位计数器,T1停止计数 |
TCON
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | $TF1$ | $TR1$ | $TF0$ | $TR0$ | $IE1$ | $IT1$ | $IE0$ | $IT0$ |
5月20日
经过昨天一天的查阅学习,已经对串口通信有了比较全面的了解。所以,今天就是先把串口通信的一些必要环境准备好。下载串口助手和虚拟串口工具,然后测试串口助手。在一番并不花里胡哨的操作后,基本操作都会了。接着就是准备仿真下的串口测试了。在 protues
上,点来点去,又是一番行云流水且不花里胡哨的操作后,仿真环境也搭建好了。然后开始敲代码,在 keil
这个外表朴实无华但功能强大的软件上,敲下第一个简单串口通信的代码。然后结合串口助手观察效果。这样一个发送单个字符的例子就测试成功了。
5月21日
今天是周四,上午老师照常开了小小的线上例会。交我们一些小小的调试技巧之类的。在昨天的基础上,今天继续修改代码,实现发送和接收功能。上午把整个代码框架写了出来,本以为会是顺顺利利的一天。但是下午的调试,着实不太顺利。先是,接收的数据并不是期望的数据,在一顿微操后,发现是接收数据的数组出现了溢出现象。调好后,又发现接收的数据有些错位了。又是一顿 Debug
后,自己定义一个简单通信协议,在数据头尾加上标志位,以确保接收方正确接收到期望数据。来来回回这样折腾后,仿真串口通信是没有问题了。
5月22日
一觉醒来还是周五,是的,昨晚熬到了十二点。精力显然有些不充沛的我,还是打开了电脑,接着干了。队友那边的频率测量 和LCD
显示功能已经就绪了。今天可以整一块测试一下了。拿到他们的代码后,便开始调试。红红火火恍恍惚惚,就这样一顿朴实无华而实用的 CV
大法过后,加以小小微操作为辅助,就调好了。
5月25日
短暂的周末一晃就过去了。新的一周,继续干。现在只剩下信号源了。查资料,敲代码,仿真。陷入循环状态。进度十分缓慢。浑浑噩噩,一天就这样结束了。
5月26日
距离实习结束,迫在眉睫。但是,实在有些精神疲惫了。打开和昨天一样的软件一样的文件,开始改代码。一番操作,以为成了。结果,一到高频信号,就不受调制了,无法准确控制信号频率的改变。
5月27日
今天开始在开发板上进行真机测试,果然不出所料,仿真和真机不一样。一天的疯狂调试,勉强调好,差强人意的样子。