感谢各位老师的指导!![]() |
很简单: 1、每个脉冲由0/1组成,给出两个量:L1,H1。 2、N个脉冲,做成一个表格,给出2N个量:L1,H1、L2,H2、L3,H3、L4,H4、……LN,HN。 3、程序: 用定时器做一个计时软件,依次取出L,H,计三种情况: L<>0,H<>0 时,L-1计时并输出0; L = 0,H<>0 时,H-1计时并输出1; L = 0,H = 0 时,取一下组数据; 重复。 |
把每段延时时间做成数组 再做一个定时0.1秒的定时减减函数 把数组做个循环任务函数 把第一位减的时间个数(全局参数)载入循环 减到零时载入第二个减时间个数 到最后一位处理下是跳出还是继续循环就行了 |
定义一个结构体 typedef struct { u8 IO ; // 记录端口状态 u16 timer; // 记录延时时 } SW_IO; typedef struct /////处理函数进入时间处理方案 { u16 time; /* 定义进入中断时间 等0xFFFF 函数被关闭, 0允许进入函数 */ u8 tag; /* 标记状态 */ u8 value; /* 传递参数 */ } SWT_APP ; SW_IO IO_K[50]; // 根据需要控制的时序填写对应时间和高低电平 SWT_APP location ; 记录数组运行位置 if(location.time ==0 ) { if( IO_K[location.tag].IO ) { 输出高电平 } else { 输出低电平 } location.time = IO_K[location.timer];延时时间写入 location.tag++; } 中断内部调用控制 if(location.time &(location.time != 0xffff) )location.time--; |
可以把这些时间做成表格查表处理。。。 |
我算了一下,按0.05s的速率,连续发送21个字节(8位)的数据即可,具体发什么数据自己算一下。 |
定时器?不同的时间随时设定不同的定时参数? |
如果使用的是单片机可能没有必要这样写一个闪灯程序,如果使用的是555或者其它器件就好理解了 |
很好奇你是怎么写的 |