- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2024-08-27 09:03:48
注册会员
- 积分
- 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这里,找了一天多了还没找到具体问题,看手册看视频还是没解决,救命啊冲哥! |
|