2.利用編程器將用戶程序送人單片機的存儲器,檢查程序,修改程序,監視單片機的工作狀態。
3.51有5個中斷源
4.Mcs-51是8位單片機;I/O的特點有具有雙向通道,數據鎖存,輸入緩沖;P3.0和P3.1分別是串行輸入口和WR串行輸出口;作為輸入時應該註意*****。
5.Mcs-51單片機中振蕩電路,片內有壹個高增益反向放大器,用於構成振蕩器。外接晶振,反相器的輸入端和輸出端跨接石英晶體和兩個電容就構成了穩定的自激振蕩器。
6.51單片機的封裝引腳有三種類型:40腳DIP,44腳PLCC,48腳DIP,52腳PLCC,68腳PLCC。引腳定義:1--8:P0.0--0.7,9:RST/Vpd,10--17:P3.0-P3.7,18:XTAL2,19:XTAL1,20:Vss,21--28:P2.0-P2.7,29:~PSEN ,30:ALE/~PROG,31:~EA/pp,32--39:P0.7-P0.0,40:Vcc。
7.單片機片內,片外存儲器的選擇:(程序存儲器)由硬件控制信號~EA/Vpp決定,(數據存儲器)由軟件指令是MOVX還是MOV決定;
8.MCS-51的程序存儲器用於存放運算中間結果。
9.PSW是壹個8位的專用寄存器,用於存程序運行中的各種狀態信息。
10.決定程序執行順序的寄存器是程序計數器PC。
11.ALE引腳的特點:(訪問外部存儲器時)信號上升沿可作16為地址低8位的所存信號,信號在兩個機器周期中出現壹次;(不訪問時)向外輸出振蕩頻率1/6的脈沖信號,可作其他外部接口的時鐘信號。通過該信號可以判斷 CPU是否正常工作
12.MOVC的功能:用於讀取程序存儲器表格的數據傳送
13:51的指令寄存器是對指令寄存器中的指令進行譯碼,將指令轉變為執行此指令所需的電信號。
完整的指令格式:由操作碼和操作數組成
DAC0832的輸入電平與TTL電平兼容。 AD與DA的作用是:AD的作用是把模擬信號轉換成數字信號,DA的作用是把數字信號轉換成模擬信號。 0809是8位的AD轉換器及有11個模擬輸入通道,4位地址輸入選擇。17.? DAC0832是電流輸出型數模轉換芯片,分辨率8位,三種工作方式:直通,單緩沖,雙緩沖。 單片機的復位電路的特點:簡單而重要,上電復位靠電容充電,按鍵復位靠RC微分電路產生正脈沖和電阻與VCC電源接通。是第9引腳復位。單片機開始工作前需要復位,單片機受到幹擾後程序跑飛需要復位。單片機最小系統硬件設計圖。由復位電路、晶振電路和單片機組成,單片機~EA端壹般接高。
MCS—51單片機最小系統的振蕩周期,機器周期,時鐘周期的關系:12個振蕩周期=1個機器周期=6個時鐘周期。 8051在存儲結構上采用哈佛結構。 串行通信中按數據流的方向分成哪三種基本的傳送方式, 8051與8031的區別是:有無ROM存儲器。 程序狀態字寄存器PSW的特點:保存指令執行結果的特征信息。由硬件自動生成。 計算機總線的分類:數據總線,地址總線,控制總線。或片內總線,片外總線。 80C51單片機的程序存儲器最大尋址範圍256B。 編程:跑馬燈程序編寫:8個發光二極管流水燈程序編寫LED跑馬燈(從右至左)
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<255;i++);
}
}
void main()
{
P1=0xfe;
while(1)
{ if(P1==0x7f)
P1=0xfe;
else
P1=_crol_(P1,1);
DelayMS(80);
}
}
LED跑馬燈(從左至右)
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<255;i++);
}
}
void main()
{
P1=0x7f;
while(1)
{ if(P1==0xfe)
P1=0x7f;
else
P1=_cror_(P1,1);
DelayMS(40);
}
}
LED跑馬燈(左右循環)
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<255;i++);
}
}
void main()
{
uchar i;
P1=0x7f;
while(1)
{
for(i=0;i<7;i++)
{P1=_cror_(P1,1);
DelayMS(40); }
for(i=0;i<7;i++)
{P1=_crol_(P1,1);
DelayMS(40); }
}
}
單個LED的閃爍
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P1^0;
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=120;i>0;i--);
}
}
void main()
{
while(1)
{
LED = ~LED;
DelayMS(150);
}
}
連綿燈
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<255;i++);
}
}
void main()
{
P1=0x0e;
while(1)
{ if(P1==0xc1)
P1=0x0e;
else
P1=_crol_(P1,1);
DelayMS(80);
}
}
/* 花樣流水燈程序 間隔300ms先奇數亮再偶數亮,循環三次;壹個燈上下循環三次;兩個分別從兩邊往中間流動三次;再從中間往兩邊流動三次;8個全部閃爍3次;關閉發光管,程序停止。*//*********************************************************/#include<reg52.h> //52單片機頭文件#include <intrins.h> //包含有左右循環移位子函數的庫#define uint unsigned int //宏定義#define uchar unsigned char //宏定義void delay(uint z) //延時函數,z的取值為這個函數的延時ms數,如delay(200);大約延時200ms.{ //delay(500);大約延時500ms. uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }void main() //主函數{ uchar a,i,j; for(j=0;j<3;j++) //寄偶交替 { P1=0x55; //點亮小燈 delay(300); //延時300毫秒 P1=0xaa; delay(300); //延時300毫秒 } for(j=0;j<3;j++) //流水燈 { a=0xfe; for(i=0;i<8;i++) { P1=a; //點亮小燈 delay(300); //延時300毫秒 a=_crol_(a,1); } } P1=0xff; for(j=0;j<3;j++) //從兩邊往中間流 { P1=0x7e; //點亮小燈
delay(300); //延時300毫秒 P1=0xbd; delay(300); //延時300毫秒 P1=0xdb; //點亮小燈 delay(300); //延時300毫秒 P1=0xe7; delay(300); //延時300毫秒 } P1=0xff; for(j=0;j<3;j++) //從中間往兩邊流 { P1=0xe7; //點亮小燈 delay(300); //延時300毫秒 P1=0xdb; delay(300); //延時300毫秒 P1=0xbd; //點亮小燈 delay(300); //延時300毫秒 P1=0x7e; delay(300); //延時300毫秒 } P1=0xff; for(j=0;j<6;j++) //全部閃爍 { P1=~P1; //點亮小燈 delay(300); //延時300毫秒 } P1=0xff; while(1);} a=_crol_(a,1); } } for(j=0;j<3;j++) { a=0xfa; for(i=0;i<5;i++) { P1=a; delay(300); a=_crol_(a,1); } } P1=0xff; for(j=0;j<3;j++) //從兩邊往中間流 { P1=0x7e; //點亮小燈 delay(300); //延時300毫秒 P1=0xbd; delay(300); //延時300毫秒 P1=0xdb; //點亮小燈 delay(300); //延時300毫秒 P1=0xe7; delay(300); //延時300毫秒 } P1=0xff; for(j=0;j<3;j++) //從中間往兩邊流 { P1=0xe7; //點亮小燈 delay(300); //延時300毫秒 P1=0xdb; delay(300); //延時300毫秒 P1=0xbd; //點亮小燈 delay(300); //延時300毫秒 P1=0x7e; delay(300); //延時300毫秒 } for(j=0;j<5;j++) { P1=0x66; delay(300); P1=0x99; delay(300); } P1=0xff; for(j=0;j<6;j++) //全部閃爍 { P1=~P1; //點亮小燈 delay(300); //延時300毫秒 } P1=0xff; while(1);}