久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機點亮小燈的問題,幾行代碼,實在想不通怎么執行的

  [復制鏈接]
跳轉到指定樓層
樓主
那個大佬幫忙看一下,目前剛接觸單片機,圖片里面的程序哪里有問題啊,就幾行代碼,我實在想不通啊。目的就是想通過定時計數器,用軟件查詢的方式,間隔50ms,實現一個小燈的亮滅

E2{MGRX0~RI7~FHR1ZK`AZA.png (37.64 KB, 下載次數: 56)

程序代碼

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

使用道具 舉報

沙發
ID:511328 發表于 2019-6-4 23:10 | 只看該作者
程序下載運行后小燈一直亮著
回復

使用道具 舉報

板凳
ID:123289 發表于 2019-6-5 08:08 | 只看該作者
關鍵是你未弄清楚:定時計數器是如何工作的。
自己再仔細閱讀定時器章節,特別是TF0是干什么用的?
回復

使用道具 舉報

地板
ID:56665 發表于 2019-6-5 08:34 | 只看該作者
一看你應該是從匯編過來的。
回復

使用道具 舉報

5#
ID:94031 發表于 2019-6-5 08:51 | 只看該作者
間隔50ms小燈亮滅人眼是無法辨別的。
回復

使用道具 舉報

6#
ID:213173 發表于 2019-6-5 08:52 | 只看該作者
TMOD |= 0x01;
回復

使用道具 舉報

7#
ID:332444 發表于 2019-6-5 08:54 | 只看該作者
首先直接看到的GOTO語句形成的循環此舉實屬頭上安頭!因為已經寫在了無限循環中,假如寫在無限循環外,那用GOTO構成循環是需要的.
回復

使用道具 舉報

8#
ID:332444 發表于 2019-6-5 09:16 | 只看該作者
計算機系統都是順序執行的,自上而下逐句執行指令.
TF0=1為溢出即計滿標記,置0重新開始計數,那么整個程序順序讀起來設計意圖就很明確了.
回復

使用道具 舉報

9#
ID:332444 發表于 2019-6-5 09:30 | 只看該作者
另外一個6樓說的對是01不是10
回復

使用道具 舉報

10#
ID:332444 發表于 2019-6-5 09:33 | 只看該作者
問題3用取反運算符 led=!led;
回復

使用道具 舉報

11#
ID:158375 發表于 2019-6-5 09:37 | 只看該作者
你如果以前是用匯編編程,現在改為C編程,首先需要自己改變思維模式,比較難啊。
回復

使用道具 舉報

12#
ID:511328 發表于 2019-6-5 09:44 | 只看該作者
yzwzfyz 發表于 2019-6-5 08:08
關鍵是你未弄清楚:定時計數器是如何工作的。
自己再仔細閱讀定時器章節,特別是TF0是干什么用的?

好的,我再仔細學學,謝謝大佬指點
回復

使用道具 舉報

13#
ID:511328 發表于 2019-6-5 09:45 | 只看該作者
m182892 發表于 2019-6-5 08:34
一看你應該是從匯編過來的。

是的,感覺學學匯編,學一些基礎東西,更方便理解吧【笑哭】
回復

使用道具 舉報

14#
ID:511328 發表于 2019-6-5 09:46 | 只看該作者
xuyaqi 發表于 2019-6-5 08:51
間隔50ms小燈亮滅人眼是無法辨別的。

好的,謝謝大佬,我再看看,改改
回復

使用道具 舉報

15#
ID:461604 發表于 2019-6-5 10:06 | 只看該作者
1.沒看到你的定時器中斷函數
2.小燈閃爍50ms人眼分辨不出來(看起來就是一直亮),先實現200ms閃爍
3.搞清楚定時器的原理,就是你設置一個值,單片機會從0加到你設的那個值,然后清零,重新開始計數(簡單,數據手冊有)
回復

使用道具 舉報

16#
ID:293363 發表于 2019-6-5 11:18 | 只看該作者
大哥,中斷的處理函數都沒有
回復

使用道具 舉報

17#
ID:511328 發表于 2019-6-5 13:26 | 只看該作者
謝謝各位大佬的回答,感謝,感謝
回復

使用道具 舉報

18#
ID:388197 發表于 2019-6-5 14:25 | 只看該作者
漏了將ET0和EA置1吧,有很多軟件都可以直接生成配置中斷的函數.填入參數即可自動生成,根本沒必要自己去記.
回復

使用道具 舉報

19#
ID:93224 發表于 2019-6-5 17:54 | 只看該作者
建議臃腫,你這樣寫程序不是很規范
回復

使用道具 舉報

20#
ID:332444 發表于 2019-6-5 21:15 | 只看該作者
看一下運行輸出波形就知道


回復

使用道具 舉報

21#
ID:332444 發表于 2019-6-5 21:18 | 只看該作者
  1. #include "reg52.h"
  2. sbit LED=P1^0;
  3. void ZhongDuanSheZhi()
  4. {
  5.         TH0+=0X4c;/*定時器賦初值,11.0592Mz定時50ms觸發中斷,自動補償方式*/
  6.         TL0+=0X00;
  7.         TMOD=0X01;
  8.         TR0=1;
  9. }
  10. void main()
  11. {
  12.         ZhongDuanSheZhi();
  13.         while(1)
  14.         {
  15.                 if(TF0){TF0=0;LED=!LED;ZhongDuanSheZhi();}
  16.         }
  17. }
復制代碼

運行看上圖
回復

使用道具 舉報

22#
ID:105364 發表于 2019-6-5 23:05 | 只看該作者
1.TMOD=0x01 //16位定時器
2.閃爍時間太短,改成TMOD=0x01后,10次LED求反一次
3.樓主用的是查詢方法,而不是中斷方法,所以所說的看不到中斷函數很正常。

。。。
while(1)
        {
                loop:if(TF0==1)
                {
                        //led=~led;
                        TH0=0x3c;
                        TL0=0xb0;
                        TF0=0;
                        i++;
                        if(i==10)
                        {
                                i=0;
                                led=!led;
                        }

                }
               
                        else
。。。
回復

使用道具 舉報

23#
ID:556144 發表于 2019-6-6 00:55 | 只看該作者
首先看主函數,調用定時器函數,賦初值50ms,隨后判斷是否定時結束,若是,則點亮燈(因為輸出高電平,燈就可以亮,1表示高電平,0表示低電平,進行取反操作即可實現燈的亮滅)
回復

使用道具 舉報

24#
ID:511890 發表于 2019-6-6 01:42 | 只看該作者
TMOD |= 0x10;0x10 是:選擇定時器1(不是定時器0)的16位定時器模式,TH0和TL0都是定時器0的寄存器。TR0=1是啟動定時器0(T0)。如果要用定時器1,那么TH0,TL0改為TH1,TL1,TR0改為TR0,TF0改為TF1。
如果要用定時器0,那么就要把TMOD|=0x01;。
一個建議,如果再整個程序中沒用到另一個定時器,那么建議直接TMOD=0x01;這樣避免某些原因把定時器/計數器的工作方式改成其它的工作方式。比如變成計數器模式。
回復

使用道具 舉報

25#
ID:525821 發表于 2019-6-6 04:34 | 只看該作者
各顯神通。
回復

使用道具 舉報

26#
ID:65956 發表于 2019-6-6 08:47 | 只看該作者
50ms間隔時間人眼觀察不出燈的變化,用示波器才能觀測到,建議先把延長200ms以上先看其是否有變化就知道了
回復

使用道具 舉報

27#
ID:542241 發表于 2019-6-6 08:55 | 只看該作者
定時器原理你要看下,模式1,需要中斷服務程序的,你中斷服務程序都沒有,在主程序中賦初值了
回復

使用道具 舉報

28#
ID:231054 發表于 2019-6-6 09:26 | 只看該作者
定時計數器我搞了半天也沒搞明白
回復

使用道具 舉報

29#
ID:332444 發表于 2019-6-6 10:21 | 只看該作者

看LED燈閃爍一次就是100毫秒即50亮+50滅

回復

使用道具 舉報

30#
ID:511328 發表于 2019-6-6 14:35 | 只看該作者
47okey 發表于 2019-6-5 23:05
1.TMOD=0x01 //16位定時器
2.閃爍時間太短,改成TMOD=0x01后,10次LED求反一次
3.樓主用的是查詢方法, ...

謝謝你的代碼,參照修改了一下,效果實現了,可能我才學,表述的大家有的可能沒太明白【笑哭】
回復

使用道具 舉報

31#
ID:511328 發表于 2019-6-6 14:38 | 只看該作者

謝謝你的回答,現在我還是一個菜鳥,你那個仿真界面,看的我有點懵逼【笑哭】,向層主學習
回復

使用道具 舉報

32#
ID:511328 發表于 2019-6-6 14:40 | 只看該作者
aking991 發表于 2019-6-6 08:47
50ms間隔時間人眼觀察不出燈的變化,用示波器才能觀測到,建議先把延長200ms以上先看其是否有變化就知道了

是的,大家熱情的回答,我才知道,是間隔時間太短了,肉眼根本看不出來變化
回復

使用道具 舉報

33#
ID:511328 發表于 2019-6-6 14:42 | 只看該作者
xianfajushi 發表于 2019-6-6 10:21
看LED燈閃爍一次就是100毫秒即50亮+50滅

仿真能看得見變化嗎??我實際運行的時候,50ms間隔太短了,肉眼看不出來變化,小燈就一直亮著的
回復

使用道具 舉報

34#
ID:556544 發表于 2019-6-6 14:48 | 只看該作者
TMOD=0x01 //16位定時器
回復

使用道具 舉報

35#
ID:332444 發表于 2019-6-6 15:57 | 只看該作者
仿真能看到閃爍,上的圖是比較慢了點,電腦越用越慢,在另一臺電腦上閃爍就快點,也是能看到的,所謂人眼暫留特性值在60赫茲以上人眼就無法分辨,60赫茲以下就會感覺閃爍,可以計算50/1000=0.05,1/0.05=20赫茲,是人眼可以看到的。
回復

使用道具 舉報

36#
ID:332444 發表于 2019-6-6 16:02 | 只看該作者
看到2次亮的間隔應該100毫秒轉為頻率100/1000=。1;1/。1=10赫茲,因此是可以看到的,你在實際板上看到一直亮是因為之前錯誤造成的,按我的代碼你再試看是否看到閃爍了?
回復

使用道具 舉報

37#
ID:513287 發表于 2019-6-6 16:39 | 只看該作者
定時器TFO多看看,這個地方弄錯了
回復

使用道具 舉報

38#
ID:556711 發表于 2019-6-6 17:51 | 只看該作者
D定時器哪里的問題,在看下定時器的用法吧
回復

使用道具 舉報

39#
ID:556728 發表于 2019-6-6 18:12 | 只看該作者
相互借鑒,條條大路通羅馬
回復

使用道具 舉報

40#
ID:105364 發表于 2019-6-6 18:35 | 只看該作者
大壞蛋997 發表于 2019-6-6 16:39
定時器TFO多看看,這個地方弄錯了

樓主TF0用得沒錯。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品九九| 黄色综合 | 亚洲成人第一页 | 9久久婷婷国产综合精品性色 | 精品欧美乱码久久久久久 | 国产精品1区2区3区 男女啪啪高潮无遮挡免费动态 | 视频一区在线播放 | 搞黄网站在线观看 | 亚洲午夜在线 | 亚洲国产成人精品女人 | 国产精品久久久av | 成人免费一区二区三区视频网站 | 在线中文字幕日韩 | 男人天堂色 | 日韩视频在线播放 | 久久综合久久自在自线精品自 | 神马影院一区二区三区 | 91av视频 | 亚洲在线成人 | 国产在线观看免费 | 青青草一区 | 一区二区在线观看免费视频 | 久久精品亚洲 | 久久久国产亚洲精品 | 亚洲一一在线 | 久久综合九九 | 亚洲欧洲精品成人久久奇米网 | 奇米四色在线观看 | 日韩精品一区二区三区中文字幕 | 日产精品久久久一区二区福利 | 久久亚洲高清 | 精品视频一区二区三区在线观看 | 青青草综合 | 成人午夜免费福利视频 | 日韩一级黄色毛片 | 亚洲欧美成人在线 | 奇米av | 成人av片在线观看 | 日韩免费视频一区二区 | 国产一区二区三区www | 一区二区三区欧美在线观看 |