《單片機(jī)原理 定時器計數(shù)器-單片機(jī)原理-實驗報告》由會員分享,可在線閱讀,更多相關(guān)《單片機(jī)原理 定時器計數(shù)器-單片機(jī)原理-實驗報告(9頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、寧德師范學(xué)院計算機(jī)系
實驗報告
(2014—2015學(xué)年 第 2學(xué)期)
課程名稱 單片機(jī)原理
實驗名稱 定時器與計數(shù)器
專 業(yè) 計算機(jī)科學(xué)與技術(shù)(非師)
年 級 12級
學(xué)號 B2012102147 姓名 王 秋
指導(dǎo)教師 楊烈君
實驗日期 2015.5.27
實驗?zāi)康模?
1. 通過實驗學(xué)習(xí)單片機(jī)的定時器計數(shù)器功能,學(xué)會編程實現(xiàn)單片機(jī)的定時與計數(shù)功能;
2. 掌
2、握中斷處理程序的編程方法;
3. 掌握查表的編程方法。
實驗要求:
1. 在Proteus軟件中畫好51單片機(jī)最小核心電路,包括復(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)境):
計算機(jī)、Proteus ISIS 7 Professional應(yīng)用程序、Keil應(yīng)用程序
實驗內(nèi)容:
使用內(nèi)部定時器與
3、外部中斷實現(xiàn):
1. 實現(xiàn)單按鍵控制Led燈閃爍 (1s變化一次)
2. 實現(xiàn)0-99碼表 ( 按一次開始計時1S加一,第二次停止,第三次清零 )
參考原理圖
實驗步驟、實驗結(jié)果及分析:
1、使用Proteus ISIS 7 Professional應(yīng)用程序,建立一個.DSN文件
2、在“庫”下拉菜單中,選中“拾取元件”(快捷鍵P),分別選擇以下元件:AT89C51、LED-YELLOW、BUTTON、7SEG-MPX8-CA-BLUE、RESPACK-8。
3、構(gòu)建仿真電路
4、創(chuàng)建一個
4、Keil應(yīng)用程序:新建一個工程項目文件;為工程選擇目標(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) //定義時間間隔
{
5、
while(x--);
}
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
6、//外部中斷0的中斷服務(wù)程序
{
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; //
7、定時器T0的低8位賦初值
Led1=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 DispBu
8、f[8];
uchar sec=0;
uchar 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_
9、null;
DispBuf[0]=disp_null;
}
void display()
{
uchar i;
for(i=0;i<8;i++)
{
P2=0;
P2=1<
10、ff; //計數(shù)重新賦初值
TL0=15526%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;
s
11、ec=0;
PutTime();
}
}
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碼表,按一次,開始計
12、時1S加1,第二次停止
圖3 0-99碼表,按第三次清零
實驗總結(jié)(包括過程總結(jié)、心得體會及實驗改進(jìn)意見等):
過程總結(jié):
1. 在實現(xiàn)單按鍵控制Led燈閃爍 ( 用定時器實現(xiàn)1s變化一次)時,由單片機(jī)內(nèi)部定時器1,按方式1工作,即作為16位定時器使用每0.05秒鐘T1溢出中斷一次,按鍵采用中斷實現(xiàn)。
2. 51單片機(jī)的外部中斷INTx(INT0和INT1)可以用程序控制為電平觸發(fā)或負(fù)邊沿觸發(fā),通過編程對定時器/計數(shù)器控制寄存器TCON中的IT0和IT1位進(jìn)行清“0”或置“1”。若ITx(X=0,1)為0,則外部中斷INTx程控為電平觸發(fā),由INTx引腳上所檢測到的低
13、電平觸發(fā);若ITX=1,則外部中斷INTx由負(fù)邊沿觸發(fā)。
心得體會:
1. 實現(xiàn)0-99碼表 ( 按一次開始計時1S加一,第二次停止,第三次清零 )在Proteus軟件中畫好51單片機(jī)最小核心電路,包括復(fù)位電路和晶振電路,在電路中增加按鍵、Led燈、八位7段數(shù)碼管(共陽/共陰自選),將P2口作數(shù)據(jù)輸出口與7段數(shù)碼管數(shù)據(jù)引腳相連 ,P3引腳輸出位選控制信號。
2. 通過實驗學(xué)習(xí)單片機(jī)的定時器計數(shù)器功能,學(xué)會了編程實現(xiàn)單片機(jī)的定時與計數(shù)功能;掌握了中斷處理程序的編程方法;掌握查表的編程方法。
指導(dǎo)教師評語:
成績評定
教師簽字
年 月 日
備注:
注:1、報告內(nèi)的項目或設(shè)置,可根據(jù)實際情況加以補(bǔ)充和調(diào)整
2、教師批改學(xué)生實驗報告應(yīng)在學(xué)生提交實驗報告10日內(nèi)