找回密码
 立即注册
楼主: 电子D***

冲哥32位8051视频教程疑问解答贴

 火.. [复制链接]

该用户从未签到

0

主题

1

回帖

16

积分

新手上路

积分
16
发表于 2023-10-6 01:08:48 | 显示全部楼层
定时器内部能使用main函数定义的变量吗?
调用其他地方定义的函数也报错。
截图202310060106218966.jpg
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    5 天前
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2128

    积分

    荣誉版主

    积分
    2128
    发表于 2023-10-6 07:50:22 | 显示全部楼层
    小狐狸 发表于 2023-10-6 01:08
    定时器内部能使用main函数定义的变量吗?
    调用其他地方定义的函数也报错。 ...

    肯定不能调用啊,变量定义放到main 函数前面。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    4

    主题

    13

    回帖

    88

    积分

    注册会员

    积分
    88
    发表于 2023-10-14 08:39:11 | 显示全部楼层
    void main()                                        //程序开始运行的入口
    {
      
            sys_init();                                //USB功能+IO口初始化
            usb_init();                                //usb库初始化
    //        EUSB = 1;
      Timer0_Init();        //定时器0初始化
            ADC_Init();
            EA = 1;                                        //CPU开放中断,打开总中断。
    //
            delay_ms(2000);
            P40 = 0;

           
            while(1)                //死循环
            {
                printf("Flag%d",1);
                    if( DeviceState != DEVSTATE_CONFIGURED )
            continue;
                    if( bUsbOutReady )                                                               
                    {
                           
    //                        USB_SendData(UsbOutBuffer,OutNumber);
                             usb_OUT_done();
                           
                    }
        printf("Flag%d",1);
                    if( TIM_10MS_Flag==1 )                                                                        //如果10ms到了
                    {
                            TIM_10MS_Flag = 0;
                     
          Time++;                        //清空标志位
                if(clock_time>=1000)
           {clock_time=0;
                              Clock_Sec++;
                             }
                            if(Clock_Sec>=60)
                            {  Clock_Sec=0;
                                     Clock_minute++;
          }
                            if(Clock_minute>=60)
                                    {  Clock_minute=0;
                                             Clock_hour++;
                                    }
                            if(Clock_hour>=24)
                                    {
                                            Clock_hour=0;
                                    }
                                   
                   
                    }
                   
                     switch(Flag)
          {
                                    case 0:        for(i=0;i<8;i++){delay_ms(200);P6=~(0X01<<i);}break;
                              case 1: for(i=0;i<8;i++){delay_ms(200);P6=~(0X80>>i);}break;
                              case 2: DongHua_Show(1,100);DongHua_Show(2,100);DongHua_Show(3,100);DongHua_Show(4,100);break;
                                    case 3: Clock_InitShow(Clock_hour,Clock_minute,Clock_Sec);break;
                              case 4: BEEP=0; break;
                                    case 5: BEEP=1; break;
                            }               
                           
            }
    }


    void Timer0_Isr(void) interrupt 1
    {
            static timcount = 0;
      if((Flag==2)||(Flag==3))SEG_LED_Show();
             timcount++;                                //1ms+1
             clock_time++;
            if( timcount>=10 )                //如果这个变量大于等于10,10ms计数到达
            {
                    timcount = 0;
                    TIM_10MS_Flag = 1;        //10ms时间到了       
            }
           
    }
    void Timer1_Isr(void) interrupt 3
    {  static u16 Timer1;
              Timer1++;
            if(Timer1>=2000)
            { Timer1=0;
    //   Flag=ADC_KeyRead(ADC_Read(0));
      // printf("Flag%d",ADC_Read(0));
         P60=~P60;
            }
    }

    void sys_init()                //函数定义
    {
        WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
        EAXFR = 1; //扩展寄存器(XFR)访问使能
        CKCON = 0; //提高访问XRAM速度

              P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
        P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
        P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
        P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
        P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
        P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
        P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
        P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
           
        P3M0 = 0x00;
        P3M1 = 0x00;

        P3M0 &= ~0x03;
        P3M1 |= 0x03;

              USBCON = 0X00;                                        //usb初始化
              USBCLK = 0X00;
              IRC48MCR = 0X00;
              delay_ms(10);

        //设置USB使用的时钟源
        IRC48MCR = 0x80;    //使能内部48M高速IRC
        while (!(IRC48MCR & 0x01));  //等待时钟稳定

        USBCLK = 0x00;        //使用CDC功能需要使用这两行,HID功能禁用这两行。
        USBCON = 0x90;

           


    }


    void delay_ms(u16 ms)        //unsigned int
    {
            u16 i;
            do
            {
                    i = MAIN_Fosc/6000;
                    while(--i);
            }while(--ms);
    }
    void Timer0_Init(void)                //1毫秒@24.000MHz
    {
            AUXR |= 0xc1;                        //定时器时钟1T模式
            TMOD = 0x00;                        //设置定时器模式
            TL0 = 0x40;                                //设置定时初始值
            TH0 = 0xA2;                                //设置定时初始值
            TF0 = 0;                                //清除TF0标志
            TR0 = 1;                                //定时
            ET0 = 1;                                //使能定时器0中断

    //        IP = 0X02;                                //设置为最高优先级
    //        IPH = 0X02;

            TL1 = 0x40;                                //设置定时初始值
            TH1 = 0xA2;                                //设置定时初始值
            TF1 = 0;                                //清除TF1标志
            TR1 = 1;                                //定时器1开始计时
            ET1 = 1;                                //使能定时器1中断
    }
    /***********************************************************************************/
    冲哥救命啊,我这写了个程序,只要启动定时器一,跑这个printf("Flag%d",1);语句,只要是下载软件不打开串口接收,感觉单片机就死在这里了,但是定时器还正常跑,我一打开
    串口接收程序全部正常,不开串口程序就死在这个printf这里,找了一天多了还没找到具体问题,看手册看视频还是没解决,救命啊冲哥!

    30.任意频率的PWM输出和死区互补波形输出.zip

    449.53 KB, 下载次数: 7

    点评

    [attachimg]24285[/attachimg] 你这里有等待UCB连接成功的判断如果不需要这个USB-CDC的话,把程序里的USB有关的代码都去掉就好了,  详情 回复 发表于 2023-10-16 08:16
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:09
  • 签到天数: 94 天

    [LV.6]常住居民II

    39

    主题

    996

    回帖

    6876

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6876
    QQ
     楼主| 发表于 2023-10-16 08:16:53 | 显示全部楼层
    Prefect 发表于 2023-10-14 08:39
    void main()                                        //程序开始运行的入口
    {
      

    截图202310160816164045.jpg

    你这里有等待UCB连接成功的判断如果不需要这个USB-CDC的话,把程序里的USB有关的代码都去掉就好了,
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    10

    回帖

    49

    积分

    新手上路

    积分
    49
    发表于 2023-10-26 10:46:17 | 显示全部楼层
    请问下 冲哥,第一课点亮就报错了,Rebuild target 'Sample'
    compiling main.c...
    main.c(52): error C25: syntax error near 'sfr'
    Target not created.
    Build Time Elapsed:  00:00:00
    大佬帮忙看看

    1.png

    点评

    少了个分号  详情 回复 发表于 2023-10-26 15:47
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    10

    回帖

    49

    积分

    新手上路

    积分
    49
    发表于 2023-10-26 11:05:25 | 显示全部楼层
    求助冲哥, main.c(52): error C25: syntax error near 'sfr'报错怎么办啊
    1.png

    点评

    少了个分号  详情 回复 发表于 2023-10-26 15:47
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:09
  • 签到天数: 94 天

    [LV.6]常住居民II

    39

    主题

    996

    回帖

    6876

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6876
    QQ
     楼主| 发表于 2023-10-26 15:47:05 | 显示全部楼层
    langshuang 发表于 2023-10-26 11:05
    求助冲哥, main.c(52): error C25: syntax error near 'sfr'报错怎么办啊

    少了个分号
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:09
  • 签到天数: 94 天

    [LV.6]常住居民II

    39

    主题

    996

    回帖

    6876

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6876
    QQ
     楼主| 发表于 2023-10-26 15:47:29 | 显示全部楼层
    langshuang 发表于 2023-10-26 10:46
    请问下 冲哥,第一课点亮就报错了,Rebuild target 'Sample'
    compiling main.c...
    main.c(52): error C25:  ...

    少了个分号
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    10

    回帖

    49

    积分

    新手上路

    积分
    49
    发表于 2023-10-27 10:22:44 | 显示全部楼层
    求助冲哥,请问视频里#include "stc.h"
    #include "usb.h" 这里头文件从哪里下载啊,我引入失败了

    点评

    我是从历程包里复制出来的,你也可以从我的历程包里复制出来  详情 回复 发表于 2023-10-27 20:52
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:09
  • 签到天数: 94 天

    [LV.6]常住居民II

    39

    主题

    996

    回帖

    6876

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6876
    QQ
     楼主| 发表于 2023-10-27 20:52:28 | 显示全部楼层
    langshuang 发表于 2023-10-27 10:22
    求助冲哥,请问视频里#include "stc.h"
    #include "usb.h" 这里头文件从哪里下载啊,我引入失败了 ...

    我是从历程包里复制出来的,你也可以从我的历程包里复制出来
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-10 09:15 , Processed in 0.081969 second(s), 74 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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