• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

菜鸟C,想请教下这段程序问题出在哪里,帮我指出下 谢谢

小弟是个C菜鸟,自己写了段程序,编译也没有问题,但是实际我用示波器去测试的时候,发现我的12位数据,原本全部要发12个1的,但是其中却参杂了1111 0000 1111 变成这样的,自己琢磨了,觉得是不是我的位定义错了,所以想请C语言高手帮忙看下,指点下,小弟不胜感激,邮箱770510477@qq。com
/*******************************************************************************/
//*版权信息:
//*文 件 名:UCS5603-V1.0
//*当前版本:V1.0
//*晶震频率:24MHZ(内部时钟)       
        
/********************************************************************************/
#include 			//MCU头文件
#include "intrins.h"			//包含nop指令头文件
#define nop  _nop_();			//宏定义

/********************************定义控制端口************************************/
sbit DO=P2^4;				//定义信号输出DO

/**********************************定义变量**************************************/
unsigned int IC=5;			//控制UCS5603个数
unsigned int LED_PX;			//像素点数
unsigned int PWM=4095;		        //UCS5603灰度 
unsigned int Rda,Gda,Bda;              //R、G、B灰度数据
unsigned int bdata LED_data;           //可位操作的数据发送暂存变量声明
sbit bit0=LED_data^0;			//被发送的数据各位定义
sbit bit1=LED_data^1;
sbit bit2=LED_data^2;
sbit bit3=LED_data^3;
sbit bit4=LED_data^4;
sbit bit5=LED_data^5;
sbit bit6=LED_data^6;
sbit bit7=LED_data^7;
sbit bit8=LED_data^8;
sbit bit9=LED_data^9;
sbit bit10=LED_data^10;
sbit bit11=LED_data^11;
bit flag=0;                            //定义一个标志位

/*************************************延时函数*************************************/
void delay(unsigned int n)             //n=1,延时500us
{
	unsigned int i;
	while(n--) 
		for(i=0;i<860;i++);
}
/*************************************延时4us函数*************************************/
void delay_us(unsigned int ticks)
{   	  
  for(;ticks!=0;ticks--)
	{
	    _nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
	}	
}
/************************发送0码函数,H电平360ns+900,**********************/
void send_data_0()   
{
	 DO=0xff;
	 nop;
	 nop;
	 nop;
	 nop;
	 nop;
	 nop;
	 nop;	   
	 DO=0x00; 
	 nop;
	 nop;
	 nop;
	 nop;nop;nop;nop;nop;nop;nop;nop;nop;
}

/************************发送1码函数,H电平700ns+550**********************/
void send_data_1()          
{
	 DO=0xff;
	 nop;
	 nop;
	 nop;
	 nop;
	 nop;
	 nop; 
	 nop;nop;nop;nop;nop;
	 DO=0x00;
	 nop;
	 nop;
	 nop;
	 nop;
	 nop;
	 nop;
	 nop;
}

/**************************发送1个字节数据,高位先发*******************************/
void send_data(unsigned int DATA)	
{
	LED_data=DATA;                         
	if(bit11)  send_data_1();  else send_data_0();
	if(bit10)  send_data_1();  else send_data_0();
	if(bit9)   send_data_1();  else send_data_0();
	if(bit8)   send_data_1();  else send_data_0();
	if(bit7)   send_data_1();  else send_data_0();
	if(bit6)   send_data_1();  else send_data_0();
	if(bit5)   send_data_1();  else send_data_0();
	if(bit4)   send_data_1();  else send_data_0();
	if(bit3)   send_data_1();  else send_data_0();
	if(bit2)   send_data_1();  else send_data_0();
	if(bit1)   send_data_1();  else send_data_0();
	if(bit0)   send_data_1();  else send_data_0(); 
}

/******************************发送W时长数据*************************************/
void W_Bit(void)
{
	DO=0x00;
	delay_us(18);	  //15us
}

/*********************************发送工作码数据**************************************/
void Wokr_Bit(void)
{
    send_data(0xfff);
	send_data(0xfff);
	send_data(0xfff);
	send_data(0xfff);
	send_data(0x01);
	W_Bit();
	send_data(0xfff);//电流设定值=21ma
}
/*********************************发送rest-bit数据**************************************/
void rest_Bit(void)
{
	DO=0x00;
	delay(8);	  //1500us
}
/*********************************发送1帧数据**************************************/
void date_5603(void)
{
    unsigned char i;
    rest_Bit();
	Wokr_Bit();
	for(i=0;i<10;i++)
	{
	  send_data(0xfff);
	  send_data(0);
	  send_data(0);
    }
}
/*********************************main**************************************/
void main (void)
{
 while(1)
  {
   date_5603();    
  }
}

/*==================================结束=============================================*/ 
全部回复(5)
正序查看
倒序查看
gxg1122
LV.10
2
2017-11-01 13:00
楼主添加点注释,这样看的很费劲。
0
回复
gxg1122
LV.10
3
2017-11-01 13:08
你这程序读完后就是一直发送0xFFF------0x000----0x000----0xfff----0x000----0x000这样的循环,每次发送的数据都是12bit即3个字节。  你在看看你捕捉的对不对。
0
回复
松松man
LV.1
4
2017-11-01 15:41
@gxg1122
你这程序读完后就是一直发送0xFFF------0x000----0x000----0xfff----0x000----0x000这样的循环,每次发送的数据都是12bit即3个字节。 你在看看你捕捉的对不对。
不对的,扑抓出来的不是这样
0
回复
松松man
LV.1
5
2017-11-01 15:50
@gxg1122
你这程序读完后就是一直发送0xFFF------0x000----0x000----0xfff----0x000----0x000这样的循环,每次发送的数据都是12bit即3个字节。 你在看看你捕捉的对不对。
我的12bit  这样定义的对吗,前面定义了个变量 bdate
0
回复
松松man
LV.1
6
2017-11-01 15:50
@gxg1122
楼主添加点注释,这样看的很费劲。
好的 
0
回复