TCS 230颜色传感器,程序调试求助
时间:10-02
整理:3721RD
点击:
1 目的 :使用TCS230传感器采集颜色数据,并通过串口发送出来
2 现象: (1)调试没有错误,没有警告 μ2.0
(2)串口显示数据,但是不正常数据,都是0,即使是发送常数也是错误的。
3 求助内容:请高手帮忙调试一下代码,不知道哪里错了,也不知道该怎么搞了。
4 硬件 :STC12C4052AD 的20脚单片机 12M晶振
5 代码如下
2 现象: (1)调试没有错误,没有警告 μ2.0
(2)串口显示数据,但是不正常数据,都是0,即使是发送常数也是错误的。
3 求助内容:请高手帮忙调试一下代码,不知道哪里错了,也不知道该怎么搞了。
4 硬件 :STC12C4052AD 的20脚单片机 12M晶振
5 代码如下
- #include<STC12C2052AD.H>
- #define uchar unsigned char
- #define uint unsigned int
- //接线方式
- sbit oe=P1^4;
- sbit s0=P1^0;
- sbit s1=P1^1;
- sbit s2=P1^2;
- sbit s3=P1^3;
- //OUT 引脚接INT0
- //变量定义
- uint yanse; //保存定时器时间内的中断总数
- uint count; //中断次数累加
- uint green; //颜色值
- /*********************************************************************************************
- 函数名:计时器中断程序初始化
- 调 用:t0_init();
- 参 数:无
- 返回值:无
- 结 果:
- 备 注:
- /**********************************************************************************************/
- void t0_init()
- {
- TMOD=0x15; //T1计数 T0定时 工作方式1
- TH0=0x00; //计数初值
- TL0=0x00;
- TH1=0xE0;
- TL1=0x00; //11。0592M 晶振10ms
- EA=1; //开中断
- ET0=1;
- TR0=1; //启动
- TR1=1;
- }
- /*********************************************************************************************
- 函数名:外部中断程序
- 调 用:
- 参 数:无
- 返回值:无
- 结 果:
- 备 注:当有外部中断时,频数计数器加1
- /**********************************************************************************************/
- void exter0() interrupt 0
- {
- count++;
- }
- /*********************************************************************************************
- 函数名:定时器中断程序
- 调 用:无;
- 参 数:无
- 返回值:无
- 结 果:
- 备 注:当定时器中断时,频数计数器数值保存出来,赋值给yanse,计数器清零
- /**********************************************************************************************/
- void timer0() interrupt 1
- {
- yanse=count; //提取这段时间内 TCS230 的输出脉冲数
- count=0;
- //定时器计数器重赋初值
- TH1=0xE0;
- TL1=0x00; //
- TL0=0x00;//计数器清零
- TH0=0x00;//计数器清零
- TR0=1; //打开定时器
- TR1=1; //打开计数器
- }
- /**********************************************************************************************
- 函数名:毫秒级CPU延时函数
- 调 用:DELAY_MS (?);
- 参 数:1~65535(参数不可为0)
- 返回值:无
- 结 果:占用CPU方式延时与参数数值相同的毫秒时间
- 备 注:应用于1T单片机时i<600,应用于12T单片机时i<125
- /*********************************************************************************************/
- void delay (unsigned int a){
- unsigned int i;
- while( a-- != 0){
- for(i = 0; i < 600; i++);
- }
- }
- /*********************************************************************************************/
- /*********************************************************************************************
- 函数名:UART串口初始化函数
- 调 用:UART_init();
- 参 数:无
- 返回值:无
- 结 果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
- 备 注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]
- /**********************************************************************************************/
- void UART_init (void){
- //EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
- //ES = 1; //允许UART串口的中断
- TMOD = 0x20; //定时器T/C1工作方式2
- SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
- TH1 = 0xF3; //定时器初值高8位设置
- TL1 = 0xF3; //定时器初值低8位设置
- PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
- TR1 = 1; //定时器启动
- }
- /**********************************************************************************************/
- /*********************************************************************************************
- 函数名:主函数
- 调 用:无
- 参 数:无
- 返回值:无
- 结 果:
- 备 注:计时初始化,打开绿色滤波器,开始颜色采集,中断计数,延时30ms,保证得到结果前的中断次数,获取当前颜色,初始化串口,发送出来。
- /**********************************************************************************************/
- void main(){
-
- while(1){
- t0_init();//初始化定时器
-
- s2=1;s3=1; //选择滤波器为绿色
- oe=0; //打开颜色采集
- delay(30); //延时30ms,充分保证外部中断次数
- green=yanse; //检测当前颜色
- UART_init();
- SBUF = green;//通过串口发送出来
- delay(20);
- SBUF=987; //查看串口发送
-
-
- }
-
- }
已退回10积分
