This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
看了TVL5638的DATAsheet,按照上面指导编了程序,用的是C8051F120单片机,没用SPI口,直接用I/0口输出数据,SCLK是用程序控制的,感觉程序没有问题,也注意了时序问题,但是TLV就是不工作,不知道为什么,跪求解答啊!!!急死了,在做项目,时间很紧,有哪位好心人解答一下!(有时候突然它又工作了,不懂为什么)
#include <C8051F120.h> // SFR declarations #define SYSCLK 24500000 // Internal oscillator frequency in Hz unsigned long int tlv_ctrl=0xD000; unsigned long int tlv_data=0xCBB8; sbit tlv_cs = P2^0; sbit tlv_din = P2^1; sbit tlv_clk = P2^2; void Watchdog_Init (void); void Oscillator_Init (void); void Port_Init (void); void Init_Device (void); void tlv_input (unsigned long int counts); void delay(unsigned int i); void main (void) { tlv_cs=1; Init_Device (); // Initializes hardware peripherals tlv_input (tlv_ctrl); delay(20); tlv_input (tlv_data); while(1); } void Watchdog_Init (void) { unsigned char SFRPAGE_save = SFRPAGE; // Save the current SFRPAGE SFRPAGE = CONFIG_PAGE; // Switch to the necessary SFRPAGE WDTCN = 0xDE; // Disable the Watchdog Timer WDTCN = 0xAD; SFRPAGE = SFRPAGE_save; // Restore the SFRPAGE } void Oscillator_Init (void) { unsigned char SFRPAGE_save = SFRPAGE; // Save the current SFRPAGE SFRPAGE = CONFIG_PAGE; // Switch to the necessary SFRPAGE OSCICN = 0x83; // Set the internal oscillator to // 24.5 MHz SFRPAGE = SFRPAGE_save; // Restore the SFRPAGE } void PORT_Init (void) { unsigned char SFRPAGE_save = SFRPAGE; // Save the current SFRPAGE SFRPAGE = CONFIG_PAGE; // Switch to the necessary SFRPAGE XBR2=0x40; P2MDOUT = 0xff; // Make SCK, MOSI, and NSS push-pull SFRPAGE = SFRPAGE_save; // Restore the SFRPAGE } void Init_Device (void) { Watchdog_Init (); // Disable the Watchdog Timer first Oscillator_Init (); Port_Init (); } void delay(unsigned int i) { while(i--); } void tlv_input (unsigned long int counts) { tlv_cs=0;delay(1); if((counts&0x8000)>>15==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x4000)>>14==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x2000)>>13==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x1000)>>12==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x0800)>>11==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x0400)>>10==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x0200)>>9==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x0100)>>8==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x0080)>>7==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x0040)>>6==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x0020)>>5==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x0010)>>4==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x0008)>>3==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x0004)>>2==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if((counts&0x0002)>>1==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } if(counts&0x0001==0) { tlv_clk=1;delay(1); tlv_din=0;delay(1); tlv_clk=0; } else { tlv_clk=1;delay(1); tlv_din=1;delay(1); tlv_clk=0; } tlv_clk=1;delay(1); tlv_cs=1;delay(1); }