完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
15个回答
|
|
可以多设置几个定时标志。先到哪个定时时间,就先置1
最佳答案
|
|
|
|
加几个简单的延时程序
|
|
|
|
|
|
|
|
|
|
|
|
额,你这个提法没太看懂!能说具体点吗
|
|
|
|
问题已经解决了void T0_time() interrupt 1{ TR0=0; //关中断 ++Time1; //定时1 ++Time2; //定时2 ++Time3; //定时3 ++TimeN; //定时N TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f TL0=0x2f; TR0=1; //开中断 } |
|
|
|
注意!这是不可取的,胡闹啊!可以中断嵌套,但是不是软件嵌套。而且注意了,尽力不要在中断中操作关定时器,会死机的! |
|
|
|
那这样的方法不可取,那中断嵌套怎么写呢? |
|
|
|
这个51简单啊,开启对应的优先级。注意啊,51只支持两级嵌套,不是一层一层的嵌套!但是这个和你原来设计有区别,你是为了延长定时时间还是为了计算定时中某个时间段呢!
“可以多设置几个定时标志。先到哪个定时时间,就先置1”。这个人说的对。然后在主程序中扫描。多复杂的程序都可以做,而且没有危险! |
|
|
|
可能是你没看过。这个程序我还没发布呢,是我为大家设计的一个51开发板。中的UART程序,包括简单的协议,都可以这么做。 //函数:ISR_UART() //描述:UART中服 //参数:无 void ISR_UART(void) interrupt 4 { if (RI == 1) { UART_Flag = 1; RI = 0; } else TI = 0; } // 文件名称:串口文件 // 实现功能:串口的发送接受极其中断 // 日期:2015-1-1 // 备注:printf实现 #include "System.h" ***it PC_Slave_Bit = P3^5; volatile unsigned char UART_ReceCount = 0; // UART接收计数 unsigned char UART_Buffer[100]; // UART接收缓存区 unsigned char data CMD_Flag = 0; // UART_CMD返回值 unsigned char data UARTStateFlag = UARTFlag_PC; // 主机状态标志,默认与虚拟串口通讯 unsigned char code Waiting[] = {"请等待..."}; unsigned char code No_CMD[] = {"NO CMD"}; // 命令结构体 struct CMD { unsigned char CMD_Num; // 命令标号 unsigned char *CMD_Name; // 命令说明 unsigned char Slave_List; // 服务器序列 unsigned char *CMD_Data; // 命令 }; // 命令参数 struct CMD code PC_CMD[]= { 1,// 命令1 "PWM_Duty_Cycle", 2, "pwm+", 2,// 命令2 "PWM_Duty_Cycle", 2, "pwm-", 3,// 命令3 "Demand_Pressure", 1, "dpress", }; extern void Delay(unsigned int T0, unsigned int T1); //函数:Uart_Send() //描述:UART发送数据 //参数:Data 待发送数据 void Uart_Send(unsigned char Data) { SBUF = Data; while(TI == 0); TI = 0; } //函数:Uart_SendBrush() //描述:UART连续发送数据 //参数:Data 待发送数据 void Uart_SendBrush(unsigned char *Data) { while(*Data != ' |