|
|
電源電路就是單片機(jī)的供電電路,一般是3.3V或者5V,具體多少要參考各種型號(hào)的單片機(jī)的工作電壓,通常情況下是5V,這里是指通常情況下。
整體設(shè)計(jì)思路:
單片機(jī)中斷初始化程序應(yīng)完成du如下工作:
1、對(duì)TMOD賦值,以確定T0和T1的工作方式。
2、計(jì)算初值,并將其寫入TH0、TL0或TH1、TL1。
3、中斷方式時(shí),則對(duì)IE賦值,開(kāi)放中斷。
4、使TR0或TR1置位,啟動(dòng)定時(shí)/計(jì)數(shù)器定時(shí)或計(jì)數(shù)。
整體設(shè)計(jì)思路
單片機(jī)的中斷為向量中斷,即一響應(yīng)中斷就轉(zhuǎn)入固定入口地址執(zhí)行中斷服務(wù)程序。各中斷源服務(wù)程序的入口地址
兩個(gè)中斷入口間只相隔8字節(jié),難以安放一個(gè)完整的中斷服務(wù)程序。因此,通常在中斷入口地址處放置一條無(wú)條件轉(zhuǎn)移指令,使程序執(zhí)行轉(zhuǎn)向中斷服務(wù)程序入口。
定時(shí)器中斷是由單片機(jī)中的定時(shí)器溢出而申請(qǐng)的中斷。51單片機(jī)中有兩個(gè)定時(shí)器T0和T1
有電路仿真原理圖(10分);圖中元件參數(shù)標(biāo)注詳細(xì)正確(10分);有操作過(guò)程說(shuō)明(10分);有工作原理的文字描述(5分);對(duì)電路原理的描述全面(5分)。
1.電路仿真原理圖:
電路原理描述:
共陽(yáng)型數(shù)碼管字模:
{~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F }; //{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1, 0x86,0x8e};
//0,1,2,3,4,5,6,7,8,9
中斷裝置和中斷處理程序統(tǒng)稱為中斷系統(tǒng)。
中斷系統(tǒng)是計(jì)算機(jī)的重要組成部分。實(shí)時(shí)控制、故障自動(dòng)處理、計(jì)算機(jī)與外圍設(shè)備間的數(shù)據(jù)傳送往往采用中斷系統(tǒng)。中斷系統(tǒng)的應(yīng)用大大提高了計(jì)算機(jī)效率。
3.工作原理:
定時(shí)器/計(jì)數(shù)器初始化的一般步驟 51 單片機(jī)內(nèi)部定時(shí)器/計(jì)數(shù)器是可編程序的,通過(guò)程序設(shè)置寄存器對(duì)它進(jìn)行設(shè)定和控制,因此需要進(jìn)行初始化操作。
(1)確定定時(shí)器/計(jì)數(shù)器的工作方式:
通過(guò)對(duì) TMOD 中的方式選擇位 M1 和 M0 賦值實(shí)現(xiàn)。
(2)預(yù)置定時(shí)或計(jì)數(shù)初值:
根據(jù)定時(shí)時(shí)間或計(jì)數(shù)次數(shù),將計(jì)算的定時(shí)或計(jì)數(shù)初值寫入 TH0、TL0 或 TH1、TL1。如預(yù)置 T0 初值指令。
(3)開(kāi)放定時(shí)器/計(jì)數(shù)器的中斷,設(shè)定中斷優(yōu)先級(jí):
通過(guò)給 IE 寄存器中的相關(guān)位賦值來(lái)實(shí)現(xiàn)。
(4)啟動(dòng)定時(shí)器/計(jì)數(shù)器:
通過(guò)給 TCON 中的 TR1 或 TR0 置 1 實(shí)現(xiàn)。
5電路原理:
定時(shí)器/計(jì)數(shù)器的為自動(dòng)恢復(fù)初值(初值自動(dòng)裝入)的 8 位定時(shí)器/計(jì) 數(shù)器。TLx(x = 0,1)作為常數(shù)緩沖器,當(dāng) TLx 計(jì)數(shù)溢出時(shí),在溢出標(biāo)志 TFx 置 “1”的同時(shí),還自動(dòng)將 THx 中的初值送至 TLx,使 TLx 從初值開(kāi)始重新計(jì)數(shù)。 定時(shí)器/計(jì)數(shù)器的方式 2 工作過(guò)程如下圖所示。該方式可省去用戶軟件中重裝初
值的指令執(zhí)行時(shí)間,簡(jiǎn)化定時(shí)初值的計(jì)算方法,可以相當(dāng)精確地確定定時(shí)時(shí)間。
單片機(jī)源程序如下:
- #include <at89x51.h>
- #define LEDCHAR P1 //LED 字符I/O 口,P1.0~7對(duì)應(yīng)A~DP
- #define LEDSELECT P0 //LED 選擇I/O口. P0.0~5對(duì)應(yīng)LED的1~6
- unsigned char code uca_LEDCode[]=
- {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- //0,1,2,3,4,5,6,7,8,9
- unsigned char code uca_LEDSelect[]={0x01,0x02,0x04,0x08,0x10,0x20};
- //分別點(diǎn)亮第6,5,4,3,2,1號(hào)燈.
- unsigned char uca_LedNum[6];
- //存放數(shù)字的各個(gè)位
- //* 函數(shù)實(shí)現(xiàn)
- unsigned char * pucLedNum(unsigned long ulNumber)
- {
- if(ulNumber>999999)
- ulNumber=999999;
- if(ulNumber<0)
- ulNumber=0;
- uca_LedNum[0] = ulNumber/100000; //最高位
- uca_LedNum[1] = (ulNumber-100000*(long)uca_LedNum[0])/10000;
- uca_LedNum[2] = (ulNumber-100000*(long)uca_LedNum[0]-10000*(long)uca_LedNum[1])/1000;
- uca_LedNum[3] = (ulNumber-100000*(long)uca_LedNum[0]-10000*(long)uca_LedNum[1]
- -1000*(long)uca_LedNum[2])/100;
- uca_LedNum[4] = (ulNumber-100000*(long)uca_LedNum[0]-10000*(long)uca_LedNum[1]
- -1000*(long)uca_LedNum[2]-100*(long)uca_LedNum[3])/10;
- uca_LedNum[5] = (ulNumber-100000*(long)uca_LedNum[0]-10000*(long)uca_LedNum[1]
- -1000*(long)uca_LedNum[2]-100*(long)uca_LedNum[3]-10*(long)uca_LedNum[4]);
- return uca_LedNum;
- }
- void vShowOneNum(unsigned char ucOneNum,unsigned char ucOrder)
- {
- LEDSELECT=0;
- LEDCHAR=uca_LEDCode[ucOneNum];
- LEDSELECT=uca_LEDSelect[ucOrder]; //ucOrder:0~5(代表從左到右1~6)
- }
復(fù)制代碼
上個(gè)月做的設(shè)計(jì)。附件有單片機(jī)源碼,原理圖等。
用AD畫的原理圖,和proteus仿真工程文件以及設(shè)計(jì)的文檔。
都是自己原創(chuàng),分享一下。
全部資料51hei下載地址:
定時(shí)器控制單只數(shù)碼管循環(huán)顯示0_F.rar
(72.48 KB, 下載次數(shù): 25)
2020-9-15 13:21 上傳
點(diǎn)擊文件名下載附件
基于單片機(jī)內(nèi)部定時(shí)器中斷計(jì)數(shù)器設(shè)計(jì).docx
(455.46 KB, 下載次數(shù): 23)
2020-9-15 13:21 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|