按鍵控制LED流水燈模式定時器時鐘

目錄

1.定時器

2. STC89C52定時器資源

3.定時器框圖

4. 定時器工作模式

5.中斷系統

1)介紹

2)流程圖:?編輯

3)STC89C52中斷資源

4)定時器和中斷系統

5)定時器的相關寄存器

6.按鍵控制LED流水燈模式


1.定時器

介紹:51單片機的定時器屬于單片機的內部資源,其電路的連接和運轉均在單片機內部完成

作用:

1)用于計時系統,可實現軟件計時,或者使程序每隔一固定時間完成一項操作

2)替代長時間的Delay,提高CPU的運行效率和處理速度(避免按鍵不靈敏)

)?

2. STC89C52定時器資源

定時器個數:3個(T0T1T2),?T0?和?T1?與傳統的51單片機兼容,T2是此型號單片機增加的資源

注意:定時器的資源和單片機的型號是關聯在一起的,不同的型號可能會有不同的定時器個數和操作方式,但一般來說,T0和T1的操作方式是所有51單片機所共有的

3.定時器框圖

提供計數單元的時鐘脈沖? ? ? ? ? ? ? ? ? ? ? ?????????時鐘計數??????????????????????????????產生中斷,執行定時任務

定時器在單片機內部就像一個小鬧鐘一樣,根據時鐘的輸出信號,每隔“一秒”,計數單元的數值就增加一,當計數單元數值增加到“設定的鬧鐘提醒時間”時,計數單元就會向中斷系統發出中斷申請,產生“響鈴提醒”,使程序跳轉到中斷服務函數中執行?

4. 定時器工作模式

STC89C52T0T1均有四種工作模式:

? 模式013位定時器/計數器

? 模式116位定時器/計數器(常用)

? 模式28位自動重裝模式

? 模式3:兩個8位計數器

工作模式1框圖:

1)TH0 TL0 計數系統最多可以存65535

2)TF0為標志位,通過標志位向中斷系統申請中斷

3)時鐘提供脈沖,一個脈沖使計數系統加 1 ,當計數系統到達65535后會溢出(計數系統為 0 )通過TF0產生中斷

4)/12或/6 為分頻? ?如:12MHZ/12 ==1 MHZ

SYSclk:系統時鐘,即晶振周期,本開發板上的晶振為12MHz? (system clock)

T0 Pin :單片機外部接口?

當有外部引腳來提供時鐘時,定時器為計數器? ? ? ? ? ? ? ? ?

5.中斷系統
1)介紹

2)流程圖:
3)STC89C52中斷資源

中斷源個數:8個(外部中斷0、定時器0中斷、外部中斷1、定時器1中斷、串口中斷、定時器2中斷、外部中斷2、外部中斷3

中斷優先級個數:4

中斷號:

注意:中斷的資源和單片機的型號是關聯在一起的,不同的型號可能會有不同的中斷資源,例如中斷源個數不同、中斷優先級個數不同等等

4)定時器和中斷系統

為了方便理解,這里使用的中斷系統圖是傳統51單片機的圖,STC89C52的中斷系統圖可參考手冊

從左下往右分別為 非門(數據取反) 或門(有1 則為1) 與門(有0則為0)

5)定時器的相關寄存器

寄存器是連接軟硬件的媒介,在單片機中寄存器就是一段特殊的RAM存儲器,一方面,寄存器可以存儲和讀取數據,另一方面,每一個寄存器背后都連接了一根導線,控制著電路的連接方式寄存器相當于一個復雜機器的“操作按鈕”

?

6.按鍵控制LED流水燈模式
#include <REGX52.H>
#include"Timer0.h"            //main.c
#include"Key.h"
#include<INTRINS.H>unsigned char KeyNum,LEDMode;
void main()
{P2=0xfe;Timer0Init();while(1){KeyNum=Key();if(KeyNum){if(KeyNum==1){LEDMode++;if(LEDMode>=2)LEDMode=0;}	}}
}
void Timer0_Routine() interrupt 1
{static unsigned int T0Count;TL0 = 0x18;		TH0 = 0xFC;		T0Count++;if(T0Count>=500){T0Count=0;if(LEDMode==0)P2=_crol_(P2,1);if(LEDMode==1)P2=_cror_(P2,1);}
}
#include <REGX52.H>
void Timer0Init(void)		//Timer0.c
{TMOD &= 0xF0;		TMOD |= 0x01;		TL0 = 0x18;		TH0 = 0xFC;		TF0 = 0;	TR0 = 1;ET0=1;EA=1;PT0=0;
}
#ifndef    ___Timer0__     //防止重定義
#define ___Timer0__        //Timer0.hvoid Timer0Init(void);		#endif
#include <REGX52.H>    //Key.c
#include"Delay.h"unsigned char Key()
{unsigned char KeyNumber = 0;if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1;}if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2;}if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3;}if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4;}return KeyNumber;
}
#ifndef    ___Key__ //防止重定義
#define ___Key__    //Key.hunsigned char Key();#endif
#include <REGX52.H>void Delay(unsigned int xms)		//延時 xms ms{unsigned char i, j;
while(xms)
{i = 2;j = 239;do{while (--j);} while (--i);xms--;
}
}
#ifndef __Delay_H  //防止重定義
#define __Delay_H  //Delay.hvoid Delay(unsigned int xms);	#endif

注意:可位尋址可以對單獨的位進行賦值(TCON),不可位尋址只能整體賦值(TMOD)

謝謝觀看

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42543.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42543.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42543.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一個最簡單的comsol斜坡穩定性分析例子——詳細步驟

一個最簡單的comsol斜坡穩定性分析例子——詳細步驟 標準模型例子—詳細步驟 線彈性模型下的地應力平衡預應力與預應變、土壤塑性和安全系數求解的輔助掃描

七月記錄上半

7.5 運行mysql腳本 mysql -u root -p 數據庫名 < 腳本名 7.6 使用screen在服務器后臺長期運行一個程序&#xff1a; screen -S 窗口名&#xff1a;創建窗口 執行程序腳本 ctrlad&#xff1a;退出窗口 screen -ls &#xff1a;查看所有窗口 screen -r 窗口號 &#…

SpringBoot整合Easy-Es最佳實踐

文章目錄 1.1 部署ES和Kibana1.2 SpringBoot整合ES及配置1.2.1 引入相關依賴1.2.2 YML相關配置 1.3 索引CRUD1.3.1 索引托管自動擋1.3.1.1 配置實體模板1.3.1.2 配置啟動模式 1.3.2 索引手動擋1.3.2.1 配置啟動模式1.3.2.2 配置實體模板1.3.2.3 創建索引1.3.2.4 查詢索引1.3.2.…

【INTEL(ALTERA)】為什么在設計遷移后,無法在Nios II BSP 編輯器中找到 DDR3 作為內存區域

目錄 說明 解決方法 說明 將設計從 Quartus II 14.1 及以下遷移到 Quartus prime 17.0 時&#xff0c;DDR3 不再被識別為Nios II BSP 編輯器區域中的內存區域。 解決方法 遷移設計后&#xff0c;從 Qsys 設計中移除 DDR3 IP&#xff0c;然后將其再次添加。生成 Qsys 文件后…

車牌號查車輛信息-車牌號查車輛信息接口-汽車API接口

接口簡介&#xff1a;輸入車牌號&#xff0c;返回車輛相關信息&#xff08;無車主信息&#xff09;。初始登記日期、上險日期、保險到期時間、車架號、品牌這些數據會返回&#xff0c;其他數據不一定全部返回&#xff0c;,詳細參數請查看返回接口文檔 一般在新車上險或過戶后第…

微信小程序消息通知(一次訂閱)

在微信公眾平臺配置通知模版 通過wx.login獲取code發送給后端 let that this // 登陸codewx.login({success: function (res) {if (res.code) {// 發送code到后端換取openid和session_keythat.setData({openCode: res.code})console.log(that.data.openCode, openCode);// 調…

數學系C++(六七)

目錄 * &指針與地址 void指針 指針可以等于&#xff1a; const 指向常量的指針 const int *px 常指針 int * const px 指向常量的常指針const 類型標識符 * const 指針名 指針加減&#xff1a; 指針恒等式 函數指針【待續】 指針型函數&#xff1a; 指向函數的…

大數據之路 讀書筆記 Day4 數據同步

回顧&#xff1a; Day 3 總結了無限客戶端的日志采集 大數據之路 讀書筆記 Day 3Day 2總結了瀏覽器端的日志采集 大數據之路 讀書筆記 Day 2 數據同步 阿里數據體系中的數據同步&#xff0c;主要指的是在不同的數據存儲系統之間進行數據的傳輸與更新&#xff0c;以保證數據的一…

【代碼隨想錄_Day26】56 合并區間 738 單調遞增的數字

Day26 OK&#xff0c;今日份的打卡&#xff01;第二十六天 以下是今日份的總結合并區間單調遞增的數字 以下是今日份的總結 56 合并區間 738 單調遞增的數字 今天的題目難度不低&#xff0c;盡量還是寫一些簡潔代碼 ^?_?^ 合并區間 思路&#xff1a; 先排序&#xff0c;按…

reactor和proactor模型

Reactor模型是非阻塞的同步IO模型。在主線程中也就是IO處理單元中&#xff0c;只負責監聽文件描述符上是否有事件發生&#xff0c;有的話就立即將事件通知工作線程&#xff0c;將socket可讀可寫事件放入請求隊列&#xff0c;交給工作線程處理。 總而言之就是主線程監聽有事件發…

apk反編譯修改教程系列-----修改apk 解除軟件限制功能 實例操作步驟解析_3【二十二】

在前面的幾期博文中有過解析去除apk中功能權限的反編譯步驟。另外在以往博文中也列舉了修改apk中選項功能權限的操作方法。今天以另外一款apk作為演示修改反編譯去除軟件功能限制的步驟。興趣的友友可以參考其中的修改過程。 課程的目的是了解apk中各個文件的具體作用以及簡單…

debain系統使用日志

賬號 vboxuser changeme ssh遠程登錄vbox虛擬機 https://www.cnblogs.com/BuzzWeek/p/17557981.html Terminal su - root changeme sudo apt-get update sudo apt-get -y install openssh-server #啟動sshd systemctl status sshd 設置允許ssh登錄vbox虛擬機 參考&#xf…

【密碼學】什么是密碼?什么是密碼學?

一、密碼的定義 根據《中華人民共和國密碼法》對密碼的定義如下&#xff1a; 密碼是指采用特定變換的方法對信息等進行加密保護、安全認證的技術、產品和服務。 二、密碼學的定義 密碼學是研究編制密碼和破譯密碼的技術科學。由定義可以知道密碼學分為兩個主要分支&#x…

69.WEB滲透測試-信息收集- WAF、框架組件識別(9)

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a; 易錦網校會員專享課 上一個內容&#xff1a;68.WEB滲透測試-信息收集- WAF、框架組件識別&#xff08;8&#xff09; 有無waf存在&am…

GESP C++一級真題

PDF圖片1-7 點贊??關注&#x1f60d;收藏?? 互粉必回&#x1f64f;&#x1f64f;&#x1f64f;

DPDK源碼分析之(1)libmbuf模塊

DPDK源碼分析之(1)libmbuf模塊 Author&#xff1a;OnceDay Date&#xff1a;2024年7月2日 漫漫長路&#xff0c;有人對你笑過嘛… 全系列文檔可參考專欄&#xff1a;源碼分析_Once-Day的博客-CSDN博客 參考文檔&#xff1a; DPDK downloadGetting Started Guide for Linux…

JAVA中的for-each(增強型for循環)

Java 8及之后的版本中與for-each循環&#xff08;也稱為增強型for循環&#xff09;和數組處理結合使用時&#xff0c;它可能類似于Lambda表達式或流&#xff08;Stream&#xff09;API中的上下文。 舉例&#xff1a; public class ArrLength {public static void main(String…

CGAL計算凸包(OSG進行可視化)

目錄 一、什么是凸包 二、運行步驟 1、安裝依賴項 2、編譯osg庫 3、運行代碼 4、運行截圖 一、什么是凸包 凸包是計算幾何中的一個基本概念,用來描述一個點集的最小凸包圍形。具體來說,給定一個點集,凸包是包含該點集的最小凸多邊形或凸多面體。 二維凸包:在二維平面…

迭代器模式在金融業務中的應用及其框架實現

引言 迭代器模式&#xff08;Iterator Pattern&#xff09;是一種行為設計模式&#xff0c;它提供了一種方法順序訪問一個聚合對象中的各個元素&#xff0c;而又不需要暴露該對象的內部表示。在金融業務中&#xff0c;迭代器模式可以用于遍歷復雜的數據結構&#xff0c;如交易…

算法-常見數據結構設計

文章目錄 1. 帶有setAll功能的哈希表2. LRU緩存結構3. O(1)時間插入刪除隨機(去重)4. O(1)時間插入刪除隨機(不去重)5. 快速獲取數據流中的中位數6. 最大頻率棧7. 全O(1)結構8. LFU緩存結構 本節的內容比較難, 大多是leetcodeHard難度級別的題目 1. 帶有setAll功能的哈希表 哈希…