《單片機原理 定時器計數(shù)器-單片機原理-實驗資料報告材料》由會員分享,可在線閱讀,更多相關(guān)《單片機原理 定時器計數(shù)器-單片機原理-實驗資料報告材料(9頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、word
師學(xué)院計算機系
實驗報告
〔2014—2015學(xué)年第2學(xué)期〕
課程名稱 單片機原理
實驗名稱 定時器與計數(shù)器
專 業(yè) 計算機科學(xué)與技術(shù)〔非師〕
年 級 12級
學(xué)號 B2012102147 王 秋
指導(dǎo)教師 烈君
實驗日期 2015.5.27
實驗?zāi)康模?
1. 通過實驗學(xué)習(xí)單片機的定時器計數(shù)器功能,學(xué)會編程實現(xiàn)單片機的定時與計數(shù)功能;
2. 掌握中斷處
2、理程序的編程方法;
3. 掌握查表的編程方法。
實驗要求:
1. 在Proteus軟件中畫好51單片機最小核心電路,包括復(fù)位電路和晶振電路
2. 在電路中增加按鍵、Led燈、八位7段數(shù)碼管(共陽/共陰自選),將P2口作數(shù)據(jù)輸出口與7段數(shù)碼管數(shù)據(jù)引腳相連 ,P3引腳輸出位選控制信號。
3. 實現(xiàn)單按鍵控制Led燈閃爍 〔 用定時器實現(xiàn)1s變化一次〕
4. 實現(xiàn)0-99碼表 〔 按一次開始計時1S加一,第二次停止,第三次清零 〕
實驗設(shè)備〔環(huán)境〕:
計算機、Proteus ISIS 7 Professional應(yīng)用程序、Keil應(yīng)用程序
實驗容:
使用部定時器與外部中斷實現(xiàn)
3、:
1. 實現(xiàn)單按鍵控制Led燈閃爍 〔1s變化一次)
2. 實現(xiàn)0-99碼表 〔 按一次開始計時1S加一,第二次停止,第三次清零 〕
參考原理圖
實驗步驟、實驗結(jié)果與分析:
1、使用Proteus ISIS 7 Professional
2、在“庫〞下拉菜單中,選中“拾取元件〞〔快捷鍵P〕,分別選擇以下元件:AT89C51、LED-YELLOW、BUTTON、7SEG-MPX8-CA-BLUE、RESPACK-8。
3、構(gòu)建仿真電路
4、創(chuàng)建一個Keil應(yīng)用程序:新建一個工程項目文件;為工
4、程選擇目標(biāo)器件〔AT89C52〕;為工程項目創(chuàng)建源程序文件并輸入程序代碼;保存創(chuàng)建的源程序項目文件;把源程序文件添加到項目中。
5、把用戶程序經(jīng)過編譯后生成的HEX文件添加到仿真電路中的處理器中〔編輯元件→文件路徑〕
程序代碼:
1. 實現(xiàn)單按鍵控制Led燈閃爍 〔1s變化一次)
#include"reg51.h"
#define uchar unsigned char
uchar Time_50ms;
sbit Led1=P1^0;
uchar Mode;
void delay(int x) //定義時間間隔
{
while(x--);
}
5、
void LedFlash() interrupt 1 //溢出中斷的中斷服務(wù)程序
{
if(Mode==1)
{
Time_50ms++; //每50ms累加1次
TH0=15526/0xff; //計數(shù)重新賦初值
TL0=15526%0xff;
if(Time_50ms>=20) //當(dāng)為1s時
{
Led1=~Led1;
Time_50ms=0;
}
}
}
void int0() interrupt 0 //外部中斷0的中斷服務(wù)程序
{
6、 Mode=(Mode+1)%2; //更改按鍵標(biāo)志值
if(Mode==0)
{
Led1=0;
Time_50ms=0;
}
}
void main()
{
IE=0x83; //允許定時器0中斷和外部中斷0
TMOD=0x01; //定時方式,設(shè)定工作方式1
TCON=0x11; //打開定時器0和設(shè)置外部中斷為邊沿觸發(fā)
TH0=(65536-50000)/256; //定時器T0的高8位賦初值
TL0=(65536-50000)%256; //定時器T0的低8位賦初值
Led
7、1=0;
while(1);
}
圖1 單按鍵控制Led燈閃爍,1s變化一次
2. 實現(xiàn)0-99碼表 〔 按一次開始計時1S加一,第二次停止,第三次清零 〕
#include"reg51.h"
#define uchar unsigned char
#define disp_null 10
uchar code tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//共陽數(shù)碼管顯示0~9的段碼表
uchar DispBuf[8];
uchar sec=0;
u
8、char Time_50ms;
uchar Mode=2;
void delay(int x) //定義時間間隔
{
while(x--);
}
void PutTime()
{
DispBuf[7]=sec%10;
DispBuf[6]=sec/10;
DispBuf[5]=disp_null;
DispBuf[4]=disp_null;
DispBuf[3]=disp_null;
DispBuf[2]=disp_null;
DispBuf[1]=disp_null;
DispBuf[0]=disp
9、_null;
}
void display()
{
uchar i;
for(i=0;i<8;i++)
{
P2=0;
P2=1<
10、5526%0xff;
if(Time_50ms>=20) //當(dāng)為1s時
{
Time_50ms=0;
sec++;
if(sec>99)
sec=0;
PutTime();
}
}
}
void int0() interrupt 0 //外部中斷0的中斷服務(wù)程序
{
Mode=(Mode+1)%3; //更改按鍵標(biāo)志值
if(Mode==1);
if(Mode==2)
{
Time_50ms=0;
sec=0;
PutTime();
11、 }
}
void main()
{
P1=0x00;
IE=0x83; //允許定時器0中斷和外部中斷0
TMOD=0x01; //定時方式,設(shè)定工作方式1
TCON=0x11; //打開定時器0和設(shè)置外部中斷為邊沿觸發(fā)
TH0=(65536-50000)/256; //定時器T0的高8位賦初值
TL0=(65536-50000)%256; //定時器T0的低8位賦初值
while(1)
display();
}
圖2 0-99碼表,按一次,開始計時1S加1,第二次停止
圖3 0-99碼
12、表,按第三次清零
實驗總結(jié)〔包括過程總結(jié)、心得體會與實驗改良意見等〕:
過程總結(jié):
1. 在實現(xiàn)單按鍵控制Led燈閃爍 〔 用定時器實現(xiàn)1s變化一次〕時,由單片機部定時器1,按方式1工作,即作為16位定時器使用每0.05秒鐘T1溢出中斷一次,按鍵采用中斷實現(xiàn)。
2. 51單片機的外部中斷INTx(INT0和INT1)可以用程序控制為電平觸發(fā)或負(fù)邊沿觸發(fā),通過編程對定時器/計數(shù)器控制存放器TCON中的IT0和IT1位進展清“0〞或置“1〞。假如ITx〔X=0,1〕為0,如此外部中斷INTx程控為電平觸發(fā),由INTx引腳上所檢測到的低電平觸發(fā);假如ITX=1,如此外部中斷INTx由負(fù)邊
13、沿觸發(fā)。
心得體會:
1. 實現(xiàn)0-99碼表 〔 按一次開始計時1S加一,第二次停止,第三次清零 〕在Proteus軟件中畫好51單片機最小核心電路,包括復(fù)位電路和晶振電路,在電路中增加按鍵、Led燈、八位7段數(shù)碼管(共陽/共陰自選),將P2口作數(shù)據(jù)輸出口與7段數(shù)碼管數(shù)據(jù)引腳相連 ,P3引腳輸出位選控制信號。
2.通過實驗學(xué)習(xí)單片機的定時器計數(shù)器功能,學(xué)會了編程實現(xiàn)單片機的定時與計數(shù)功能;掌握了中斷處理程序的編程方法;掌握查表的編程方法。
指導(dǎo)教師評語:
成績評定
教師簽字
年月日
備注:
注:1、報告的項目或設(shè)置,可根據(jù)實際情況加以補充和調(diào)整
2、教師批改學(xué)生實驗報告應(yīng)在學(xué)生提交實驗報告10日
9 / 9