- 打卡等级:初来乍到
- 打卡总天数:3
- 最近打卡:2024-02-09 10:04:07
注册会员
- 积分
- 50
|
要实现的功能:
SPI主机将存在数组里的位图数据连续发给从机,
SPI从机将接收的数据存储或直接给LCD显示。
先修改,运行范例程序,不管主机是否没连接从机,用示波器测MOSI上都没测到数据信号?
下面时完成程序,大佬帮忙看一下,谢谢!
#include "reg51.h"
#include "intrins.h"
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
sfr P_SW1 = 0xa2;
sfr SPSTAT = 0xcd;
sfr SPCTL = 0xce;
sfr SPDAT = 0xcf;
sfr IE2 = 0xaf;
#define ESPI 0x02
sbit SS = P2^2;
sbit LED = P1^7;
//delay ms
void delay_ms(unsigned char COUNT) //@6.000MHz
{
unsigned char i, j;
while(COUNT--)
{
_nop_();
i = 8;
j = 200;
do
{
while (--j);
} while (--i);
}
}
/**************************************/
void main()
{
P0M0 = 0x00; P0M1 = 0x00;
P1M0 = 0x00; P1M1 = 0x00;
P2M0 = 0x00; P2M1 = 0x00;
P3M0 = 0x00; P3M1 = 0x00;
P4M0 = 0x00; P4M1 = 0x00;
P5M0 = 0x00; P5M1 = 0x00;
LED = 0;
delay_ms(200);
//SPI初始化
SS = 1;
// P_SW1 = 0x00; //SS/P1.2, MOSI/P1.3, MISO/P1.4, SCLK/P1.5
P_SW1 = 0x04; //SS_2/P2.2, MOSI_2/P2.3, MISO_2/P2.4, SCLK_2/P2.5
// P_SW1 = 0x08; //SS_3/P5.4, MOSI_3/P4.0, MISO_3/P4.1, SCLK_3/P4.3
// P_SW1 = 0x0c; //SS_4/P3.5, MOSI_4/P3.4, MISO_4/P3.3, SCLK_4/P3.2
SPCTL = 0x50; //使能SPI主机模式
SPSTAT = 0xc0; //清中断标志
while (1)
{
SS = 0; //拉低从机SS
SPDAT = 0x5a; //发送测试数据
while (!(SPSTAT & 0x80)); //查询完成标志
SPSTAT = 0xc0; //清中断
SS = 1; //拉高从机SS
LED = 1; //测试
delay_ms(200);
LED = 0;
delay_ms(200);
}
}
|
|