最近帮师姐做毕业设计,先把SPI部分的程序放上来,等师姐顺利毕业再把论文发上来。


unsignedchar code redate[30];
int valbit(unsignedchar cmd,unsignedchar i)
{
unsignedchar val;
cmd=cmd<<i;               //将cmd的第i位左移至最高位
val=cmd&0x80;             //判断左移后的最高位是否为1;
return val;
}
void  SLEEP()
{
_asm
SLEEP     /*进入休眠状态*/
_endasm
}
void BL_write(unsignedchar cmd,unsignedchar *DATE)
{
unsigned n,m,j;
cmd=cmd|0x40;            //强制使写入数据最高两位为01
RD1=0;                   //拉低DIR
RB1=1;                   // /CS置1
delay(1);
RB4=1;                   //置SCLK为0;
delay(1);
RB1=0;                   //CS置0,是BL6523A进入通信模式
delay(1);
for(n=0;n<8;n++)         //向BL6523A中写入一个8字节的数据)
{
RB4=0;                 //置SCLK为0,开始准备要写入的数据
delay(1);
if(valbit(cmd,n)==0)   //cmd第n位是否为0
RB2=0;               //DIN置0
else                  //cmd第n位不为0
RB2=1;               //DIN置1
delay(1);
RB4=1;                //SCLK上升沿写入数据
delay(1);
}
RB4=0;                   //SCLK置0
for(m=0;m<3;m++)
{
for(j=0;j<8;j++)
{
if(valbit(DATE[m],j)==0)
RB2=0;               //DIN置0
else                  //cmd第n位不为0
RB2=1;               //DIN置1
delay(1);
RB4=1;                //SCLK上升沿写入数据
delay(1);
}
}
RB4=0;
delay(5);
RB1=1;                  // /CS置1,推出通信模式
}
void init_bl6523a()
{
BL_MODE_DATE=[0x00,0x00,0x00];  //MODE中的12位数据全为0,选择了A通道电压高通滤波
BL_write(0x94,BL_MODE_DATE);         //将MDDE寄存器
DIR=1;
}
unsignedchar read_bl6523a(unsignedchar cmd,unsignedchar *rdate)
{
unsignedint n,m,j;
RD1=0;                   //拉低DIR
RB1=1;                   // /CS置1
delay(1);
RB4=1;                   //置SCLK为0;
delay(1);
RB1=0;                   //CS置0,是BL6523A进入通信模式
delay(1);
for(n=0;n<8;n++)         //向BL6523A中写入一个8字节的数据)
{
RB4=0;                 //置SCLK为0,开始准备要写入的数据
delay(1);
if(valbit(cmd,n)==0)   //cmd第n位是否为0
RB2=0;               //DIN置0
else                  //cmd第n位不为0
RB2=1;               //DIN置1
delay(1);
RB4=1;                //SCLK上升沿写入数据
delay(1);
}
delay(5);
RD1=1;                  //拉高DIR,开始读入数据
for(m=2;m>=0;m--)
{
for(j=0;j<8;j++)
{
RB4=1;
delay(1);
RB4=0;     //产生一个下降沿
delay(1);
rdate[m]=rdate[m]<<1;
if(RB3=1)
rdate[m]=rdate[m]+1;
delay(2);
}
}
RB1=1;               //停止通信
delay(2);
return *rdate;
}
void read_pic()
{
unsignedchar outdate[3]={0x00,0x00,0x00};
unsignedint i,j;
unsignedint k=1;
while((!RC1)&k)                  //是否收到上位机的接收命令
{
for(i=0;i<10;i++)                       //将BL中的数据写入PIC的数据存储器
{
outdate=read_bl6523a(0x0c,outdate);
for(j=0;j<3;j++)
{
redate[3*i+j]=outdate[j];
outdate[j]=0x00;
}
}
k--;
}
if(RC1=0)                  // 如果还未收到上位单片机的接收命令,进行休眠
SLEEP();
else
}
void SPI()
{
init_bl6523a();
while(1)
{
if(RB0=0)
read_pic();
}
}

PIC18f46j50单片机里SPI部分的一点程序相关推荐

  1. 51单片机usb烧录电路_51单片机怎么用usb烧写程序 - 全文

    单片机怎样用usb烧写程序 首先,需要安装keil软件和STC_ISP程序下载软件. 先对你想要实现对单片机的功能用keil编程,然后用STC_ISP下载软件下载到单片机上,最后打开给单片机提供电源就 ...

  2. 单片机18b20c语言程序,AVR单片机控制DS18B20的示例C程序

    原标题:AVR单片机控制DS18B20的示例C程序 #include #include #include #include unsigned char data_H, data_L,wendu; un ...

  3. 单片机实验:数据区传送程序

    任务 将单片机片内存储器存储区首地址设置为60H.片外存储器存储区首地址设置为4000H,存入片内存储区内容为04H-14H共17个字节 ,读取片内首地址为60H单元内容,将该内容传送到片外数据存储器 ...

  4. 单片机c语言led灯闪烁程序,单片机LED灯闪烁程序

    点亮 LED 小灯的程序我们第二课完成了,就是让 LED = 0.熄灭小灯的程序也很简单,就是 LED = 1.点亮和熄灭都会了,那么如果我们在亮和灭中间加个延时,反复不停的点亮和熄灭小灯,就成了闪烁 ...

  5. c语言中swap表示什么意思,swap是什么意思_单片机里的SWAP A是什么意思啊?

    Swap是什么意思 Swap是一种金融衍生品,指交易双方约定在未来某一期限相互交换各自持有的资产或现金流的交易形式. 外汇里的"swap"是什么意思? 外汇里swap专业说法是掉期 ...

  6. KEIL-51单片机实现自定义bootloader,用于程序更新 研究

    本文原创作者: 少占鱼大神 关于8051的bootloader实现方式 一, 基本硬件需求 要实现IAP功能,需要51单片机可以在程序里修改代码空间的Flash,或者至少可以修改用户程序区的Flash ...

  7. RAM在单片机里究竟有什么用?

    单片机就是个小计算机,大计算机少不了的数据存储系统,单片机一样有,而且往往和CPU集成在一起,更加显得小巧灵活. 直到90年代初,国内容易得到的单片机就是8031:不带存储器的芯片,要想工作,还必须外 ...

  8. 成功解决keil识别不到单片机芯片,下载不了程序

    成功解决keil识别不到单片机芯片,下载不了程序 我的芯片是STM32F429,正点原子的阿波罗. 今天使用开发板做实验,突然找不到芯片了,以前下载的PWM波也运行不了.查找了好久,原来是芯片锁了,终 ...

  9. 用计算机控制150个继电器,计算机怎样控制单片机里的继电器

    电子世界真的很奇妙.在此献上本人第一个电脑控制单片机里的继电器.让你也感受下电子世界奇妙. 单片机程序: 将此程序借助软件写入单片机内: 单片机 PC端为单片机写入的程序的软件 开发板端的连接 PC端 ...

最新文章

  1. LINUX下用CTRL+R快速搜索HISTORY历史命令,快速索引到之前使用过的命令行语句
  2. python【洛谷算法题单-搜索】P1605 迷宫
  3. 在arm linux mini2440上移植ntp服务,RTEMS 4.9.5 在 QEMU MINI2440 上的移植发布啦……
  4. 【noiOJ】P1996
  5. 计算机相关冷门专业,211名校冷门专业和双非计算机专业,该如何选择?过来人告诉你...
  6. python8.3多进程
  7. 简单易用的.NET免费开源RabbitMQ操作组件EasyNetQ解析
  8. Java 8 – Date API的新增功能
  9. 采用计算机辅助电话调查,计算机辅助电话调查(CATI)-实验.pdf
  10. Google Guava缓存实现接口的限流
  11. 12v小型电机型号大全_电机型号参数大全
  12. jeecgboot 前端环境搭建_如何从零开始搭建前端监控平台?
  13. 手机号正则_一起刷题学习正则表达式
  14. 速修复!开源编辑器CKEditor 中存在两个严重XSS漏洞,影响Drupal 和其它下游应用...
  15. Linux中交叉编译器的安装
  16. 人工智能数学基础:无理数e的由来以及对数、指数函数的求导
  17. Word提示:“向程序发送命令时出现问题”解决方法
  18. com.monotype.android.font.ktoppo,Zawgyi Myanmar Fonts Free
  19. 吴恩达卷积神经网络 笔记,吴恩达 深度神经网络
  20. 分析PostLateUpdate.FinishFrameRendering()。每帧渲染时间截然不同

热门文章

  1. win7修改网络计算机名字,Win7系统中不能修改计算机名字是怎么回事?
  2. java大学生网上请假系统ssm框架
  3. pacman yaourt使用
  4. linux 不识别 svg,manjaro/archlinux用yaourt -Syu滚动升级后大量图标主题不能用svg图标不能识别...
  5. 虚拟机一直光标闪,进不去,解决方法之一。
  6. 2018 年全球人工智能与机器人峰会将在深圳举办
  7. 6大Word编辑高级技巧,制作文档又快又好看
  8. JAVA 通过属性名称 获取属性值、设置属性值
  9. 用stlstack实现深搜_同心筑共未来,深信服是认真的
  10. WinDbg非常简单的调试dmp文件