Re: [問題] 量測脈波寬度

看板ASM (組合語言)作者 (藍色感覺)時間15年前 (2009/04/13 22:55), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串6/8 (看更多)
小弟生平的第一個Timer,XD 第一次用計時器 請大大幫忙看一下,沒有有寫錯呢? (希望沒錯) ============================================ 說明 : 初始 A=0,B=0. 當 0.1us進中斷判 Test =1的話, count++ 在TEST = 1時也判斷 是否count > 6 , 若不是 表示pulse 小於 1ms , 所以給 A = 1 , B = 0 若是 , 可能TEST一直會1或 >1ms了 , 所以給 A= 0 , B =1 當TEST =0 就會 將count = 0, 等下一次TEST =1 所以TEST 不需要接BJT了??因為我是判斷High準位.... 另外, 我取樣要很小, 沒有要計數很久, 應該用8bit就可以吧? 不知道有沒有暇癡...... ============================================ sfr IE = 0xA8; sfr P3 = 0xB0; sfr TL0 = 0x8A; sfr TH0 = 0x8C; sfr TMOD = 0x89; sfr TCON = 0x88; sbit TR0 = TCON^4; sbit EA = IE^7; sbit ET0 = IE^1; sbit B = P3^1; sbit A = P3^0; sbit TEST = P3^2; static unsigned long count = 0; void Main(void) { TMOD = (TMOD & 0xF0) | 0x03; /* Set T/C0 Mode */ ET0 = 1; /* Enable Timer 0 Interrupts */ TR0 = 1; /* Start Timer 0 Running */ EA = 1; /* Global Interrupt Enable */ TL0 = 256 - 240; A = 0; B = 0; while(1) { } } void Timer0ISR_int(void) interrupt 1 using 1 { if (TEST == 1) { count++; if (count < 6) { A = 1; B = 0; } else { A = 0; B = 1; } } else { A = 0; B = 0; count = 0; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.194.110 ※ 編輯: BlueFeel 來自: 123.195.194.110 (04/13 22:55)

04/14 03:12, , 1F
當test頻率接近10kHz時可能會誤判
04/14 03:12, 1F

04/14 07:58, , 2F
只能限定輸入不要10KHz了!!
04/14 07:58, 2F
文章代碼(AID): #19ur98dL (ASM)
文章代碼(AID): #19ur98dL (ASM)