标题: error C141: syntax error near 'sbit', expected 'hdata' [打印本页]

作者: 3627277    时间: 2022-11-11 20:36
标题: error C141: syntax error near 'sbit', expected 'hdata'
STC8实现定时器T060s倒计时代码求改

#include <STC8H.H>
void delay_ms(void)

/*74HC245*/
#define OUTPUT P0


sbit A0 = P2^2;
sbit A1 = P2^3;
sbit A2 = P2^4;

unsigned char second = 60;
unsigned char count = 200;
char code LED_7SEG_CAT[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
char code LED[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};   

void Timer0Init(void)               
{
        AUXR &= 0X7F;         
        TMOD &= 0XF0;         
        TL0 = 0XF0;                 
        TH0 = 0XD8;                 
        TF0 = 0;                 
        TR0 = 1;                 
}

void main(void)
{

        P0M0 = 0X00;
        P0M1 = 0X00;
        P2M0 = 0X00;
        P2M1 = 0XE3;
        EA = 1;         
        ET0 = 1;               

        Timer0Init();        
        while(1)
        {
                A0 = 1;
                A1 = 0;
                A2 = 0;
                OUTPUT = LED_7SEG_CAT[second/10];
                Delay_ms(5);
               
                A0 = 0;
                A1 = 0;
                A2 = 0;
                OUTPUT = LED_7SEG_CAT[second%10];
                Delay_ms(5);        
        }        
}

void Timer0() interrupt 1  
{
        count--;
        if(count == 0)
        {
                count = 200;
                second--;
                if(second == 0)
                {
                        second = 60;
                }
        }
}


STC8实现定时器T060s倒计时显示这个错误main.c(8): error C141: syntax error near 'sbit', expected 'hdata'
作者: 人中狼    时间: 2022-11-11 20:50
void delay_ms(void),末尾少了分号
作者: 豆子十三    时间: 2022-11-11 21:30
void delay_ms(void),这个后面加一个英文的分号

作者: 豆子十三    时间: 2022-11-11 21:32
错误C141:“sbit”附近的语法错误,应为“hdata”
作者: 快乐眼泪    时间: 2022-11-11 21:49
sbit上边的函数后没加分号
作者: coody_sz    时间: 2022-11-11 22:26
sbit后面的A0 A1 A2换个,名字看看。
作者: 3627277    时间: 2022-11-12 13:14
人中狼 发表于 2022-11-11 20:50
void delay_ms(void),末尾少了分号

加了分号后还是有错误
main.c(44): warning C206: 'Delay_ms': missing function-prototype                                            main.c(44): error C267: 'Delay_ms': requires ANSI-style prototype
作者: 3627277    时间: 2022-11-12 13:14
豆子十三 发表于 2022-11-11 21:30
void delay_ms(void),这个后面加一个英文的分号

加了分号后还是有错误
main.c(44): warning C206: 'Delay_ms': missing function-prototype                                            main.c(44): error C267: 'Delay_ms': requires ANSI-style prototype
作者: 豆子十三    时间: 2022-11-12 13:28
3627277 发表于 2022-11-12 13:14
加了分号后还是有错误
main.c(44): warning C206: 'Delay_ms': missing function-prototype             ...

前面声明了延时函数,但是就没有写这个函数

作者: 188610329    时间: 2022-11-12 14:01
你 void delay_ms(void) 声明的无参函数,

调用  Delay_ms(5);  却传了参。 不报错才奇怪了。
作者: 3627277    时间: 2022-11-12 14:25
188610329 发表于 2022-11-12 14:01
你 void delay_ms(void) 声明的无参函数,

调用  Delay_ms(5);  却传了参。 不报错才奇怪了。

那要怎么改呢T_T
作者: 3627277    时间: 2022-11-12 14:27
豆子十三 发表于 2022-11-12 13:28
前面声明了延时函数,但是就没有写这个函数

要怎么改才对呀
作者: angmall    时间: 2022-11-12 14:42
3627277 发表于 2022-11-12 14:27
要怎么改才对呀

给你改了一下试试。

  1. #include <STC8H.H>

  2. void Delay_ms(unsigned int ms);

  3. /*74HC245*/
  4. #define OUTPUT P0


  5. sbit A0 = P2^2;
  6. sbit A1 = P2^3;
  7. sbit A2 = P2^4;

  8. unsigned char second = 60;
  9. unsigned char count = 200;
  10. char code LED_7SEG_CAT[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
  11. char code LED[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};   

  12. void Delay_ms(unsigned int ms)                //@12.000MHz
  13. {
  14.         unsigned char i, j;
  15.     do
  16.         {
  17.                 i = 16;
  18.                 j = 147;
  19.                 do
  20.                 {
  21.                         while (--j);
  22.                 } while (--i);
  23.         } while (--ms);
  24. }


  25. void Timer0Init(void)               
  26. {
  27.         AUXR &= 0X7F;         
  28.         TMOD &= 0XF0;         
  29.         TL0 = 0XF0;                 
  30.         TH0 = 0XD8;                 
  31.         TF0 = 0;                 
  32.         TR0 = 1;                 
  33. }

  34. void main(void)
  35. {

  36.         P0M0 = 0X00;
  37.         P0M1 = 0X00;
  38.         P2M0 = 0X00;
  39.         P2M1 = 0XE3;
  40.         EA = 1;         
  41.         ET0 = 1;               

  42.         Timer0Init();        
  43.         while(1)
  44.         {
  45.                 A0 = 1;
  46.                 A1 = 0;
  47.                 A2 = 0;
  48.                 OUTPUT = LED_7SEG_CAT[second/10];
  49.                 Delay_ms(5);
  50.                
  51.                 A0 = 0;
  52.                 A1 = 0;
  53.                 A2 = 0;
  54.                 OUTPUT = LED_7SEG_CAT[second%10];
  55.                 Delay_ms(5);        
  56.         }        
  57. }

  58. void Timer0() interrupt 1  
  59. {
  60.         count--;
  61.         if(count == 0)
  62.         {
  63.                 count = 200;
  64.                 second--;
  65.                 if(second == 0)
  66.                 {
  67.                         second = 60;
  68.                 }
  69.         }
  70. }

复制代码

作者: Longan.Wang    时间: 2022-11-14 14:15
angmall 发表于 2022-11-12 14:42
给你改了一下试试。

正确!
原来不仅预声明函数没有传入参数,而且开头还是d,
调用的时候传入了参数,而且开头还是D。
所以编译器就认为调用的函数没有预声明。
作者: dyx811    时间: 2022-11-14 14:57
声明错误!
函数调用错误!
语法错误!
作者: 3627277    时间: 2022-11-15 13:01
angmall 发表于 2022-11-12 14:42
给你改了一下试试。

谢谢你,编译没有错误了,但是灯不亮T_T
作者: lkc8210    时间: 2022-11-15 13:28
  1. void main()
  2. {
  3.         A0 = 0;
  4.         A1 = 0;
  5.         A2 = 0;
  6.         OUTPUT = 0xC0;
  7.         while(1);
  8. }
复制代码


如果这样都不亮,就要检查接线了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1