找回密码
 立即注册
楼主: 电子DIY小家

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

 火.. [复制链接]

0

主题

1

回帖

16

积分

新手上路

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

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

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-08-27 09:03:48

4

主题

13

回帖

112

积分

注册会员

积分
112
发表于 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, 下载次数: 134

点评

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

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

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

截图202310160816164045.jpg

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

使用道具 举报 送花

1

主题

10

回帖

51

积分

注册会员

积分
51
发表于 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

回帖

51

积分

注册会员

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

点评

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

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

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

少了个分号
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

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

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

少了个分号
回复 支持 反对

使用道具 举报 送花

1

主题

10

回帖

51

积分

注册会员

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

点评

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

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

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 03:26 , Processed in 0.179871 second(s), 126 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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