欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: STC8G1K08單片機main無法調(diào)用封裝函數(shù) [打印本頁]

作者: dnxbdnxb01    時間: 2024-1-3 11:38
標(biāo)題: STC8G1K08單片機main無法調(diào)用封裝函數(shù)
各位大佬好,我正在學(xué)習(xí)單片機,使用單片機型號為STC8G1K08。在學(xué)習(xí)過程中遇到一些困難,希望各位大佬指點迷津。在程序中,我將代碼封裝在函數(shù)中,然后在main函數(shù)中調(diào)用,程序可以正常編譯,也能下載到單片機中,但是無法執(zhí)行函數(shù)功能。
這只是個簡單的IO功能測試,不但定時器功能無法啟動,甚至普通的IO也無法使用。

  1. #include <STC8G.H>
  2. #include <Delay.h>

  3. void Time0()
  4. {
  5.        
  6.     TMOD = 0x00;
  7.     TL0 = 0x00;                                
  8.     TH0 = 0x00;
  9.     TR0 = 1;                                    //啟動定時器
  10.     ET0 = 1;  

  11. }

  12. void TM0_Isr() interrupt 1
  13. {
  14.   P33=!P33;
  15. }
  16. void main()
  17. {
  18.           
  19.     P3M0 &= 0x0C;
  20.     P3M1 &= 0x00;
  21.     P5M0 &= 0x00;
  22.     P5M1 &= 0x10;               

  23.        
  24. //    TMOD = 0x00;
  25. //    TL0 = 0x00;                                
  26. //    TH0 = 0x00;
  27. //    TR0 = 1;                                    //啟動定時器
  28. //    ET0 = 1;  


  29.                 Timer0();                                                
  30.     EA = 1;                                                                                                                                                         //使能定時器中斷

  31.     while (1)
  32.                 {
  33.                         P55=1;
  34.                         P30=0;
  35.                         P31=0;
  36.                         P32=0;
  37.                         DelayMs(500);
  38.                         P55=0;
  39.                         P30=1;
  40.                         P31=1;
  41.                         P32=1;
  42.                         DelayMs(500);
  43.                 }

  44. }
復(fù)制代碼
但我將代碼直接寫在main函數(shù)中,程序功能可以正常執(zhí)行。
  1. #include <STC8G.H>
  2. #include <Delay.h>
  3.   

  4. void Time0()
  5. {
  6.        
  7.     TMOD = 0x00;
  8.     TL0 = 0x00;                                
  9.     TH0 = 0x00;
  10.     TR0 = 1;                                    //啟動定時器
  11.     ET0 = 1;  

  12. }

  13. void TM0_Isr() interrupt 1
  14. {
  15.   P33=!P33;
  16. }
  17. void main()
  18. {
  19.           
  20.     P3M0 &= 0x0C;
  21.     P3M1 &= 0x00;
  22.     P5M0 &= 0x00;
  23.     P5M1 &= 0x10;               

  24.        
  25.     TMOD = 0x00;
  26.     TL0 = 0x00;                                
  27.     TH0 = 0x00;
  28.     TR0 = 1;                                    //啟動定時器
  29.     ET0 = 1;  


  30. //                Timer0();                                                
  31.     EA = 1;                                                                                                                                                         //使能定時器中斷

  32.     while (1)
  33.                 {
  34.                         P55=1;
  35.                         P30=0;
  36.                         P31=0;
  37.                         P32=0;
  38.                         DelayMs(500);
  39.                         P55=0;
  40.                         P30=1;
  41.                         P31=1;
  42.                         P32=1;
  43.                         DelayMs(500);
  44.                 }

  45. }
復(fù)制代碼
我的知識儲備對這種情況百思不得其解,希望得到各位的幫助。





作者: wangxiangtan    時間: 2024-1-3 16:51
TL0 = 0x00;                                
TH0 = 0x00;
這是定時幾秒進中斷呢,還是不停的進中斷呢
作者: dnxbdnxb01    時間: 2024-1-3 17:37
wangxiangtan 發(fā)表于 2024-1-3 16:51
TL0 = 0x00;                                
TH0 = 0x00;
這是定時幾秒進中斷呢,還是不停的進中斷呢

是不停進中斷翻轉(zhuǎn)電平
作者: dnxbdnxb01    時間: 2024-1-3 17:41
我使用的單片機是STC8G1K08-8Pin的,但只有這一個型號,不知道這個問題是只針對這個型號,還是其他型號的也會遇到這種問題。
作者: 大IGBT    時間: 2024-1-3 19:57
請問你是怎么檢測定時器啟動沒?假如你設(shè)定主頻12M定時器就5MS進一次。看?萬用表?示波器?
作者: mtt661    時間: 2024-1-3 20:21

Timer沒有拼寫對
作者: uvw    時間: 2024-1-3 22:02
//                Timer0();

這個函數(shù)已經(jīng)被你用“//”注釋掉了!
作者: wulin    時間: 2024-1-3 22:17
你封裝的函數(shù)名稱與調(diào)用的函數(shù)名稱不一致當(dāng)然無效。void Time0()   Timer0();  難道編譯時沒有警告???
作者: 大IGBT    時間: 2024-1-4 07:56
還是6樓心細 啊,看幾遍 我都沒發(fā)現(xiàn)
作者: dnxbdnxb01    時間: 2024-1-4 09:04
感謝大佬,確實是我自己粗心導(dǎo)致的,編譯報了警告沒報錯所以給忽略掉了
作者: Hephaestus    時間: 2024-1-4 09:06
wulin 發(fā)表于 2024-1-3 22:17
你封裝的函數(shù)名稱與調(diào)用的函數(shù)名稱不一致當(dāng)然無效。void Time0()   Timer0();  難道編譯時沒有警告???

樓主同時說“程序可以正常編譯”怎么解釋?
作者: dnxbdnxb01    時間: 2024-1-4 09:18
Hephaestus 發(fā)表于 2024-1-4 09:06
樓主同時說“程序可以正常編譯”怎么解釋?

編譯報警告,但是沒報錯,我給忽略了
作者: dnxbdnxb01    時間: 2024-1-4 09:23
這也是之前學(xué)習(xí)過程中沒有注意到的問題,從來不注意警告信息,只要程序沒報錯就認為沒問題,感謝各位的幫助
作者: Hephaestus    時間: 2024-1-4 09:41
dnxbdnxb01 發(fā)表于 2024-1-4 09:18
編譯報警告,但是沒報錯,我給忽略了

不會這么簡單,你肯定有更多的隱瞞之處。
作者: dnxbdnxb01    時間: 2024-1-4 09:59
Hephaestus 發(fā)表于 2024-1-4 09:41
不會這么簡單,你肯定有更多的隱瞞之處。

它的警告信息如下:
  1. Rebuild target 'Target 1'
  2. assembling STARTUP.A51...
  3. compiling stc01.c...
  4. stc01.c(34): warning C206: 'Timer0': missing function-prototype
  5. linking...
  6. *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
  7.     SEGMENT: ?PR?TIME0?STC01
  8. *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
  9.     SYMBOL:  TIMER0
  10.     MODULE:  stc01.obj (STC01)
  11. *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
  12.     SYMBOL:  TIMER0
  13.     MODULE:  stc01.obj (STC01)
  14.     ADDRESS: 001BH
  15. Program Size: data=9.0 xdata=0 code=68
  16. creating hex file from "stc801"...
  17. "stc801" - 0 Error(s), 4 Warning(s).
復(fù)制代碼

我只注意到錯誤數(shù)為零,就沒有關(guān)注警告信息。

作者: dnxbdnxb01    時間: 2024-1-4 10:02
Hephaestus 發(fā)表于 2024-1-4 09:41
不會這么簡單,你肯定有更多的隱瞞之處。

在我印象中,也覺得如果調(diào)用了沒有定義的函數(shù)會報錯,因此沒有注意到函數(shù)名錯誤
作者: dnxbdnxb01    時間: 2024-1-4 10:02
大IGBT 發(fā)表于 2024-1-3 19:57
請問你是怎么檢測定時器啟動沒?假如你設(shè)定主頻12M定時器就5MS進一次。看?萬用表?示波器?

我使用的led燈




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1