|
超级刷哦
外部串口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。
|
|