一、知识介绍
(一)产品分拣生产线示意图
在对颜色传感器进行白平衡校准后,可以考虑将校准参数存放进Flash。所以,在这里我们可以考虑选用带有IAP功能的STC51单片机,来实现存放白平衡校准数据,避免重复进行白平衡校准。
图4.3.1 产品分拣生产线示意图
(二)白平衡校准数据存储相关子函数
1.单片机Flash写入、读出相关头文件
本次任务选用了STC89C516单片机,该单片机具有IAP功能,能将数据实时写入Flash存储器。
STC单片机提供的Flash相关的头文件,定义了相关的写入、读出库函数,用户在程序设计时可以直接调用。
2.白平衡校准写入flash子函数balance_write
设计思路:D0指示灯闪烁,按下白平衡按键,闪烁结束后,程序调用白平衡校准函数balance(详见项目三任务二),进行白平衡数据测试,测试数据存放于数组fcolor[6]中,再调用库函数将数组fcolor[6]数据写入Flash,结束后,指示灯再次闪烁,闪烁结束,代表白平衡数据更新并写入Flash。
若未等到指示灯闪烁,则白平衡数据只在本次上电后和断电前这段时间内使用,白平衡数据只存在RAM里面,未写入Flash。
3.白平衡数据读出函数balance_read
设计思路:调用库函数IapReadBytes,将之前写入Flash的数据,读出到数组fcolor[6]中,再将数组fcolor[6]中的数据分别存放于变量F_R、F_G、F_B中。
二、引导题
(1)请写出本次任务所用到的单片机引脚。
(2)为什么要将白平衡数据存储进Flash?
(3)写入和读出Flash数据的库函数分别是什么?
(4)请画出本次任务的程序流程图。(www.xing528.com)
(5)请写出本任务程序打算使用哪些子函数,分别写出每个子函数的作用是什么?
三、知识探究——参考程序
1.白平衡校准写入flash子函数——balance_write
2.白平衡数据读出函数——balance_read
四、知识扩展——什么是IAP功能?
IAP(In Application Programming),它的意思是“在应用编程”,即在程序运行时程序存储器可由程序自身进行擦写。简单来说,也就是说程序可以自己往程序存储器里写数据或进行修改。
这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP(在线系统编程)功能就是通过IAP技术来实现的,即单片机在出厂前就已经有一段小的boot(启动)程序在里面,上电后,单片机开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到存储区。应用时注意千万不要去擦除这段ISP引导程序,否则会导致下载不了程序。
正是因为有了IAP,单片机才可以将数据写入到程序存储器中,使得数据如同烧入的程序一样,掉电不会丢失。当然,写入数据的区域与程序存储区要区分开来,以使程序不会遭到破坏。
IAP功能与以下几个特殊功能寄存器相关:
ISP_DATA: ISP/IAP 操作时的数据寄存器。
ISP/IAP: 从Flash 读出的数据放在此处,向Flash写入的数据也需放在此处。
ISP_ADDRH:ISP/IAP 操作时的地址寄存器高八位。
ISP_ADDRL:ISP/IAP 操作时的地址寄存器低八位。
ISP_CMD:ISP/IAP 操作时的命令模式寄存器,须命令触发寄存器触发方可生效。
ISP_TRIG:ISP/IAP 操作时的命令触发寄存器。
当ISPEN(ISP_CONTR.7)=1 时,对ISP_TRIG 先写入0x46,再写入0xb9,ISP/IAP命令才会生效。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。