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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1951|回復: 16
打印 上一主題 下一主題
收起左側

STC8G1K08單片機main無法調用封裝函數

[復制鏈接]
跳轉到指定樓層
樓主
各位大佬好,我正在學習單片機,使用單片機型號為STC8G1K08。在學習過程中遇到一些困難,希望各位大佬指點迷津。在程序中,我將代碼封裝在函數中,然后在main函數中調用,程序可以正常編譯,也能下載到單片機中,但是無法執行函數功能。
這只是個簡單的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. }
復制代碼
但我將代碼直接寫在main函數中,程序功能可以正常執行。
  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. }
復制代碼
我的知識儲備對這種情況百思不得其解,希望得到各位的幫助。




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1057978 發表于 2024-1-3 16:51 | 只看該作者
TL0 = 0x00;                                
TH0 = 0x00;
這是定時幾秒進中斷呢,還是不停的進中斷呢
回復

使用道具 舉報

板凳
ID:1107733 發表于 2024-1-3 17:37 | 只看該作者
wangxiangtan 發表于 2024-1-3 16:51
TL0 = 0x00;                                
TH0 = 0x00;
這是定時幾秒進中斷呢,還是不停的進中斷呢

是不停進中斷翻轉電平
回復

使用道具 舉報

地板
ID:1107733 發表于 2024-1-3 17:41 | 只看該作者
我使用的單片機是STC8G1K08-8Pin的,但只有這一個型號,不知道這個問題是只針對這個型號,還是其他型號的也會遇到這種問題。
回復

使用道具 舉報

5#
ID:1006638 發表于 2024-1-3 19:57 | 只看該作者
請問你是怎么檢測定時器啟動沒?假如你設定主頻12M定時器就5MS進一次。看?萬用表?示波器?
回復

使用道具 舉報

6#
ID:1010435 發表于 2024-1-3 20:21 | 只看該作者

Timer沒有拼寫對
回復

使用道具 舉報

7#
ID:471636 發表于 2024-1-3 22:02 | 只看該作者
//                Timer0();

這個函數已經被你用“//”注釋掉了!
回復

使用道具 舉報

8#
ID:213173 發表于 2024-1-3 22:17 | 只看該作者
你封裝的函數名稱與調用的函數名稱不一致當然無效。void Time0()   Timer0();  難道編譯時沒有警告???
回復

使用道具 舉報

9#
ID:1006638 發表于 2024-1-4 07:56 | 只看該作者
還是6樓心細 啊,看幾遍 我都沒發現
回復

使用道具 舉報

10#
ID:1107733 發表于 2024-1-4 09:04 | 只看該作者
感謝大佬,確實是我自己粗心導致的,編譯報了警告沒報錯所以給忽略掉了
回復

使用道具 舉報

11#
ID:883242 發表于 2024-1-4 09:06 | 只看該作者
wulin 發表于 2024-1-3 22:17
你封裝的函數名稱與調用的函數名稱不一致當然無效。void Time0()   Timer0();  難道編譯時沒有警告???

樓主同時說“程序可以正常編譯”怎么解釋?
回復

使用道具 舉報

12#
ID:1107733 發表于 2024-1-4 09:18 | 只看該作者
Hephaestus 發表于 2024-1-4 09:06
樓主同時說“程序可以正常編譯”怎么解釋?

編譯報警告,但是沒報錯,我給忽略了
回復

使用道具 舉報

13#
ID:1107733 發表于 2024-1-4 09:23 | 只看該作者
這也是之前學習過程中沒有注意到的問題,從來不注意警告信息,只要程序沒報錯就認為沒問題,感謝各位的幫助
回復

使用道具 舉報

14#
ID:883242 發表于 2024-1-4 09:41 | 只看該作者
dnxbdnxb01 發表于 2024-1-4 09:18
編譯報警告,但是沒報錯,我給忽略了

不會這么簡單,你肯定有更多的隱瞞之處。
回復

使用道具 舉報

15#
ID:1107733 發表于 2024-1-4 09:59 | 只看該作者
Hephaestus 發表于 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).
復制代碼

我只注意到錯誤數為零,就沒有關注警告信息。
回復

使用道具 舉報

16#
ID:1107733 發表于 2024-1-4 10:02 | 只看該作者
Hephaestus 發表于 2024-1-4 09:41
不會這么簡單,你肯定有更多的隱瞞之處。

在我印象中,也覺得如果調用了沒有定義的函數會報錯,因此沒有注意到函數名錯誤
回復

使用道具 舉報

17#
ID:1107733 發表于 2024-1-4 10:02 | 只看該作者
大IGBT 發表于 2024-1-3 19:57
請問你是怎么檢測定時器啟動沒?假如你設定主頻12M定時器就5MS進一次。看?萬用表?示波器?

我使用的led燈
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表