[問題] mcu(pic)請教
我用的mcu是pic16f877a
我要控制的東西(rgbled)是單線控制,根據data線HIGH的時長來決定是BIT"0"或BIT"1"
所以我在用mcu控制的時候常常會這樣寫
if(bit[i]=1) {RC1=1;RC1=1;RC1=1;RC1=1;RC1=0;}//BIT"1"800nS HIGH
else {RC1=1;RC1=0;} //BIT"0"200nS HIGH
我的振盪器是20MHZ,所以指令週期是(1/20M)*4=200nS
當bit"1"時送一個800nS HIGH的脈波(4次RC1=1;)
當bit"0"時送一個200nS HIGH的脈波(1次RC1=1;)
但是我發現偶爾在不知道什麼時候,BIT"1"High的脈波寬會變成2000nS
拿掉一個RC1=1;,BIT"1"High的脈波寬會變成1800nS
拿掉兩個RC1=1;,BIT"1"High的脈波寬會變成1600nS
(表示RC1=1;這指令仍然是200nS,那為什麼High的脈波寬會跑掉)
這狀況是偶而才發生一次,每次遇到這個問題時,我將程式改為
if(bit[i]=1) {RC1=1;RC1=1;RC1=1;RC1=1;RC1=0;RC1=0;RC1=0;RC1=0;}//BIT"1"800nS HI
else {RC1=1;RC1=0;} //BIT"0"200nS HIGH
把RC1=0;的次數跟RC1=1;的次數相同,BIT"1"High的脈波寬就正常了
就很好奇了,請問這個是編譯器的問題嗎?因為單純以程式來看我想不通
我只是瞎基巴改,然後就正常動作了
所以想來問看看這到底是什麼原因
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.158.217 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1675128955.A.36B.html
→
01/31 12:58,
1年前
, 1F
01/31 12:58, 1F
沒使用中斷的時候仍然會有這問題
推
01/31 13:06,
1年前
, 2F
01/31 13:06, 2F
※ 編輯: IOP14759 (60.248.158.217 臺灣), 01/31/2023 15:24:55
推
01/31 20:17,
1年前
, 3F
01/31 20:17, 3F
→
02/01 02:19,
1年前
, 4F
02/01 02:19, 4F
→
02/01 02:19,
1年前
, 5F
02/01 02:19, 5F
→
02/01 11:17,
1年前
, 6F
02/01 11:17, 6F
推
02/01 13:20,
1年前
, 7F
02/01 13:20, 7F
→
02/01 13:47,
1年前
, 8F
02/01 13:47, 8F
→
02/01 13:48,
1年前
, 9F
02/01 13:48, 9F