㈠ 求AT89S52單片機原理圖,謝謝。
XTAL2:
系統時鍾的反相放大器輸出端,一般在設計上只要在XTAL1和XTA L2上接上一隻石英振盪晶體系統就可以動作了,此外可以在兩引腳與地之間加入一20PF的小電容,可以使系統更穩定,避免雜訊干擾而死機。
RESET:
AT89S52的重置引腳,高電平動作,當要對品片重置時,只要對此引腳電平提升至高電平並保持兩個機器周期以上的時間,AT89S51便能完成系統重置的各項動作,使得內部特殊功能寄存器之內容均被設成已知狀態,並且至地址0000H處開始讀入程序代碼而執行程序。
VCC:
AT89S52電源正端輸入,接+SVo
EA/Vpp:
"EA",為英文"External Access。的縮寫,表示存取外部程序代碼之意,低電平動作,也就是說當此引腳接低電平後,系統會取用外部的程序代碼〔存於外部EPROM中)來執行程序。因此在8031及8032中,EA引腳必須接低電平,ICI為其內部無程序存儲器空間。如果是使川8751內部程1-擠空間時,此引腳要接成高電平。此外,在將程序代碼燒錄至8751內部EPROM時,可以利用此引腳來輸入21V的燒錄高壓(Vpp).
VSS:
電源地端。
XTALI:
單晶元系統時鍾的反相放大器輸入端。
ALE/PROG:
ALE是英文Address Latch Enable」的縮寫,表示地址鎖存器啟用信號。AT89S52可以利用這支引腳來觸發外部的8位鎖存器(如74LS373),將端u0的地址匯流排(A0-A7)鎖進鎖存器中,因為AT89S52是以多T的方式送出地址及數據。平時在程序執行時ALE引腳的輸出頻率約是系統工作頻率的1/6,因此可以用來驅動其他周邊晶片的時基輸入。此外在燒錄8751程序代碼時,此引腳會被當成程序規劃的特殊功能來使用。
PSEN:
PSEN是「Program Store Enable」的縮寫,其意為程序儲存啟用,當8051被設成為讀取外部程序代碼工作模式時(EA=0),會送出此信一號以便取得程序代碼,通常這支腳是接到EPROM的OE腳。AT89S52可以利用PSEN及RD引腳分別啟用存在外部的RAM與EPROM,使得數據存儲器與程序存儲器可以合並在一起而共用64K的定址范圍。
PORTO(P0.0~P0.7 ):
埠0是一個8位寬的開路汲極(Open Drain)雙向輸出入埠,共有8個位,P0.0表示位0, P0.1表示位I,依此類推。其他三個v0端Li (P1、P2, P3)則不共有此電路組態,而是內部有一提升電路,PO在當做I/O用時可以推動8個LS的TTL負載。如果當EA引腳為低電平時(即取用外部程序代碼或數據存儲器),PO就以多工方式提供地址匯流排(A0--A7)及數據匯流排(DO-D7)。設計者必須外加一鎖存器將埠0送出的地址栓鎖住成為AO-A7,再配合埠2所送出的A8-A15合成一充整的16位地址匯流排,而定址到64K的外部存儲器空間。
PORT2(P2.0~ P2.7):
埠2是具有內部提升電路的雙向1/O埠,娜一個引腳可以推動4個LS的TTL負載,若將埠2的輸出設為高電平時,此端日便能當成輸入端日來使用。P2除了當做一般I/O埠使用外,若是在AT89S52擴充外接程序存儲器或數據存儲器時,也提供地址匯流排的高位元組A8-A15,這個時候P2便不能當做I/O來使用了。PORT2(P2.0-P2.7): 埠2是具有內部提升電路的雙向I/O埠,每一個引腳可以推動4個LS的TTL負載,若將埠2的輸出設為高電平時,此埠便能當成輸入埠來使用。P2除了當做一般I/O端日使用外,若是在AT89S52擴充外接程序存儲器或數據存儲器時,也提供地址匯流排的高位元組A8/ A15,這個時候P2便不能當做1/O來使用了。
PORTI (PI.0--PI.7):
埠1也是具有內部提升電路的雙向1/O埠,其輸出緩沖器可以推動4個LS TTL負載,同樣地若將埠1的輸出設為高電平,便是山此埠來輸入數據。如果是使用8052或是8032的話,P1.0又當做定時器2的外部脈沖輸入腳,而P1.1可以有T2EX功能,可以做外部中斷輸入的觸發腳位。
PORT3(P3.0--P3.7):
埠 3也具有內部提升電路的雙向I/O埠,其輸出緩沖器可以推動4個TTL負載,同時還多工具有其他的額外特殊功能,包括串列通信、外部中斷控制、計時計數控制及外部數據存儲器內容的讀取或寫入控制等功能
㈡ AT89S51和AT89S52有何不同
at89s51單片機是美國ATMEL公司生產的低功耗,高性能CMOS
8位單片機,片內含4K
bytes的可系統編程的Flash只讀程序存儲器,器件採用ATMEL公司的高密度,非易失性存儲技術生產,兼容標准8051指令系統及引腳。它集Flash程序存儲器,既可在線編程(ISP)也可用傳統方法進行編程及通用8位微處理器於單片晶元中,ATMEL公司的功能強大,低價at89s51單片機可為您提供許多高性價比的應用場合,可靈活應用於各種控制領域。
at89s52單片機是一種低功耗、高性能CMOS
8位微控制器,具有8K
在系統可編程Flash
存儲器。使用Atmel
公司高密度非易失性存儲器技術製造,與工業80C51
產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統可編程,亦適於常規編程器。在單晶元上,擁有靈巧的8
位CPU
和在系統可編程Flash,使得at89s52單片機為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。
at89s52具有以下標准功能:
8k位元組Flash,256位元組RAM,32
位I/O
口線,看門狗定時器,2
個數據指針,三個16
位定時器/計數器,一個6向量2級中斷結構,全雙工串列口,片內晶振及時鍾電路。另外,AT89S52
可降至0Hz
靜態邏輯操作,支持2種軟體可選擇節電模式。空閑模式下,CPU停止工作,允許RAM、定時器/計數器、串口、中斷繼續工作。掉電保護方式下,RAM內容被保存,振盪器被凍結,單片機一切工作停止,直到下一個中斷或硬體復位為止。
㈢ at89s52單片機的機器周期是怎樣組成的
51系列單片機一個機器周期等於12個時鍾周期,即所接晶振頻率為12MHz時,機器周期為1us.
順便說下指令周期,指令周期就是一條指令運行所需時間,一般是以機器周期為單位的,例如nop指令周期為1個機器周期,而DJNZ指令周期為3個機器周期。
㈣ 分析at89s52單片機的存儲器結構
1.程序存儲器
設計人員編寫的程序存放在微處理器的程序存儲器中。
at89s52具有64kb程序存儲器定址空間,它是用於存放用戶程序、數據和表格等信息,程序存儲器的結構如圖1所示。
圖1 at89s52程序存儲器的結構
at89s52片內片外的程序存儲器在統一邏輯空間中,地址從0000h~ffffh,共有64k位元組范圍。引腳接高電平時,程序從片內程序存儲器0000h開始執行,即訪問片內存儲器。當pc值超出片內rom容量時,會自動轉向片外程序存儲器空間執行。引腳接低電平時,迫使系統全部執行片外程序存儲器0000h開始存放的程序。
2.數據存儲器
at89s52 有256 位元組片內數據存儲器。地址為00h~ffh。這256個單元共分為兩部分。其一是地址從00h~7fh單元(共128個位元組)為用戶數據ram。從80h~ffh地址單元(也是128個位元組)為特殊寄存器(sfr)單元。高128 位元組與特殊功能寄存器重疊,也就是說高128位元組與特殊功能寄存器有相同的地址,而物理上是分開的。
在00h~1fh共32個單元中被均勻地分為四塊,每塊包含八個8位寄存器,均以r0~r7來命名,稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為r0~r7,利用psw的第3和第4位(rs0和rs1),即可選中這四組通用寄存器。
內部數據存儲器的20h—2fh單元為位定址區,可作為一般單元用位元組定址,也可對它們的位進行定址,位定址區地址如表1所示
表1 ram位定址區地址表
3. 中斷服務程序的入口地址
在程序存儲區中,為中斷服務程序保存了一段中斷服務程序的入口地址:其中一組特殊單元是0003h—0032h,各個單元各有用途,它們被分為六段,每個段8個位元組,專門留給中斷服務程序使用,被稱為中斷矢量區。at89s52共有8個中斷源,6個中斷矢量,它們的定義如下表2所,
表2 中斷服務程序的入口地址
4.特殊功能寄存器sfr(special? function register)
特殊功能寄存器是指有特殊用途的寄存器集合,也稱為專用寄存器,本質上是一些具有特殊功能的片內ram單元,反映單片機的運行狀態,很多功能也通過特殊功能寄存器來定義和控製程序的執行。
at89s52單片機內部高128(80~ffh)地址分配給特殊功能寄存器。這個地址空間和晶元內數據存儲器的高128位元組地址完全重疊,但兩者在物理硬體上是完全獨立的,用定址方式來區分這個完全重疊的地址空間。使用直接定址方式訪問這個地址空間時,訪問的是特殊功能寄存器;使用間接定址方式訪問這個地址空間時,訪問的是數據存儲器。
at89s52有32個特殊功能寄存器,它們被離散地分布在內部ram的80h~ffh地址中,這些寄存的功能已作了專門的規定,用戶不能修改其結構。
5.幾個注意問題
(1)地址的重疊性
單片機中的所有存儲器都必須分配地址,可以定址的地址范圍為64kb,數據存儲器與程序存儲器都佔用相同的地址。
程序存儲器中片內片外0000h~0ffffh低4kb地址完全重疊,但是我們使用引腳進行區分:=0時,選擇片外,=1時,選擇片內,這樣就完全區分開來了。
數據存儲器中片內外0000h~00ffh的256個單元地址完全重疊,片內外數據的訪問採用不同指令來區分:mov指令訪問片內數據存儲器,movx指令訪問片外數據存儲器。
(2)程序存儲器(rom)與數據存儲器(ram)的區分
程序存儲器(rom)與數據存儲器(ram)的區分在使用上是嚴格區分的,程序存儲器只能放置程序指令及常數表格,對程序存儲器中數據的訪問只可以使用movc指令。而數據存儲器則存放數據,片內外的操作指令分別用mov,movx進行操作。
(3)位地址空間的區域劃分
片內ram中的20h~2fh的128位,以及sfr中的位地址,這些位定址單元與位指令集構成了位處理器系統
㈤ 簡述at89s52單片機的數據匯流排地址匯流排如何構成
P0 口: P0 口是一個 8 位漏極開路的雙向 I/O 口。作為輸出口,每位能驅動 8 個 TTL 邏
輯電平。對 P0 埠寫「1」時,引腳用作高阻抗輸入。
當訪問外部程序和數據存儲器時,P0 口也被作為低 8 位地址/數據復用。
P1 口: P1 口是一個具有內部上拉電阻的 8 位雙向 I/O 口,p1 輸出緩沖器能驅動 4 個
TTL 邏輯電平。對 P1 埠寫「1」時,內部上拉電阻把埠拉高,此時可以作為輸入口使用。
P2 口:P2 口是一個具有內部上拉電阻的 8 位雙向 I/O 口,P2 輸出緩沖器能驅動 4 個
TTL 邏輯電平。對 P2 埠寫「1」時,內部上拉電阻把埠拉高,此時可以作為輸入口使用。 在訪問外部程序存儲器或用 16 位地址讀取外部數據存儲器(例如執行 MOVX @DPTR)時,P2 口送出高八位地址。
.
.
.
具體內容參考AT89S52的手冊,一般查找手冊直接搜索AT89S52 datasheet就有了,而且網上也有很多人翻譯了中文手冊。
㈥ 單片機數字時鍾原理
給你個程序看看,主要是看時分顯示哪裡!這個程序已經調試通過了,在走時的同時流水燈進行流動,時分之間有一個小數點作為分隔。還有整點報時功能,在早上八點到中午十二點以及下午三點到晚上八點兩個時間段內逢整點報時,其他時間不報時(是因為考慮到人們要午休及晚間休息),除此之外還有調時、調分功能。整個程序基於單片機AT89S52(可用C51、C52、S51等代替)。
#include <reg52.h>
#define uint unsigned int
sbit P3_0=P3^0;
sbit K1=P3^2;
sbit K2=P3^3;
sbit K3=P3^4;
sbit K4=P3^5;
uint count,min,hour,i,j=0;
uint code tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint code tab2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uint code tab3[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0x00,0xff,0x00,0xff,
0xfe,0xfb,0xef,0xbf,0xfd,0xf7,0xdf,0x7f,0x7e,0x3c,0x18,0x00,0x81,
0xc3,0xe7,0xff,0xe7,0xdb,0xbd,0x7e,0xff,0x7e,0xbd,0xdb,0xe7,0xff,
0x00,0xff,0x00,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,
0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0x00,0xff,0x00,0xff,0xfe,0xfc,
0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,
0xff,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0x00,0xff,0x00,0xff};//流水燈
void adjust(void)
{
if(!K3) //分調整
{
for(i=0;i<20000;i++);min++;
if(min==60)min=0;
}
if(!K4) //時調整
{
for(i=0;i<20000;i++);hour++;
if(hour==24)hour=0;
}
}
void display(void)
{
P0=tab1[min%10];P2=0xf7;for(i=0;i<5;i++);P2=0xff;//分個位顯示
P0=tab1[min/10];P2=0xfb;for(i=0;i<5;i++);P2=0xff;//分十位顯示
P0=tab2[hour%10];P2=0xfd;for(i=0;i<5;i++);P2=0xff;//時個位顯示
P0=tab1[hour/10];P2=0xfe;for(i=0;i<5;i++);P2=0xff;//時十位顯示
}
void ring(void)
{
if(hour/10==0&&(hour%10>=8&&hour%10<=9))P3_0=0;//早上7:00到晚上7:00自動整點報時,其中13、14點不報時
if(hour/10==1&&(hour%10>=0&&hour%10<=2))P3_0=0;
if(hour/10==1&&(hour%10>=5&&hour%10<=9))P3_0=0;
}
void update(void)
{
if(count==1200)
{
count=0;min++;
if(min==60)
{
min=0;hour++;
if(hour==24)hour=0;
ring();
}
}
}
void main(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
EA=1;
ET0=1;
while(1)
{
if(count==120)P3_0=1;//報時六秒後自動關閉蜂鳴器
adjust();
display();
}
}
void timer0_rupt(void) interrupt 1 // 定時器0中斷
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count%10==0)
{
P1=tab3[j];
j++;
if(j>99)j=0;
}
update();
}
㈦ at89s52與STC89C52有什麼區別
at89s52與STC89C52區別為:生產公司不同、存儲器不同、定時器不同。
一、生產公司不同
1、at89s52:at89s52是ATMEL公司生產的一個低電壓,高性能CMOS8位單片機。
2、STC89C52:STC89C52是STC公司生產的一種低功耗、高性能CMOS8位微控制器。
二、存儲器不同
1、at89s52:at89s52含8k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數據存儲器(RAM)。
2、STC89C52:STC89C52具有8K位元組系統可編程Flash存儲器。
三、定時器不同
1、at89s52:at89s52的定時器為T0、T1兩個16位定時器。
2、STC89C52:STC89C52的定時器為T0、T1、T2三個16位定時器。
㈧ AT89S52單片機
AT89S52
是一種低功耗、高性能CMOS8位微控制器,具有8K
在系統可編程Flash存儲器。使用Atmel
公司高密度非易失性存儲器技術製造,與工業80C51
產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統可編程,亦適於常規編程器。在單晶元上,擁有靈巧的8
位CPU
和在系統可編程Flash,使得AT89S52為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。
AT89S52具有以下標准功能:
8k位元組Flash,256位元組RAM,
32
位I/O
口線,看門狗定時器,2
個數據指針,三個16
位
定時器/計數器,一個6向量2級中斷結構,全雙工串列口,
片內晶振及時鍾電路。另外,AT89S52
可降至0Hz
靜態邏
輯操作,支持2種軟體可選擇節電模式。空閑模式下,CPU
停止工作,允許RAM、定時器/計數器、串口、中斷繼續工
作。掉電保護方式下,RAM內容被保存,振盪器被凍結,單片機一切工作停止,直到下一個中斷或硬體復位為止。
1、與MCS-51單片機產品兼容;
2、8K位元組在系統可編程Flash存儲器;
3、1000次擦寫周期;
4、全靜態操作:0Hz-33MHz;
5、三級加密程序存儲器;
6、32個可編程I/O口線;
7、三個16位定時器/計數器;
8、8個中斷源;
9、全雙工UART串列通道;
10、低功耗空閑和掉電模式;
11、掉電後中斷可喚醒;
12、看門狗定時器;
13、雙數據指針;
14、掉電標識符。
㈨ 單片機編程at89s52
1.編程原理:利用c語言或者匯編語言,操作單片機的寄存器(實際上為數字電路);
2.這個是SPI匯流排的協議規定,可能其他匯流排也有類似的叫法
3.與AVR基本含義是一樣的
4.當然不能,每個單片機都有自己的下載系統,AT是通過並口下載
㈩ 51單片機最小系統流水燈的原理圖關於AT89S52類型的
圖中晶元是AT89C51,最小系統圖的話是一樣的
程序:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delays(uint t)
{
uint i,j;
for(i=0;i<t;i++)
{
for(j=0;j<1141;j++);
}
}
void main()
{
//P0M1=0X00; //單片機除了P0口以外,其他I/O在內部都有上拉電阻
//P0M0=0XFF; //AT89C51沒有推挽輸出這一說,所以P0高電平不亮,要加上拉電阻;
//用其他埠不需要考慮
/**************從左到右流水燈**************/
uchar i;
P0=0Xfe;
delays(100);
while(1)
{
P0=_crol_(P0,1);//向左循環移動一位
delays(50);
}
}
/*****************左右來回點亮************/
void main()
{
uchar i;
P0=0x01;
delays(100);
while(1)
{
for(i=0;i<7;i++)
{
P0=_crol_(P0,1);
delays(50);
}
for(i=0;i<7;i++)
{
P0=_cror_(P0,1);
delays(50);
}
}
}