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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2097|回復: 9
收起左側

單片機計數器的問題,累計達到1000后,led顯示加一 有程序看不懂,詳細在文章里面

[復制鏈接]
ID:974245 發表于 2022-1-4 09:17 | 顯示全部樓層 |閱讀模式
案例:基于CD4511的兩位數顯示脈沖計數器
計數器T0,工作方式0,對外部脈沖進行計數,當外部脈沖數量達到1000后,LED顯示加一。
我就不太懂那個程序“外部脈沖數量達到1000后,LED顯示加一”,是怎么加到1000的。
是這段程序嗎?
void Counter0(void){
if(TF0==1){
TF0=0;
/*計數器初值設置*/
TH0=0xe0;
TL0=0x18;
counter++;
if(counter>=99){
counter=0;
}
}
}


還有這個也看不懂,返回函數是什么?
//顯示函數
void disply(unsigned char BCD){
unsigned char x,y;//定義x,y兩個變量
x=BCD%10;//取i的個位字符BCD編碼放于x中
y=BCD/10;//取i的十位字符BCD編碼放于y中

y<<=4;//x左移4位
data_buf=y|x;//返回各位與十位的組合BCD編碼并送至P2口顯示

}


總程序如下:(心態崩了看不懂,求大佬指點)
  1. #include <reg51.h>
  2. void Counter0(void);
  3. void Counter_Init(void);
  4. void disply(unsigned char BCD);
  5. sfr data_buf=0xA0;//顯示數據端口
  6. unsigned char counter;//全局變量,用于保存計數值
  7. void main()
  8. {
  9.         counter=0;
  10.         Counter_Init();
  11.         while(1){
  12.                 Counter0();
  13.                 disply(counter);
  14.         }
  15.         
  16. }

  17. void Counter_Init(void){
  18.         TMOD=0x04;//工作方式的設置
  19.         /*計數器初值設置*/
  20.         TH0=0xe0;//初始值設置,7192轉為13位后的高8位
  21.         TL0=0x18;//初始值設置,7192轉為13位后的低8位
  22.         /*關閉計數器中斷*/
  23.         EA=0;
  24.         ET0=0;
  25.         /*啟動計數器*/
  26.         TR0=1;//啟動T0

  27. }

  28. void Counter0(void){
  29.         if(TF0==1){
  30.                 TF0=0;
  31.                 /*計數器初值設置*/
  32.                 TH0=0xe0;
  33.                 TL0=0x18;
  34.                 counter++;
  35.                 if(counter>=99){
  36.                         counter=0;
  37.                 }
  38.         }
  39. }

  40. //顯示函數
  41. void disply(unsigned char BCD){
  42.         unsigned char x,y;//定義x,y兩個變量
  43.         x=BCD%10;//取i的個位字符BCD編碼放于x中
  44.         y=BCD/10;//取i的十位字符BCD編碼放于y中
  45.         
  46.         y<<=4;//x左移4位
  47.         data_buf=y|x;//返回各位與十位的組合BCD編碼并送至P2口顯示
  48.         
  49. }
復制代碼





回復

使用道具 舉報

ID:8222 發表于 2022-1-4 13:50 | 顯示全部樓層
void Counter_Init(void){
        TMOD=0x04;//工作方式的設置
        /*計數器初值設置*/
        TH0=0x1c;//初始值設置,7192轉為13位后的高8位
        TL0=0x18;//初始值設置,7192轉為13位后的低8位
        /*關閉計數器中斷*/
        EA=0;
        ET0=0;
        /*啟動計數器*/
        TR0=1;//啟動T0

}

這紅色地方錯了。原理是計數到1000,TF0=1,counter就加1。13位的計數器計數范圍為8192,計數1000,需要預置7192,十六進為0x1C18。
回復

使用道具 舉報

ID:887371 發表于 2022-1-4 14:08 | 顯示全部樓層
樓主是對定時器的工作模式0不理解,百度搜索下。
我簡單說下:
T0的值(TH0*32+TL0%32),當定時器用時,每經過一個時鐘,該值加1.當計數器用時,每收到一個脈沖,該值加1.當值等于8192時,產生中斷,TF0自動置1.

樓主程序中
  1. TH0=0xe0;//TH0=7192/32;
  2. TL0=0x18;//TL0=7192%32;
復制代碼

7192+1000=8192,所以是脈沖數量到1000,產生中斷。
假如定時器初值為(8192-100),那么是脈沖數量到100,產生中斷。
假如定時器初值為0,那么是脈沖數量到8192,產生中斷。
回復

使用道具 舉報

ID:887371 發表于 2022-1-4 14:15 | 顯示全部樓層
溫xyz 發表于 2022-1-4 13:50
void Counter_Init(void){
        TMOD=0x04;//工作方式的設置
        /*計數器初值設置*/

紅色地方沒錯,13位和16位計算方法不同。
請參考3樓帖子。
回復

使用道具 舉報

ID:974245 發表于 2022-1-4 15:42 | 顯示全部樓層
datouyuan 發表于 2022-1-4 14:08
樓主是對定時器的工作模式0不理解,百度搜索下。
我簡單說下:
T0的值(TH0*32+TL0%32),當定時器用時,每 ...

好的謝謝您,我再理解理解
回復

使用道具 舉報

ID:844772 發表于 2022-1-4 17:24 | 顯示全部樓層
真是不懂13位的時候,為啥這么設計呢:TH的高8位,TL的低5位的計數值
回復

使用道具 舉報

ID:624769 發表于 2022-1-4 20:04 | 顯示全部樓層
glinfei 發表于 2022-1-4 17:24
真是不懂13位的時候,為啥這么設計呢:TH的高8位,TL的低5位的計數值

好處是, 32個周期之后, TH就會加1,對于不開中斷,判斷時間間隔來講,只要讀取TH,就能得到一個比較好的時間間隔寬度,在單片機速度比較慢,比較追求效率的時代,13位定時器有著得天獨厚的優勢。
回復

使用道具 舉報

ID:844772 發表于 2022-1-5 08:41 | 顯示全部樓層
188610329 發表于 2022-1-4 20:04
好處是, 32個周期之后, TH就會加1,對于不開中斷,判斷時間間隔來講,只要讀取TH,就能得到一個比較好 ...

原來是這樣,還想著是原始芯片某種設計限制造成的。
回復

使用道具 舉報

ID:887371 發表于 2022-1-6 10:13 | 顯示全部樓層
glinfei 發表于 2022-1-4 17:24
真是不懂13位的時候,為啥這么設計呢:TH的高8位,TL的低5位的計數值

單片機的AD也是類似設計。
高8位AD占用一個字節,10位AD的低2位,12位AD的低4位占用一個字節。
如需要8位精度只需讀高8位,提高了效率。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩综合 | 亚洲免费视频一区 | 蜜桃视频一区二区三区 | 亚洲精品视频在线播放 | 国产激情视频在线观看 | 国产真实乱全部视频 | 国产午夜久久 | 亚洲三区视频 | 欧美αv| 在线观看视频福利 | 亚洲精品成人 | 91视频大全| 国产精品一区在线观看 | 久久久妇女国产精品影视 | 中文字幕一区在线 | 成人特级毛片 | 亚洲人va欧美va人人爽 | 国产日韩欧美在线观看 | 韩国av一区二区 | 男人的天堂久久 | 国产欧美精品一区二区三区 | 国产一级一级毛片 | 欧美8一10sex性hd| 在线观看中文字幕av | 免费在线观看一级毛片 | 精品99在线| 欧美极品视频 | 91精品国产91久久综合桃花 | 91成人精品 | 在线看亚洲 | 亚洲成av人片在线观看 | 国产一二三区在线 | 在线视频中文字幕 | av中文字幕在线播放 | 成人免费高清 | 国产成人免费视频网站视频社区 | 天天看天天操 | 久久精品一区二区 | 亚洲综合无码一区二区 | 人妖av | 天天插天天操 |