標(biāo)題:
這個單片機(jī)程序有些看不懂
[打印本頁]
作者:
小可愛i
時間:
2018-1-6 22:55
標(biāo)題:
這個單片機(jī)程序有些看不懂
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char //數(shù)據(jù)類型宏定義
#define uint unsigned int
#define out P0 //IO端口定義
/*******共陽數(shù)碼管 0 , 1 ,2 ,3 , 4 ,5 ,6 , 7, 8 ,9 ******/
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x01};
uint i = 0; //全局變量
uint cnt=0;
/***********主函數(shù)*******************************************************/
void main(void)
{
int j;
TMOD=0x15; // 定時器0工作于計(jì)數(shù)方式,工作方式1,16位計(jì)數(shù)
// 定時器1工作于定時方式,工作方式1,16位定時
TH0=0; // 清零計(jì)數(shù)器
TL0=0;
TH1=0x4C; // 12M晶振工作下,定時50ms
TL1=0x00;
TR0=1; // 啟動定時器0
TR1=1; // 啟動定時器1
IE=0x88; // 打開定時中斷1和總中斷
while(1)
{
P2=0x00; // 輸出百位
out = seg[cnt/100];
P2 = 0x01;
for(j=0;j<100;j++);
P2=0x00;
out = seg[cnt%100/10]; // 輸出十位
P2 = 0x02;
for(j=0;j<100;j++);
P2=0x00;
out = seg[cnt%10]; // 輸出個位
P2 = 0x04;
for(j=0;j<100;j++);
}
}
/***********計(jì)數(shù)器T0中斷處理函數(shù)******************************************/
void Timer1_ISR() interrupt 3
{
static char j = 0;
i++;
TH1=0x4C; // 重設(shè)定時器值,50ms @ 12MHz XTAL
TL1=0x00;
if(++j == 20) // 50ms * 20 = 1S
{
j = 0;
i = (TH0 << 8) | TL0; // 1S內(nèi)的計(jì)數(shù)值
cnt=i;
i=0;
TH0 = 0; // 清零計(jì)數(shù)
TL0 = 0;
}
}
復(fù)制代碼
作者:
zl2168
時間:
2018-1-7 20:44
先學(xué)理論,打基礎(chǔ),否則,問題多多,事倍功半。
作者:
candura
時間:
2018-1-9 08:39
具體是哪些地方看不懂呢?簡單瀏覽了一下代碼,這就是個在數(shù)碼管上顯示計(jì)數(shù)器的計(jì)數(shù)次數(shù)的程序啊。
開始配置計(jì)時器為50ms產(chǎn)生一次中斷,然后在中斷中判斷是否已經(jīng)到了1s(即進(jìn)入中斷20次),如果已經(jīng)到了1s就把定時器0的數(shù)值賦給cnt變量, 從而在主程序中通過數(shù)碼管將定時器0的計(jì)數(shù)顯示出來。
作者:
ahshmj
時間:
2018-1-9 10:26
你的程序里面,就沒有TL0增加的語句,所以TH0、TL0會一直不變。
你需要在你認(rèn)為合適的地方增加一句“TL0++;” (不知道你程序的意圖,所以也不知道這一句加在哪兒合適)。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1