熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2023-8-18 17:05
正文摘要:用示波器測(cè)了一個(gè)閃燈的時(shí)序,時(shí)間是不規(guī)則的,請(qǐng)問(wèn)一下高手,象這種閃燈怎么寫(xiě)效率比較高?謝謝! |
感謝各位老師的指導(dǎo)!![]() |
很簡(jiǎn)單: 1、每個(gè)脈沖由0/1組成,給出兩個(gè)量:L1,H1。 2、N個(gè)脈沖,做成一個(gè)表格,給出2N個(gè)量:L1,H1、L2,H2、L3,H3、L4,H4、……LN,HN。 3、程序: 用定時(shí)器做一個(gè)計(jì)時(shí)軟件,依次取出L,H,計(jì)三種情況: L<>0,H<>0 時(shí),L-1計(jì)時(shí)并輸出0; L = 0,H<>0 時(shí),H-1計(jì)時(shí)并輸出1; L = 0,H = 0 時(shí),取一下組數(shù)據(jù); 重復(fù)。 |
把每段延時(shí)時(shí)間做成數(shù)組 再做一個(gè)定時(shí)0.1秒的定時(shí)減減函數(shù) 把數(shù)組做個(gè)循環(huán)任務(wù)函數(shù) 把第一位減的時(shí)間個(gè)數(shù)(全局參數(shù))載入循環(huán) 減到零時(shí)載入第二個(gè)減時(shí)間個(gè)數(shù) 到最后一位處理下是跳出還是繼續(xù)循環(huán)就行了 |
定義一個(gè)結(jié)構(gòu)體 typedef struct { u8 IO ; // 記錄端口狀態(tài) u16 timer; // 記錄延時(shí)時(shí) } SW_IO; typedef struct /////處理函數(shù)進(jìn)入時(shí)間處理方案 { u16 time; /* 定義進(jìn)入中斷時(shí)間 等0xFFFF 函數(shù)被關(guān)閉, 0允許進(jìn)入函數(shù) */ u8 tag; /* 標(biāo)記狀態(tài) */ u8 value; /* 傳遞參數(shù) */ } SWT_APP ; SW_IO IO_K[50]; // 根據(jù)需要控制的時(shí)序填寫(xiě)對(duì)應(yīng)時(shí)間和高低電平 SWT_APP location ; 記錄數(shù)組運(yùn)行位置 if(location.time ==0 ) { if( IO_K[location.tag].IO ) { 輸出高電平 } else { 輸出低電平 } location.time = IO_K[location.timer];延時(shí)時(shí)間寫(xiě)入 location.tag++; } 中斷內(nèi)部調(diào)用控制 if(location.time &(location.time != 0xffff) )location.time--; |
可以把這些時(shí)間做成表格查表處理。。。 |
我算了一下,按0.05s的速率,連續(xù)發(fā)送21個(gè)字節(jié)(8位)的數(shù)據(jù)即可,具體發(fā)什么數(shù)據(jù)自己算一下。 |
定時(shí)器?不同的時(shí)間隨時(shí)設(shè)定不同的定時(shí)參數(shù)? |
如果使用的是單片機(jī)可能沒(méi)有必要這樣寫(xiě)一個(gè)閃燈程序,如果使用的是555或者其它器件就好理解了 |
很好奇你是怎么寫(xiě)的 |
Powered by 單片機(jī)教程網(wǎng)