找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3954|回复: 7
打印 上一主题 下一主题
收起左侧

单片机程序报错error c129 missing';' before'milsec'

[复制链接]
跳转到指定楼层
楼主
ID:537981 发表于 2019-5-19 22:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家帮我看看下面这个程序哪里出现问题了?为什么一直报错error c129 missing';' before'milsec'

单片机源程序如下:
#define uchar unsigned char
#define uint unsigned int
#include <reg52.h>
#define FOSC 18432000L
#define T1MS 1536  //1ms 定时器

sbit relay =P3^7;          // 继电器输出
sbit touch =P1^0;         // 触摸检测

ut milsec;
uc sec,temp;


void delay(uc i)
{
       while(i)i--;
}

void InitUart (void);
void InintTimer0 (void);
void InitADC (void);
uc GetADCResult (uc ch);

void main(0)
{
       bitchanal;
       utsave_times,light,voice;
       AUXR= 0×00;
       InintTimer0();
       InitADC();
       sec= 0;
       relay= 0;
       while(1)   //进入主程序循环状态,一直在这个while循环里检测
              {
                    if(chanal)
                     {
                           light+=GetADCResult(2);      //光照强度检测
                            save_times++;
                            }
       else
              {
                     voice+=GetADCResult(6);        //声音分贝检測
              }
       chanal= -chanal;
       if(save_times== 256).           //消抖
              {
                     save_times= -0;
                     light/= 256:
                     voice/= 256;
              }
       if((light>200) || (voice>50) || (touch==0)) relay = l;
       if(sec>=20) relay = 0;            //延时输出20秒后灭灯
       delay(200);
       delay(200);
       }
}

void InirUart(void)
{
SCON = 0×5a;            //8个数据位,无校验
TMOD = 0×20;           //8位自动装载
THI = TL1 = -(FOSC/12/32/BAUD);      //设置波特率
TR1 = 1;                   //使能定时1
  }

void InintTimer0(void)
{
TMOD | = 0×01;
  TL0= T1MS;
  TH0= T1MS >> 8;
  TR0= 1;
  ET0= 1;
  EA= 1;
  }

Void InitADC(void)
{
P1 = P1M0 = 0×ff,
P1M1 = 0×00;
ADC _DATA = 0;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
delay(2);
}

uc GetADCResult(uc ch)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch |ADC_START:
_nop_():
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR & ADC_FLAG);          //Wait complete flag
ADC_CONTR &= -ADC_FLAG;
return ADC_DATA;
}

void tm0_isr() interrupt 1 using 1
{
TL0 = T1MS;
TH0 = T1MS >> 8;
milsec++;
if (milsec == 1000)
{
if (sec<20) sec++;
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:330198 发表于 2019-5-20 09:33 | 只看该作者
你这个错误可不止这一个,自己再好好看看吧
回复

使用道具 举报

板凳
ID:541189 发表于 2019-5-20 12:23 来自手机 | 只看该作者
怎么看到好多冒号啊
回复

使用道具 举报

地板
ID:511890 发表于 2019-5-20 14:50 | 只看该作者
两种改法:1、ut milsec;改成uint milsec;  uc sec,temp;改成uchar sec,temp;  
回复

使用道具 举报

5#
ID:511890 发表于 2019-5-20 14:51 | 只看该作者
2、#define uchar unsigned char改成#define uc unsigned char    #define uint unsigned int改成#define ut unsigned int
回复

使用道具 举报

6#
ID:213173 发表于 2019-5-20 15:55 | 只看该作者
楼主的程序需要用英文重新抄一遍,包含太多中文字符,不可能通过编译。
回复

使用道具 举报

7#
ID:155507 发表于 2019-5-20 15:59 | 只看该作者
给你改了,对比一下就知道哪里错了。

  1. #include <reg52.h>
  2. #define uc unsigned char
  3. #define ut unsigned int

  4. #define FOSC 18432000L
  5. #define T1MS 1536  //1ms 定时器
  6. sfr P1M1 = 0x91;    //PxM1.n,PxM0.n     =00--->Standard,    01--->push-pull
  7. sfr P1M0 = 0x92;    //                  =10--->pure input,  11--->open drain
  8. sfr  AUXR       =   0x8e;       //辅助寄存器                              

  9. sfr ADC_CONTR   =   0xBC;           //ADC控制寄存器
  10. sfr ADC_RES     =   0xBD;           //ADC高8位结果
  11. sfr ADC_LOW2    =   0xBE;           //ADC低2位结果
  12. sfr P1ASF       =   0x9D;           //P1口第2功能控制寄存器
  13. #define ADC_POWER   0x80            //ADC电源控制位
  14. #define ADC_FLAG    0x10            //ADC完成标志
  15. #define ADC_START   0x08            //ADC起始控制位
  16. #define ADC_SPEEDLL 0x00            //540个时钟
  17. #define ADC_SPEEDL  0x20            //360个时钟
  18. #define ADC_SPEEDH  0x40            //180个时钟
  19. #define ADC_SPEEDHH 0x60            //90个时钟

  20. sbit relay =P3^7;          // 继电器输出
  21. sbit touch =P1^0;         // 触摸检测

  22. ut milsec;
  23. uc sec, temp;


  24. void delay(uc i)
  25. {
  26.         while(i)i--;
  27. }

  28. void InitUart (void);
  29. void InintTimer0 (void);
  30. void InitADC (void);
  31. uc GetADCResult (uc ch);

  32. void main(0)
  33. {
  34.         bit chanal;
  35.         ut save_times, light, voice;
  36.         AUXR= 0x00;
  37.         InintTimer0();
  38.         InitADC();
  39.         sec= 0;
  40.         relay= 0;
  41.         while(1)   //进入主程序循环状态,一直在这个while循环里检测
  42.         {
  43.                 if(chanal)
  44.                 {
  45.                         light+=GetADCResult(2);      //光照强度检测
  46.                         save_times++;
  47.                 }
  48.                 else
  49.                 {
  50.                         voice+=GetADCResult(6);        //声音分贝检測
  51.                 }
  52.                 chanal= -chanal;
  53.                 if(save_times== 256).           //消抖
  54.                 {
  55.                         save_times= -0;
  56.                         light/= 256:
  57.                         voice/= 256;
  58.                 }
  59.                 if((light>200) || (voice>50) || (touch==0)) relay = l;
  60.                 if(sec>=20) relay = 0;            //延时输出20秒后灭灯
  61.                 delay(200);
  62.                 delay(200);
  63.         }
  64. }

  65. void InirUart(void)
  66. {
  67.         SCON = 0x5a;            //8个数据位,无校验
  68.         TMOD = 0x20;           //8位自动装载
  69.         THI = TL1 = -(FOSC/12/32/BAUD);      //设置波特率
  70.         TR1 = 1;                   //使能定时1
  71. }

  72. void InintTimer0(void)
  73. {
  74.         TMOD | = 0x01;
  75.         TL0= T1MS;
  76.         TH0= T1MS >> 8;
  77.         TR0= 1;
  78.         ET0= 1;
  79.         EA= 1;
  80. }

  81. void InitADC(void)
  82. {
  83.         P1 = P1M0 = 0xff,
  84.         P1M1 = 0x00;
  85.         P1ASF = 0xff;                   //设置P1口为AD口
  86.         ADC_RES = 0;
  87.         ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
  88.         delay(2);
  89. }

  90. uc GetADCResult(uc ch)
  91. {
  92.         ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch |ADC_START:
  93.         _nop_():
  94.         _nop_();
  95.         _nop_();
  96.         _nop_();
  97.         while(!(ADC_CONTR & ADC_FLAG);          //Wait complete flag
  98.         ADC_CONTR &= -ADC_FLAG;
  99.         return ADC_RES;
  100. }

  101. void tm0_isr() interrupt 1 using 1
  102. {
  103.         TL0 = T1MS;
  104.         TH0 = T1MS >> 8;
  105.         milsec++;
  106.         if (milsec == 1000)
  107.         {
  108.                 if (sec<20) sec++;
  109.         }
  110. }
复制代码
回复

使用道具 举报

8#
ID:530977 发表于 2019-5-21 20:55 | 只看该作者
ut,uc就已经是错的了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表