|
|
超級刷哦
外部串口RAM中從8000H開始的12單元的字節及其校驗和,以串口方式1波特率4800發送
#include<reg51.h>
#define uchar unsigned char
void init_ps(void);
void send_data(uchar idata*d);
uchar xdata buf[0x0C]_at_0x8000;
uchar ph;
void init_ps(void)
{
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
PCON=0;
TR1=1;
SCON=0x50;
}
void send_data(uchar idata*d)
{
uchar i;
ph=0;
for(i=0;i<10;i++)
{
SBUF=d[i];
Ph+=d[i];
While(TI==0);
TI=0;
}
SBUF=ph;
While(TI==0);
TI=0;
}
void main(void)
{
Init_ps();
for(i=0;i<12;i++)
{
d[i]=i;
}
Send_data(buf);
}
B口按鍵狀態在A口對應發光二極管顯示
#include<reg51.h>
#include<absacc.h>
# uchar unsigned char
#define CONT oxo1;
#define_8155_CMD XBYTE[0xEF00];
#define_8155_PA XBYTE[0xEF01];
#define_8155_PA XBYTE[0xEF02];
void main(void)
{
uchar i;
_8155_ CMD=CONT;
While(1)
{
i=_8155_PB;
_8155_PA=i;
delay();
}
}
波特率=(2/32) x f/【12x(256-初值)】
單片機數據存儲器可尋址空間范圍64K
復位狀態:SP為07H 其余為00H
對單片機復位在RESET施加2個機器周期的高電平
總線驅動擴展:地址控制用240 ,241, 244 數據用245
擴展數據存儲器RAM所需地址線:8KB要13條,16KB要14條,32KB要15條
指針SP指向棧頂,數據先入后出
指針長度為一個字節:idata*,data*,pdata*. 兩個字節:code*,xdata*
ALE輸出的下降沿鎖存低八位,其頻率為晶振頻率的六分之一
EA為低電平時只訪問外部程序存儲器
一個機器周期包含12個機器周期6個狀態周期12個節拍
8155有2個八位IO口,8255有3個,單片機有4個
C51的絕對地址訪問方式:使用C51運行庫中預定義宏,通過指針訪問,關鍵字_at_
位尋址區地址范圍:20H~2FH, 工作寄存器區地址范圍:00H~1FH
指針DPTR用來訪問外部的數據存儲器
壓棧操作匯編指令為PUSH,位變量清零指令為CLR
中斷服務程序的返回指令是RETI
PC為訪問程序存儲器提供地址,DPTR為訪問數據存儲器提供地址
8-3編碼器,P2口輸入,P3口低三位輸出,P3.5使能
#include<reg51.h>
void main()
{
unsigned char n;
while(1)
{
P2=0xff;
P3=0x20;
if(P3_5==0)
{
n=P2;
switch(n)
{
case 254:P3=0x00; break;
case 253:P3=0x01; break;
case 251:P3=x002; break;
case 247:P3=0x03; break;
case 239:P3=0x04; break;
case 223:P3=0x05; break;
case 191:P3=0x06; break;
case 127:P3=0x07; break;
default: P3=0x00; break;
}
}
else
P3=0xff;
}
}
1.請在xdata存儲空間定義指向字符型的存儲器指針變量px,該指針自身位于內部存儲區data區。
char xdata *data px
2.請定義中斷服務函數service,該中斷函數使用外部中斷1作為中斷源,并為其指定工作寄存器組1。
void service ( ) interrupt 2 using 1
3.簡述MCS-51串行口發送數據的過程。
數據預先寫入串行口數據緩沖器(1分), 然后在移位時鐘脈沖(TXD)的控制下(1分),從串行口RXD端逐位移出(1分),發送完畢后,SCON寄存器的發送中斷TI被自動置“1”(2分)。
4.MSC-51的定時器/計數器用作定時器時,其定時時間與哪些因素有關?作計數器時,對外界計數頻率有何限制?
工作方式、計數初值、時鐘頻率
計數脈沖的頻率不能高于震蕩脈沖頻率的1/24。
|
|