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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51定時器問題,初值含參

[復制鏈接]
跳轉到指定樓層
樓主
ID:137261 發表于 2016-11-11 15:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. void InitTimer0()
  2. {
  3.     TMOD = 0x01;
  4.     TH0 = (65536-sum)/256;
  5.     TL0 = (65536-sum)%256;
  6.     EA = 1;
  7.     ET0 = 0;
  8.     TR0 = 1;
  9. }
  10. void Timer0Interrupt() interrupt 1
  11. {
  12.     TH0 = (65536-sum)/256;
  13.     TL0 = (65536-sum)%256;
  14. }
復制代碼

我想通過主函數中的計算得出sum值,然后通過sum值的改變,來實現定時器的定時時間的改變。請問大神們,為什么我這樣子做并不能產生我需要的值呢?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

來自 2#
ID:137261 發表于 2016-11-11 15:21 | 只看該作者
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include "stdio.h"
  4. typedef unsigned char uchar;
  5. typedef unsigned int uint;
  6. typedef int bool;
  7. #define false 0
  8. #define true 1
  9. sfr WDT_CONTR=0xe1;    //看門狗寄存器
  10. /***************************************************************
  11. 功能名稱:變量定義
  12. *****************************************************************/
  13. uchar count=0;  //計數變量,脈沖標識
  14. uchar lf,ud,zo; //lf左右變量,ud上下變量,zo縮放變量
  15. uchar ex=20;//用于定位燈
  16. uint cnt;//用于復位計數
  17. float sa=7.5;//步進角
  18. float sm=1;//細分倍數
  19. float ms=26.46;//電機轉速 r/s
  20. float t=4;//翻轉倍數
  21. float sum1;//浮點型定時器初值
  22. uchar sum;//定時器初值
  23. /***************************************************************
  24. 功能名稱:引腳定義
  25. ***************************************************************/

  26. sbit cw_lf=P2^2;//左右電機方向
  27. sbit clk_lf=P2^3 ;//左右電機脈沖
  28. sbit cw_ud=P2^4;//上下電機方向
  29. sbit clk_ud=P2^5 ;//上下電機脈沖
  30. sbit cw_zo=P2^6;//縮放電機方向
  31. sbit clk_zo=P2^7 ;//縮放電機脈沖                                                       

  32.                                                                                  

  33.                                                      
  34. sbit _left=P0^0;     //左右電機左限位
  35. sbit _right=P0^1;     //左右電機右限位
  36. sbit _up=P0^2;   //上下電機上限位
  37. sbit _down=P0^3;     //上下電機下限位
  38. sbit _small=P0^4;   //縮放電機升限位
  39. sbit _big=P0^5;   //縮放電機降限位
  40. sbit _reset=P1^6;          //復位
  41. sbit control=P1^7; //定位燈控制                                                  

  42.                
  43. sbit en_lf=P3^0;    //左右電機始能
  44. sbit en_ud=P3^1;  //上下電機始能
  45. sbit en_zo=P2^0;  //縮放電機始能
  46. sbit LED=P2^1;     //定位燈
  47. sbit BZ=P3^4;  //蜂鳴器報警
  48. sbit scl=P3^6; //時鐘線
  49. sbit sda=P3^7;  //數據線


  50. /***************************************************************
  51. 功能名稱:初始化引腳函數
  52. 函數名稱:init
  53. 輸入:
  54. 輸出:
  55. 作者:
  56. 備注:
  57. ***************************************************************/
  58. void  init()
  59. {
  60.     en_ud=0;//上下模塊使能
  61.     en_zo=0;//縮放模塊使能
  62.     en_lf=0;         //左右模塊使能
  63.                 LED=1;                //定位燈使能
  64.                 BZ=1;                        //蜂鳴器初值
  65. }
  66. /***************************************************************
  67. 功能名稱:定時器100us
  68. 函數名稱:InitTimer0
  69. 輸入:
  70. 輸出:clk_lf,clk_ud,clk_zo,cnt
  71. 作者:
  72. 備注:
  73. ***************************************************************/
  74. void InitTimer0()
  75. {
  76.     TMOD = 0x01;
  77.     TH0 = (65536-100)/256;
  78.     TL0 = (65536-100)%256;
  79.     EA = 1;//總中斷打開
  80.     ET0 = 0;//定時器中斷打開
  81.     TR0 = 1;//定時器開關打開
  82. }
  83. void Timer0Interrupt() interrupt 1
  84. {
  85.     TH0 = (65536-sum)/256;
  86.     TL0 = (65536-sum)%256;
  87.                 lf++;//左右
  88.                 ud++;//上下
  89.                 zo++;//縮放       
  90.                 cnt++;//復位用自增長變量
  91.                 if(count==1||count==4)
  92.                 {
  93.                 //左右脈沖頻率
  94.                         if(lf==4)
  95.                         {clk_lf=1;}
  96.                         else if(lf>=8)
  97.                         {
  98.                                 clk_lf=0;
  99.                                 lf=1;
  100.                         }       
  101.                 }
  102.                 if(count==2||count==4)//7/14
  103.                 {
  104.                         //上下脈沖頻率
  105.                         if(ud==7)
  106.                         {clk_ud=1;}
  107.                         else if(ud>=14)
  108.                         {
  109.                                 clk_ud=0;
  110.                                 ud=1;
  111.                         }
  112.                 }
  113.                 if(count==3)
  114.                 {
  115.                         //縮放脈沖頻率
  116.                         if(zo==7)
  117.                         {clk_zo=1;}
  118.                         else if(zo>=14)
  119.                         {
  120.                                 clk_zo=0;
  121.                                 zo=1;
  122.                         }
  123.                 }
  124. }

  125. /***************************************************************
  126. 功能名稱:電機控制函數
  127. 函數名稱:Control_Motor
  128. 輸入:P1,限位信號
  129. 輸出:電機運行與停止
  130. 作者:
  131. 備注:
  132. ***************************************************************/
  133. void Control_Motor()
  134. {
  135.         if(P1==0x20&&_right==1)//左運動
  136.                 {
  137.                         ET0=1;//定時器0中斷開關打開
  138.                         count=1;
  139.                         en_lf=1;//左右電機使能
  140.                         cw_lf=0;//左右電機方向       
  141.                 }
  142.         else if(P1==0x10&&_left==1)//右運動
  143.                 {
  144.                         ET0=1;
  145.                         count=1;
  146.                         en_lf=1;
  147.                         cw_lf=1;
  148.                 }
  149.         else if(P1==0x04&&_up==1)//上運動
  150.         {
  151.                 ET0=1;//定時器0中斷開關打開
  152.                 en_ud=1;//上下電機使能
  153.                 cw_ud=0;//上下電機方向
  154.                 count=2;
  155.         }
  156.         else if(P1==0x08&&_down==1)//下運動
  157.         {
  158.                 ET0=1;
  159.                 en_ud=1;
  160.                 cw_ud=1;
  161.                 count=2;
  162.         }
  163.         else if(P1==0x01&&_small==1)      //縮放升,縮小                        

  164.                                                
  165.         {
  166.                 ET0=1;//定時器0中斷開關打開
  167.                 en_zo=1;//縮放使能
  168.                 cw_zo=0;//縮放方向
  169.                 count=3;
  170.         }
  171.         else if(P1==0x02&&_big==1)     //縮放降,放大                            

  172.                                                
  173.         {
  174.                 ET0=1;               
  175.                 en_zo=1;
  176.                 cw_zo=1;
  177.                 count=3;
  178.         }
  179.         else if(P1==0x18&&_left==1&&_down==1)//左上
  180.         {
  181.                 ET0=1;//定時器0中斷開關打開
  182.                 count=4;
  183.                 en_lf=1;//左右電機使能
  184.                 cw_lf=1;//左右電機方向
  185.                 en_ud=1;//上下電機使能
  186.                 cw_ud=1;//上下電機方向       
  187.         }
  188.         else if(P1==0x28&&_right==1&&_down==1) //右上
  189.         {
  190.                 ET0=1;//定時器0中斷開關打開
  191.                 count=4;
  192.                 en_lf=1;//左右電機使能
  193.                 cw_lf=0;//左右電機方向
  194.                 en_ud=1;//上下電機使能
  195.                 cw_ud=1;//上下電機方向               
  196.         }
  197.         else if(P1==0x14&&_left==1&&_up==1) //左下
  198.         {
  199.                 ET0=1;//定時器0中斷開關打開
  200.                 count=4;
  201.                 en_lf=1;//左右電機使能
  202.                 cw_lf=1;//左右電機方向
  203.                 en_ud=1;//上下電機使能
  204.                 cw_ud=0;//上下電機方向
  205.         }
  206.         else if(P1==0x24&&_right==1&&_up==1)//右下
  207.         {
  208.                 ET0=1;//定時器0中斷開關打開
  209.                 count=4;
  210.                 en_lf=1;//左右電機使能
  211.                 cw_lf=0;//左右電機方向
  212.                 en_ud=1;//上下電機使能
  213.                 cw_ud=0;//上下電機方向
  214.         }
  215.         else
  216.                 {
  217.                         en_lf=0;en_ud=0;en_zo=0;ET0=0;count=0;
  218.                 }
  219. }
  220. /***************************************************************
  221. 功能名稱:電機模塊控制
  222. 函數名稱:
  223. 輸入:flag
  224. 輸出:蜂鳴器以及電機控制
  225. 作者:
  226. 備注:
  227. ***************************************************************/               
  228. main()
  229. {
  230.         init();              //調用函數
  231.         sum1=12500/9*sa/sm/ms/t;
  232.         sum=sum1;
  233.         InitTimer0();        //調用定時中斷函數
  234.         P1=0xFF;
  235.         while(1)
  236.         {
  237.                 Control_Motor();
  238.         }
  239. }
復制代碼

回復

使用道具 舉報

板凳
ID:7485 發表于 2016-11-11 20:12 | 只看該作者
中斷函數不能輸入參數,也不能返回參數。
回復

使用道具 舉報

地板
ID:147378 發表于 2016-11-11 20:51 | 只看該作者
加上EA=1;試一下
回復

使用道具 舉報

5#
ID:70330 發表于 2016-11-12 09:45 | 只看該作者
在void InitTimer0()里去掉    TH0 = (65536-sum)/256;
                                       TL0 = (65536-sum)%256;這兩句,在中斷處理函數里有就行了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人一区二区在线 | 91精品国产91久久久久久三级 | 亚洲欧美在线视频 | 亚洲一区二区三区免费观看 | 日韩视频高清 | 久久久国产精品视频 | 日韩国产在线 | 在线看黄免费 | 国产精品视频不卡 | 欧美一区二区三区在线观看 | 性国产丰满麻豆videosex | 亚洲午夜一区二区 | 久久噜 | 国精产品一区二区三区 | 久久久久中文字幕 | 精品九九久久 | 午夜视频在线视频 | 亚洲精品一区二区三区在线 | 成人aaa视频 | 一区二区三区欧美 | 欧美综合网 | 日韩毛片在线观看 | 亚洲一区二区三区在线免费 | 日韩在线免费视频 | 天天天操天天天干 | 亚洲综合精品 | 麻豆av电影网 | 成人av网站在线观看 | 日本午夜在线视频 | 91精品国产综合久久久久久漫画 | 高清一区二区视频 | 99精品欧美一区二区三区综合在线 | 日韩中文字幕第一页 | 玖玖色在线视频 | 精品日韩在线观看 | 欧美一级做性受免费大片免费 | 久久久婷婷 | 国产成人精品一区二区三区网站观看 | 日韩精品在线视频免费观看 | 精品一二区 | 亚洲一区二区三区视频 |