找回密码
 立即注册
查看: 383|回复: 5

两个STC8H通过SPI传输数据

[复制链接]
  • TA的每日心情
    开心
    2024-2-9 10:04
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    2

    主题

    8

    回帖

    50

    积分

    注册会员

    积分
    50
    发表于 2023-6-1 18:24:07 | 显示全部楼层 |阅读模式
    要实现的功能:

    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);
        }
    }



    回复 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3043

    回帖

    6861

    积分

    超级版主

    积分
    6861
    发表于 2023-6-1 21:52:18 | 显示全部楼层
    SPI每隔200ms发一个字节,要用示波器的标准(普通)触发,扫描速度1us/DIV,才能看到。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-9 10:04
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    2

    主题

    8

    回帖

    50

    积分

    注册会员

    积分
    50
     楼主| 发表于 2023-6-2 12:57:51 | 显示全部楼层
    问题找到了,SS改为非专用脚MOSI就可以测到数据波形了。
    SS如果用P2.2,P2.2设置为推挽输出,也不行;因外部未留上拉电阻,开漏输出没试。

    例程用的
    sbit    SS      =   P1^0;
    避开了所有专用SS脚。

    不确定这是否算个坑
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9515

    回帖

    1万

    积分

    管理员

    积分
    14087
    发表于 2023-6-2 13:41:58 | 显示全部楼层
    1.png
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-9 10:04
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    2

    主题

    8

    回帖

    50

    积分

    注册会员

    积分
    50
     楼主| 发表于 2023-6-2 15:33:54 | 显示全部楼层
    互为主从系统是,主机和从机的程序时一样的吗?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-9 10:04
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    2

    主题

    8

    回帖

    50

    积分

    注册会员

    积分
    50
     楼主| 发表于 2023-6-2 16:57:03 | 显示全部楼层
    互为主从系统时,两块板的程序、LED,KEY,SS接的IO也都一样吗?主机模式和从机模式怎么区分?按哪个板的按键哪个板是主机? 按键一次发一次0x5a,在MOSI上可测到信号,MISO上无信号
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-19 13:10 , Processed in 0.064205 second(s), 52 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表