社区闲人 发表于 2024-12-24 19:42:12

zwf33335 发表于 2024-12-24 17:55
版主你好: 我用STC8H1K28做温度测量,采用MAX6675测温芯片,我的测温程序在STC15W4K32S4上运行正常,但 ...

建议有IO口软件模拟SPI通讯,代码简单可靠,移植方便。

社区闲人 发表于 2024-12-24 19:55:03

uint16_t MAX6675(unsigned char channel)
{
    uint16_t temp = 0;
    char i;
    CHANGE_CS_OFF(channel);//切换CS端口为0
    for(i=0;i<=15;i++)
    {
      SCLK_P21 = 1;//read data SO
      Delay(100);
      temp <<= 1;
      if(DIN_P22)
      temp |= 0x0001;
      SCLK_P21 = 0;
      Delay(100);
    }
    CHANGE_CS_ON();
    temp >>= 3;//右移3位,D0,D1,D3不要
    return temp;
}

社区闲人 发表于 2024-12-24 20:10:07

zwf33335 发表于 2024-12-24 17:55
版主你好: 我用STC8H1K28做温度测量,采用MAX6675测温芯片,我的测温程序在STC15W4K32S4上运行正常,但 ...

同频率下,STC8H1K28比STC15W4K32S4运行速度快了30%,要适当增加延时。

zwf33335 发表于 2024-12-25 09:38:09

社区闲人 发表于 2024-12-24 20:10
同频率下,STC8H1K28比STC15W4K32S4运行速度快了30%,要适当增加延时。

谢谢你的提示,我调整时间弄好了,但我在调试过程中,MAX667的延时需要缩短时间,而数码管驱74HC595的函数反而增加了很多时间才能正常工作,不知道和原因啊?

社区闲人 发表于 2024-12-25 09:55:49

驱动74HC595的函数不需要延时:
void Send_595(u8 dat)
{
        u8 i;
        u8 tmp = dat;
        for(i=0;i<8;i++)
        {
                tmp <<= 1;
                P_595_ser = CY;
                _nop_();
                P_595_srclk = 1;
                _nop_();
                P_595_srclk = 0;
        }
}

void Display_595(void)
{
        Send_595(w_led_code);
        Send_595(D_led_code]);
        P_595_rclk = 1;
        display_Point++;
        P_595_rclk = 0;
                       
        display_Point &= 0x07;
//        if(display_Point > 7)
//        {
//                display_Point = 0;
//        }
}

zwf33335 发表于 2024-12-26 02:23:29

社区闲人 发表于 2024-12-25 09:55
驱动74HC595的函数不需要延时:
void Send_595(u8 dat)
{


按照您的指导,调试好了,太感谢了,我弄了好几天都没弄好{:baoquan:}

zwf33335 发表于 2025-1-3 20:10:59

社区闲人 发表于 2024-12-25 09:55
驱动74HC595的函数不需要延时:
void Send_595(u8 dat)
{


建议有IO口软件模拟SPI通讯,代码简单可靠,移植方便。

这个IO口软件模拟SPI通讯,是个软件吗?老师哪里有啊
页: 1 [2]
查看完整版本: 10个MAX6675怎么做