微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > TCS 230颜色传感器,程序调试求助

TCS 230颜色传感器,程序调试求助

时间:10-02 整理:3721RD 点击:
1 目的 :使用TCS230传感器采集颜色数据,并通过串口发送出来
2 现象: (1)调试没有错误,没有警告 μ2.0
              (2)串口显示数据,但是不正常数据,都是0,即使是发送常数也是错误的。
3 求助内容:请高手帮忙调试一下代码,不知道哪里错了,也不知道该怎么搞了。
4 硬件 :STC12C4052AD 的20脚单片机 12M晶振
5 代码如下

  1. #include<STC12C2052AD.H>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. //接线方式       
  5.         sbit oe=P1^4;   
  6.         sbit s0=P1^0;
  7.         sbit s1=P1^1;
  8.         sbit s2=P1^2;         
  9.         sbit s3=P1^3;
  10.         //OUT 引脚接INT0
  11. //变量定义
  12.         uint yanse; //保存定时器时间内的中断总数
  13.         uint count;        //中断次数累加
  14.         uint green;        //颜色值



  15. /*********************************************************************************************
  16. 函数名:计时器中断程序初始化
  17. 调  用:t0_init();
  18. 参  数:无
  19. 返回值:无
  20. 结  果:
  21. 备  注:
  22. /**********************************************************************************************/

  23. void t0_init()
  24. {
  25.         TMOD=0x15;        //T1计数 T0定时 工作方式1
  26.         TH0=0x00;        //计数初值
  27.         TL0=0x00;
  28.         TH1=0xE0;
  29.         TL1=0x00;        //11。0592M 晶振10ms
  30.         EA=1;            //开中断
  31.         ET0=1;        
  32.         TR0=1;           //启动
  33.         TR1=1;
  34. }



  35. /*********************************************************************************************
  36. 函数名:外部中断程序
  37. 调  用:
  38. 参  数:无
  39. 返回值:无
  40. 结  果:
  41. 备  注:当有外部中断时,频数计数器加1
  42. /**********************************************************************************************/
  43. void exter0() interrupt 0
  44. {
  45. count++;
  46. }

  47. /*********************************************************************************************
  48. 函数名:定时器中断程序
  49. 调  用:无;
  50. 参  数:无
  51. 返回值:无
  52. 结  果:
  53. 备  注:当定时器中断时,频数计数器数值保存出来,赋值给yanse,计数器清零
  54. /**********************************************************************************************/
  55. void timer0() interrupt 1
  56. {
  57.         yanse=count;    //提取这段时间内 TCS230 的输出脉冲数
  58.         count=0;
  59. //定时器计数器重赋初值
  60.         TH1=0xE0;
  61.         TL1=0x00; //
  62.         TL0=0x00;//计数器清零
  63.         TH0=0x00;//计数器清零
  64.         TR0=1;   //打开定时器
  65.         TR1=1;   //打开计数器
  66. }
  67. /**********************************************************************************************
  68. 函数名:毫秒级CPU延时函数
  69. 调  用:DELAY_MS (?);
  70. 参  数:1~65535(参数不可为0)
  71. 返回值:无
  72. 结  果:占用CPU方式延时与参数数值相同的毫秒时间
  73. 备  注:应用于1T单片机时i<600,应用于12T单片机时i<125
  74. /*********************************************************************************************/
  75. void delay (unsigned int a){
  76.         unsigned int i;
  77.         while( a-- != 0){
  78.                 for(i = 0; i < 600; i++);
  79.         }
  80. }
  81. /*********************************************************************************************/

  82. /*********************************************************************************************
  83. 函数名:UART串口初始化函数
  84. 调  用:UART_init();
  85. 参  数:无
  86. 返回值:无
  87. 结  果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
  88. 备  注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]
  89. /**********************************************************************************************/
  90. void UART_init (void){
  91.         //EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
  92.         //ES = 1; //允许UART串口的中断

  93.         TMOD = 0x20;        //定时器T/C1工作方式2
  94.         SCON = 0x50;        //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
  95.         TH1 = 0xF3;        //定时器初值高8位设置
  96.         TL1 = 0xF3;        //定时器初值低8位设置
  97.         PCON = 0x80;        //波特率倍频(屏蔽本句波特率为2400)
  98.         TR1 = 1;        //定时器启动   
  99. }
  100. /**********************************************************************************************/

  101. /*********************************************************************************************
  102. 函数名:主函数
  103. 调  用:无
  104. 参  数:无
  105. 返回值:无
  106. 结  果:
  107. 备  注:计时初始化,打开绿色滤波器,开始颜色采集,中断计数,延时30ms,保证得到结果前的中断次数,获取当前颜色,初始化串口,发送出来。
  108. /**********************************************************************************************/

  109. void main(){
  110.        
  111.         while(1){
  112.                 t0_init();//初始化定时器
  113.                
  114.                 s2=1;s3=1;                             //选择滤波器为绿色
  115.                 oe=0;                                //打开颜色采集
  116.                 delay(30);                        //延时30ms,充分保证外部中断次数
  117.                 green=yanse;                        //检测当前颜色
  118.                 UART_init();
  119.                 SBUF = green;//通过串口发送出来
  120.                 delay(20);
  121.                 SBUF=987;                        //查看串口发送
  122.        
  123.                
  124.         }

  125.        
  126. }

复制代码



已退回10积分

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top