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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于8051單片機芯片的計數器設置問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:648939 發表于 2019-12-11 12:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
中斷采用外部脈沖計數,計數器1工作,我想設置收到脈沖400次后進入中斷,運行后發現最大只能設置255次,求幫忙解決。
代碼如下:
void Timer1Init()
{
        TMOD=0x60;  //設置定時器1,采用的是計數器0,工作模式1(M1=0,M0=1)                             
        TL1 =1;                //設置定時初值
        TH1 =1;     //設置定時重載值
        TF1 = 0;                        //清除TF1標志
        TR1 = 1;                        //定時器1開始計數
        EA=1;                        //開總中斷
        ET1=1;                        //開定時器1中斷   

}

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

使用道具 舉報

沙發
ID:94031 發表于 2019-12-11 14:02 | 只看該作者
你設置的是8位計數器,最大255,你可以設置16位計數器 TMOD=0x50;
回復

使用道具 舉報

板凳
ID:275826 發表于 2019-12-11 14:07 | 只看該作者
TMOD=0x60;改成TMOD=0x50;吧
回復

使用道具 舉報

地板
ID:235200 發表于 2019-12-11 14:10 | 只看該作者
TL1 =1;                //設置定時初值
TH1 =1;     //設置定時重載值
這兩條的初值應為0
要計數400次,要把TH1高8位和TL1低8位兩個8位寄存器的數據轉變為16位的數據
如轉換結果存放count =(TH1<<8)+TL1,再用count來判斷是否400次
回復

使用道具 舉報

5#
ID:213173 發表于 2019-12-11 15:15 | 只看該作者
定時器被你設置為8位重裝,脈沖400次后進入中斷的初值也不對。所以最大只能設置255。示例如下:
  1. #include <reg51.h>

  2. sbit LED=P1^0;

  3. void InitTimer1(void)
  4. {
  5.         TMOD = 0x50;
  6.         TH1 = 0xFE;
  7.         TL1 = 0x70;
  8.         EA = 1;
  9.         ET1 = 1;
  10.         TR1 = 1;
  11. }

  12. void main(void)
  13. {
  14.         InitTimer1();
  15.         while(1);
  16. }

  17. void Timer1Interrupt(void) interrupt 3
  18. {
  19.         TH1 = 0xFE;
  20.         TL1 = 0x70;
  21.         LED=~LED;
  22. }
復制代碼

回復

使用道具 舉報

6#
ID:648939 發表于 2019-12-11 16:48 | 只看該作者
我現在設置成0x40可以計數到幾百了,就是不知道計數中斷的規則,設什么數字出什么結果。
void Timer1Init()
{
                TMOD=0x40;  //設置定時器1,采用的是計數器0,工作模式1(M1=0,M0=1)                             
        TL1 =8191;                //設置定時初值
        TH1 =8180;     //設置定時重載值
                TF1 = 0;                        //清除TF1標志
        TR1 = 1;                        //定時器1開始計數
        EA=1;                        //開總中斷
        ET1=1;                        //開定時器1中斷   

}
回復

使用道具 舉報

7#
ID:7485 發表于 2019-12-11 18:23 | 只看該作者
計數器計到65535就滿了,再加1就會溢出,就會產生中斷。65536減去你設定的初值就是你需要的次數。如65536-400就是你需要的初值。16進制就是FE6F,FE(254)是TH的初值,6F(111)是TL的初值。
回復

使用道具 舉報

8#
ID:213173 發表于 2019-12-12 09:00 | 只看該作者
t20ily 發表于 2019-12-11 16:48
我現在設置成0x40可以計數到幾百了,就是不知道計數中斷的規則,設什么數字出什么結果。
void Timer1Init( ...

你這樣設置TMOD=0x40;定時器是13位。參見5樓完整程序的回帖。
unsigned int X;//計數范圍0~65535
void InitTimer1(void)
{
        TMOD = 0x50;//T1模式1,外部計數 0101 0000
        TH1 = (65536-X)/256;//X=計數值
        TL1 = (65536-X)%256;//X=計數值
        EA = 1;
        ET1 = 1;
        TR1 = 1;
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区在线免费观看 | 波多野结衣一区二区三区 | 欧美精品一区二区三区在线播放 | 欧美在线视频网 | 日韩一区二区三区精品 | 男女羞羞免费视频 | 亚洲一区电影 | 久久精品这里 | 成人二区 | 亚洲欧美视频一区 | 久久黄视频 | 天天干天天玩天天操 | 中文字幕第二区 | 成人欧美一区二区三区在线播放 | 羞羞视频在线观免费观看 | 日本精品一区二区三区视频 | 日韩在线精品视频 | 美国黄色毛片 | 久久久国产一区二区三区 | www日本在线观看 | 国产精品国产精品国产专区不卡 | 波多野结衣中文视频 | 日韩毛片免费视频 | 97视频成人 | 久久91精品国产 | 国产成人免费视频 | 欧美一区2区三区4区公司 | 亚洲免费高清 | 亚洲精品久久 | 国产精品国产三级国产aⅴ原创 | 中文字幕一区二区三区在线观看 | 欧美精品久久久久 | 国产精品三级 | 天天干天天谢 | 久久天堂网 | 亚洲精品68久久久一区 | 99re热精品视频 | 国产精品揄拍一区二区 | 久久久精品 | 欧美a级成人淫片免费看 | 玖玖精品 |