| 一段I/O口模拟SPI驱动墨水屏的程序下载到AI8051U以8bit模式运行时刷屏没问题,程序中换了8H.h并且主函数中注释掉WTST=0;CKCON=0;这两句后下载到8H8K64U中刷屏失败(实验板为开天斧三),给所有涉及控制的I/O口都配置内部上拉电阻也没效果(擎天柱板子I/O有外部上拉电阻),最近这两款芯片我都在用,在8bit工作模式下感觉两者的代码一直是可以通用的,这次有些蒙,弄了两天了也没弄出头绪。用简易的逻辑分析仪检测SPI数据完全正常,请各位高手指点下是哪里不对劲了。 下面是主函数代码:(keil uv3编译)
 
 以下为SPI代码:复制代码#include "STC8H.h"
#include "SSD1680EPD.h"
#include "delay.h"
#include "Ap_29demo.h"
//---------------------------------------------------
void main()
{
  EAXSFR();//允许访问扩展RAM区特殊功能寄存器( XFR)
  //WTST  = 0;
  //CKCON = 0;
  GPIO_set();//预置所有I/O口全部为准双向口
  P1M0 = 0x28;//P1.3、P1.5推挽输出(SPI通道1)
  P1M1 = 0x00;
  P1PU |= 0x28;//P1.3、P1.5配置上拉电阻
  P3M0 = 0x2c;//P3.2、P3.3、P3.5推挽输出,P3.4高阻输入
  P3M1 = 0x10;
  P3PU = 0x3c;
  delay_500ms();
  EPD_HW_Init(Hor);
  EPD_WhiteScreen_White();
  EPD_sleep();
  delay_500ms();
  P20 = 1;
  while(1)
  {
    P20 = ~P20;
    delay_500ms();
  }
}
 
 端口定义如下:复制代码//----I/O模拟SPI总线发送字节数据函数--------------------
void SPI_WriteByte(u8 value)
{
  u8 i, dat;
  dat = value;
  SPI_CLK = 0;
  for(i = 0; i < 8; i++)
  {
    if(dat & 0x80)
    {
      SPI_SDA = 1;
    }
    else
    {
      SPI_SDA = 0;
    }
    SPI_CLK = 1;
    NOP7();
    dat = dat << 1;
    SPI_CLK = 0;
  }
}
//----写指令-------------------------------------------
void Write_command(u8 command)
{
  CS = 0;
  NOP10();
  DC = 0;
  SPI_WriteByte(command);
  NOP5();
  CS = 1;
  NOP30();
}
//----写数据-------------------------------------------
void Write_data(u8 dat)
{
  CS = 0;
  NOP10();
  DC = 1;
  SPI_WriteByte(dat);
  NOP5();
  CS = 1;
  NOP30();
}
 
 复制代码//----EPD端口设置---------------------------------------------------
sbit CS = P3 ^ 2;
sbit DC = P3 ^ 3;
sbit BY = P3 ^ 4;
sbit RST = P3 ^ 5;
sbit SPI_SDA = P1 ^ 3;
sbit SPI_CLK = P1 ^ 5;
 
 |