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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3511|回復: 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中斷   

}

回復

使用道具 舉報

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次
回復

使用道具 舉報

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. }
復制代碼

回復

使用道具 舉報

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中斷   

}
回復

使用道具 舉報

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

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天射网站 | 91大神在线资源观看无广告 | 麻豆久久久久久 | 成人国产精品色哟哟 | 日韩在线播放第一页 | 国产精品视频偷伦精品视频 | 久久成人综合 | 成人性视频在线播放 | 超级乱淫av片免费播放 | 日韩三级在线观看 | 精品一区二区三区四区在线 | 一区二区在线不卡 | 四虎影音 | 亚洲婷婷一区 | 国产精品久久久久久久久久免费看 | 国产一区二区 | 国产精品久久久亚洲 | 欧美激情综合网 | 国产激情在线 | 中国美女撒尿txxxxx视频 | 国产成人免费 | 天天操天天射天天 | 日韩欧美中文字幕在线观看 | 国产精品国产成人国产三级 | 久草在线 | 欧美激情国产日韩精品一区18 | 欧美日韩精品一区 | 三级黄视频在线观看 | 毛片软件 | 国产精品一区在线 | 综合九九 | 欧美日韩在线观看一区 | 久久大陆 | 日日夜夜影院 | 国产成人一区二区三区 | 久久亚洲一区二区三区四区 | 欧美成人手机在线 | 国产wwwcom | 成人影视网址 | 国产精品欧美大片 | 99精品99 |