單片機基礎知識


一、單片機內部資源三大指標
1、FLASH:程序存儲空間,相當于電腦的硬盤ROM,掉電內容保留,檫寫次數10萬次。
2、RAM:數據存儲空間,相當于電腦的內存,掉電后內容丟失,可無限次擦寫。
3、SFR:(特殊功能寄存器)
二、單片機最小系統
1、電源電路
一般都用電腦USB接口供電(電壓5V電流500mA),一口兩用也可以寫入程序。
2、復位電路
3、晶振電路
三、各個引腳的作用
AT89C52中EA非表示中斷總開關,只有接高電平中斷功能才能使用。
P0、P1、P2、P3四種I/0端口,每種8個引腳,共32個I/0口,其中P0沒有內置上拉電阻,需要在外圍電路中添加,其他三個均有。
I/O有三種狀態,如下圖:



四、定時器功能
時鐘周期為晶振頻率分之一,如:1/11.0592M,普通51單片機一個機器周期為12個時鐘周期。每經過一個機器周期寄存器自動加一
STC89C52有2個定時器和計數器。TF為定時器溢出標志位,溢出時TF為高電平,TR為定時器控制位,為1時,開始計時,清零時停止計時。






如圖為實例程序,TMOD選擇模式,TH0、TL0置初值,TR0開始計數。 右圖為定時器初值的計算方法。
五、中斷一般與定時器一起用。
void timer1_init() //定時器函數
{TMOD |= 0x10;
TMOD &= 0xdf;
TH1 = 0xFC;
TL1 = 0x67;
TR1 = 1;}
void int_init() //中斷開啟
{ET1 = 1;
EA = 1;}
void interrupt_timer1() interrupt 3 //觸發中斷函數 以TF1為觸發信號。觸發后自動歸為低電平。
{ static uint32 sec = 0;
TH1 = 0xFC;
TL1 = 0x67;
counter++;
if(counter == 1000)
{ sec++;
counter = 0;
a[0] = sec%10;
a[1] = sec/10%10;
a[2] = sec/100%10;
a[3] = sec/1000%10;
a[4] = sec/10000%10;
a[5] = sec/100000%10;}
refresh_led();}


y = 8x +3,y為中斷觸發地址,x為中斷SFR.
默認中斷優先級如下:

{TMOD |= 0x10;
TMOD &= 0xdf;
TH1 = 0xFC;
TL1 = 0x67;
TR1 = 1;}
void int_init() //中斷開啟
{ET1 = 1;
EA = 1;}
void interrupt_timer1() interrupt 3 //觸發中斷函數 以TF1為觸發信號。觸發后自動歸為低電平。
{ static uint32 sec = 0;
TH1 = 0xFC;
TL1 = 0x67;
counter++;
if(counter == 1000)
{ sec++;
counter = 0;
a[0] = sec%10;
a[1] = sec/10%10;
a[2] = sec/100%10;
a[3] = sec/1000%10;
a[4] = sec/10000%10;
a[5] = sec/100000%10;}
refresh_led();}


y = 8x +3,y為中斷觸發地址,x為中斷SFR.

