在计算机科学中,子程序(英语:subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部份代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。接下来我们就来看看关于fm25l256的操作子程序。
#include\;
//fm25l256数据读取子程序;
//参数:*pdestination要读入数据的;
//参数条件:uisourceaddress+(;voidreadfm25l256(unsigne;unsignedcharuchighaddres;enablefm25256;//cs变低spdr;
spdr=0;//为了读取数据,需要写入数据,发;wh
#include \
//fm25l256数据读取子程序
//参数: *pdestination要读入数据的主机内存地址指针; uisourceaddress要读取的数据在fm25l256中的地址(整形); uinum数据个数(整形)
//参数条件: uisourceaddress+(uinum-1)不能大于器件的最高地址; uinum必须》0;
void readfm25l256(unsigned char *pdestination, unsigned int uisourceaddress, unsigned int uinum) {
unsigned char uchighaddress = uisourceaddress 》》 8; //高位地址 spcr = (1《
enablefm25256; //cs变低 spdr = 0x03; //写入读命令字 while((spsr&(1《 0;uinum--) {
spdr = 0; //为了读取数据,需要写入数据,发送sck,故写入0
while((spsr&(1《
pdestination++; }
disablefm25256; //cs变高 }
//fm25l256数据读取并发送至串口子程序
//参数: uisourceaddress要读取的数据在fm25l256中的地址(整形); uinum数据个数(整形) //参数条件: uisourceaddress+(uinum-1)不能大于器件的最高地址; uinum必须》0; //返回值:所发送数据的检验和
unsigned char readfm25l256sendtousart(unsigned int uisourceaddress, unsigned int uinum) {
unsigned char uchighaddress = uisourceaddress 》》 8; //高位地址 unsigned char uctemp;
enablefm25256; //cs变低 spcr = (1《
while((spsr&(1《 0;uinum--) {
spdr = 0; //为了读取数据,需要写入数据,发送sck,故写入0
while((spsr&(1《
disablefm25256; //cs变高 return (1); }
//fm25l256数据写入子程序
//参数: *psource要写入数据的主机内存地址指针; uidestinationaddress要写入的数据在fm25l256中的地址(整形); uinum数据个数(整形)
void writefm25l256(unsigned char *psource, unsigned int uidestinationaddress, unsigned int uinum) {
unsigned char uchighaddress = uidestinationaddress 》》 8; //高位地址 enablefm25256; //cs变低 spcr = (1《
while((spsr&(1《
disablefm25256; //cs变高 _delay_us(50);
enablefm25256; //cs变低 spdr = 0x02; //写入写命令字
while((spsr&(1《
spdr = uchighaddress; //写入高位地址ci-fm25h20-dg
while((spsr&(1《
spdr = (unsigned char) (uidestinationaddress & 0x00ff); //写入低位地址 while((spsr&(1《
for(;uinum 》 0;uinum--) {
spdr = *psource; //发送要写入的数据
while((spsr&(1《
psource++; }
disablefm25256; //cs变高 }
//fm25l256自检子程序
//返回值:0:自检成功,1:自检失败 unsigned char fm25l256selftest(void) {
unsigned int uitemp;
uitemp = readint(fm25l256_check_address);
if (uitemp == 0xa55a) //判断是否存储器是否能读 return (0); else
{ //存储器不能读或未进行出厂设置 setdefault(); //出厂设置,函数定义在system.c writeint (0xa55a,fm25l256_check_address); //设置已出厂设置标志 uitemp = readint(fm25l256_check_address);
if (uitemp == 0xa55a) //若读取正确返回0 return (0); else
return (1); //若仍读取错误则返回1 } } /*
//测试fm25l256子程序 void verifyfm25l256(void) {
unsigned int uicheckaddress = 0;
unsigned int uimemorynum = readint(memory_address); unsigned int uiolddata; unsigned char ucerror = 0; unsigned char ucsendchksum; unsigned char i;
union tagstoreint siusartdataint; //整型共用体,将整形分解为字节型存取,在datastore.h中定义
for (;uicheckaddress 《 uimemorynum;uicheckaddress += 2) {
uiolddata = readint(uicheckaddress); //保存原有数据 writeint (0xa55a,uicheckaddress); //写入测试字 // __delay_cycles(10);
if (readint(uicheckaddress) != 0xa55a) {
writeint (uiolddata,uicheckaddress); //写回原有数据
sendchar(comm_frame_start); //发送反馈帧头
ucsendchksum = comm_frame_start; //计算反馈帧的校验和 sendchar(verify_fram_command); //发送命令字
ucsendchksum += verify_fram_command; //计算反馈帧的校验和 siusartdataint.uistoreint = uimemorynum; //发送地址总长 for (i = 0;i 《= 1;i++) {
sendchar(siusartdataint.ucstorebuff[i]);
ucsendchksum += siusartdataint.ucstorebuff[i]; }
siusartdataint.uistoreint = uicheckaddress; //发送测试地址 for (i = 0;i 《= 1;i++) {
sendchar(siusartdataint.ucstorebuff[i]);
ucsendchksum += siusartdataint.ucstorebuff[i]; }
sendchar(finished_send);
ucsendchksum += finished_send; //发送结束上传标志 sendchar(ucsendchksum); //发送检验和 sendchar(comm_frame_end); //发送帧尾 ucerror = 1; //置错误标志 break; //退出循环 }
else if ((((uicheckaddress + 2) % 1024) == 0) && ((uicheckaddress + 2) 《 uimemorynum)) {
writeint (uiolddata,uicheckaddress); //写回原有数据
sendchar(comm_frame_start); //发送反馈帧头
ucsendchksum = comm_frame_start; //计算反馈帧的校验和 sendchar(verify_fram_command); //发送命令字
ucsendchksum += verify_fram_command; //计算反馈帧的校验和 siusartdataint.uistoreint = uimemorynum; //发送地址总长 for (i = 0;i 《= 1;i++) {
sendchar(siusartdataint.ucstorebuff[i]);
ucsendchksum += siusartdataint.ucstorebuff[i]; }
siusartdataint.uistoreint = uicheckaddress + 2; //发送测试完成地址
for (i = 0;i 《= 1;i++) {
sendchar(siusartdataint.ucstorebuff[i]);
ucsendchksum += siusartdataint.ucstorebuff[i]; }
sendchar(go_on_send);
ucsendchksum += go_on_send; //发送结束上传标志 sendchar(ucsendchksum); //发送检验和 sendchar(comm_frame_end); //发送帧尾 // __watchdog_reset(); //复位看门狗 }
writeint (uiolddata,uicheckaddress); //写回原有数据 }
if (ucerror == 0) {
sendchar(comm_frame_start); //发送反馈帧头
ucsendchksum = comm_frame_start; //计算反馈帧的校验和 sendchar(verify_fram_command); //发送命令字
ucsendchksum += verify_fram_command; //计算反馈帧的校验和 siusartdataint.uistoreint = uimemorynum; //发送地址总长 for (i = 0;i 《= 1;i++) {
sendchar(siusartdataint.ucstorebuff[i]);
ucsendchksum += siusartdataint.ucstorebuff[i]; }
siusartdataint.uistoreint = uicheckaddress; //发送测试完成地址 for (i = 0;i 《= 1;i++) {
sendchar(siusartdataint.ucstorebuff[i]);
ucsendchksum += siusartdataint.ucstorebuff[i]; }
sendchar(finished_send);
ucsendchksum += finished_send; //发送结束上传标志 sendchar(ucsendchksum); //发送检验和 sendchar(comm_frame_end); //发送帧尾 } } */
集成电路封装工艺—Molding概述
无人机的点胶秘密
【解决方案】如何通过WiFi蓝牙二合一模块WG237实现智能控制-工业控制
清华大学团队提出并构建了光电智能衍射计算处理器
用于平板和智能手机双端口充电器参考电路
FM25L256操作子程序
谷东科技将为商用飞机制造企业提供全方位的远程协作服务
智哪儿观察:鸿雁建博会推出全场景智慧解决方案,释放了什么信号
嫦娥五号成功进入最终环月轨道
XL-803三相程控标准功率源概述及特点
半导体新增投资247亿元,半导体资本开支大幅增长
未来十年后半时期汽车ADAS的主要增长动力
Mini-LED电源及背光控制系统设计
启扬方案:新能源电站功率预测系统数据采集设备解决方案
成者科技正式进入智慧办公市场的细分领域—会议场景
便携式电磁波检测仪详解
智能终端产业发展趋势分析
小米6难产,低配版也“缩水”了?这锅或许得“队友”来背!
NB-IoT将迎来更加快速的发展
虽然销售惨淡,但iPhone仍是苹果的护城河