单片机
18.一个中断源的中断请求被响应,必须满足以下必要条件:(1)总中断允许开关接通,即IE寄存器中的中断总允许位EA=1。(2)该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。(3)该中断源的中断允许位=1,即该中断被允许。(4)无同级或更高级中断正在被服务。
19.外部中断有两种触发方式:电平触发方式和跳沿触发方式。
11.空闲模式两种方法退出,响应中断方式,硬件复位方式
12.掉电模式的退出两种方法:硬件复位和外部中断。
13.与汇编语言相比,用C51语言进行软件开发,有如下优点:1)可读性好。2)模块化开发与资源共享。3)可移植性好。4)生成的代码效率高。
14.存储原则:应当尽量把频繁使用的变量置于片内RAM。即采用data、bdata或idata存储类型,而将容量较大的或使用不太频繁的那些变量置于片外RAM,即采用pdata或xdata存储类型。常量只能采用code存储类型。
#include <reg51.h>
char i=10;
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;ET0=1;
TR0=1;
do{ }while (1);
}
void time0(void) interrupt 1
void main( )
{
EX0=1;
EX1=1;
EA=1;
IT0=1;
IT1=1;
for(;;)
{
for(a=0;a<8;a++)
{
P1=play [a];
Delay(500);}
}
}
void int0( ) interrupt 0
{
P1=0x0f;
Delay(300);
P1=0xf0;
Delay(300);
xdata char nSendByte;
delay( );
main( )
{ SCON=0x00;/*设置串行口为方式0*/
EA=1;/*全局中断允许*/
ES=1;/*允许串行口中断*/
nSendByte =1;
SBUF=nSendByte;
P1_0=0;
for(;;)
{;}
}
void Serial_Port( ) interrupt 4using 0
20.定时器可以实现的功能:定时操作:产生定时中断,实现定时采样输入信号,定时扫描键盘、显示器等定时操作。测量外部输入信号:对输入信号累加统计或测量输入
信号的周期参数。定时输出:定时触发输出引脚的电平,使输出脉冲的宽度、占空比、周期达到预定值。
21.计算机通信的工作方式:单工方式:数据仅方式:允许双方同时进行数据双向传送。
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint i)
{uchar t;
while (i--)
{for(t = 0; t < 120; t++);
EA=1;ET0=1;
TR0=1;
do{ }while (1);
}
void time0(void) interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
P1_0=!P1_0;
}
8采用定时器T0的方式1的定时中断方式,使P1口外接的8只LED每0.5s闪亮一次。每隔50ms中断一次,中断10次为0.5s。
3.AT89S51单片机片内集成4KB程序存储器和128B的数据存储器
4.8位的CPU,与通用CPU基本相同,同样包括了运算器和控制器两大部分,还有面向控制的位处理功能。
5.AT89S51单片机的硬件结构:1)CPU(微处理器)2)数据存储器(RAM)3)程序存储器(Flash ROM)
4)中断系统5)定时器/计数器6)1个看门狗定时器WDT7)串行口8)P0口、P1口、P2口和P3口9)特殊功能寄存器(SFR)
case 3: P2=0x08; break;
}
} while ( 1 );
}
5在51单片机的P1口上接有8只LED。在外部中断0输入引脚P3.2(INT0*)引脚接有一只按钮开关K1。程序要求将外部中断0设置为负跳沿触发。在程序启动时,P1口上的8只LED亮。按一次按钮开关K1,使引脚接地,产生一个负跳沿触发的外中断0中断请求,在中断服务程序中,让低4位的LED和高4位的LED交替闪烁。
#define uchar unsigned char
#define uint unsigned int
uchar tab[ ]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf ,0xbf , 0x7f ,0xbf , 0xdf , 0xef , 0xf7 , 0xfb , 0xfd,0xfe};
因此
TH0=(65536−1000) /256,TL0=(65536−1000) %256。
参考程序如下:
#include <reg51.h>
sbit P1_0=P1^0;
void main()
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
1单灯按照一定的时间间隔闪烁
#include<reg51.h>
sbit p1_0=P1^0;
void delay(unsigned int i)
{
unsigned char j;
while(i--)
for(j=0;j<125;j++);
}
main( )
{
while(1)
{
p1_0=0;
delay(200);
#include <reg51.h>
void Delay(unsigned int i)
{unsigned int j;
while(i--)
for(j=0;j<128;j++);
}
void main( )
{
EX0=1;
EA=1;
IT0=1;
P1=0;
while(1);
}
void int0( ) interrupt 0
#include <reg51.h>
void Delay(unsigned int i)
{unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}
void main( )
{TMOD=0x50;
TH1=0xff;
TL1=0xfc;
EA=1;
ET1=1;
TR1=1;
while(1);
}
void T1_int(void) interrupt 3
{for(;;)
{P1=0xff;
Delay(500);
P1=0;
Delay(500); }
}
10编写程序控制8个发光二极管轮流点亮。
#include <reg51.h>
#include <stdio.h>
sbit P1_0=0x90;
void Delay(unsigned int i)
{unsigned int j;
while(i--)
for(j=0;j<128;j++);
}
unsigned char play [8]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf
,0xbf,0x7f};
unsigned char a;
15.C51语言的基本运算与标准C类似,主要包括算术运算、关系运算、逻辑运算、位运算和赋值运算及其表达式等。
16.函数的调用在一个函数中需要用到某个函数的功能时,就调用该函数。调用者称为主调函数,被调用者称为被调函数。
17.中断优先权的基本原则:(1)不同级的中断源同时申请中断——先高后低。(2)同级中断源同时申请中断时——事先规定。(3)处理低级中断又收到高级中断请求——停低转高。(4)处理高级中断又收到低级中断请求——高不理低。
}
/*主函数*/
void main(void)
{TMOD=0x20;
SCON=0x50;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
while(1)
{P1=receive( );
}
}
二.填空
1.控制寄存器两个:特殊功能寄存器SCON和PCON。
2.SM0、SM1—串行口4种工作方式选择位
参考程序如下:
#include <reg51.h>
void main( )
{char state;
do
{P1=0xff;
state=P1;
state=state&0x03;
switch ( state )
{
case 0: P2=0x01; break;
case 1: P2=0x02; break;
case 2: P2=0x04; break;
}
void int1( ) interrupt 2