单片机
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11.空闲模式两种方法退出,响应中断方式,硬件复位方式
12.掉电模式的退出两种方法:硬件复位和外部中断。
13.与汇编语言相比,用C51语言进行软件开发,有如下优点:1)可读性好。2)模块化开发与资源共享。3)可移植性好。4)生成的代码效率高。
14.存储原则:应当尽量把频繁使用的变量置于片内RAM。即采用data、bdata或idata存储类型,而将容量较大的或使用不太频繁的那些变量置于片外RAM,即采用pdata或xdata存储类型。常量只能采用code存储类型。
因此
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;
20.定时器可以实现的功能:定时操作:产生定时中断,实现定时采样输入信号,定时扫描键盘、显示器等定时操作。测量外部输入信号:对输入信号累加统计或测量输入
信号的周期参数。定时输出:定时触发输出引脚的电平,使输出脉冲的宽度、占空比、周期达到预定值。
21.计算机通信的工作方式:单工方式:数据仅按一个固定方向传送。半双工方式:数据可实现双向传送,但不能同时进行。全双工方式:允许双方同时进行数据双向传送。
}
void int1( ) interrupt 2
P1=0;
Delay(500);
}
7要在P1.0上产生周期为2ms的方波,定时器应产生1ms的周期性的定时,定时对P1.0求反。选择定时器T0,方式1定时,采用中断方式,GATE不起作用。
计算T0的初值计算:
设T0的初值为X,则
X=216−110−3 /110−6 = 65536−1000=64536
}
}
void main( )
{P1=0xfe;
while (1)
{P1=_crol_( P1,1) ; /*C51函数库中的左移函数,P1中的数据循环左移1位*/
delay( 500 ); /*500为延时参数,可根据实际需要调整*/
}
}
3左右来回循环的流水灯的制作
#include <reg51.h>
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
#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};
#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
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);
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)
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;
18.一个中断源的中断请求被响应,必须满足以下必要条件:(1)总中断允许开关接通,即IE寄存器中的中断总允许位EA=1。(2)该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。(3)该中断源的中断允许位=1,即该中断被允许。(4)无同级或更高级中断正在被服务。
19.外部中断有两种触发方式:电平触发方式和跳沿触发方式。
#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;
Biblioteka BaiduEA=1;
ET1=1;
TR1=1;
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。
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交替闪烁。
#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++);
6.CPU由运算器和控制器构成。
7.PC工作过程是:CPU读指令时,PC的内容作为所取指令的地址,程序存储器按此地址输出指令字节,同时PC自动加1。
8.堆栈的作用:保护断点和保护现场
9.复位电路采用上电自动复位和按钮复位两种方式。
10.两种低功耗节电工作模式:空闲模式(idle mode)和掉电保持模式(power down mode)。
void delay(uint j)
{uchar t;
while (j--)
{for(t = 0; t < 120; t++);
}
}
void main()
{uchar i;
while(1)
{for(i = 0; i < 15; i++)
{P1=tab[i];
delay( 500);
}
}
}
4AT89S51单片机P1.0和P1.1引脚接有两只开关S0和S1,两只引脚上的高低电平共有4种组合,这4种组合分别点亮P2.0~P2.3引脚控制的4只LED:LED0~LED3 (高电平点亮),编程实现此功能。
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;
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i--;
if(i==0)
{P1=~P1;i=10;}
}
9采用定时器T1的方式1的中断计数方式,如图6-13所示,计数输入引脚T1(P3.5)上外接开关K1,作为计数信号输入。按4次K1后,P1口的8只LED闪烁不停。
#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
15.C51语言的基本运算与标准C类似,主要包括算术运算、关系运算、逻辑运算、位运算和赋值运算及其表达式等。
16.函数的调用在一个函数中需要用到某个函数的功能时,就调用该函数。调用者称为主调函数,被调用者称为被调函数。
17.中断优先权的基本原则:(1)不同级的中断源同时申请中断——先高后低。(2)同级中断源同时申请中断时——事先规定。(3)处理低级中断又收到高级中断请求——停低转高。(4)处理高级中断又收到低级中断请求——高不理低。
p1_0=1;
delay(200);
}
}
28个发光二极管LED0~LED7经限流电阻分别接至P1口的P1.0~P1.7引脚上,阳极共同接高电平。编程来实现发光二极管的从左到右的流水点亮,即按照LED0→LED1→┉→LED7的顺序,每次点亮一个发光二极管,延时一段时间后熄灭这个发光二极管,然后点亮下一个发光二极管,重复循环。参考程序如下:
}
/*主函数*/
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种工作方式选择位
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);
{TI=0;
P1_0=1;
delay(500);
nSendByte<<=1;
if(nSendByte==0) nSendByte =1;
SBUF=nSendByte;
P1_0=0;
}
void delay(uint j)/*延时函数*/
{uchart;
while (j--)
{for(t = 0; t < 120; t++);
参考程序如下:
#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;
}
}
11单片机接收计算机发送的串行数据,并把接收到的数据送P1口的8位LED显示。参考程序如下。
#include <reg51.h>
unsigned char receive(void)
{unsigned char dat;
while(RI==0);
;/*空操作*/
RI=0;
dat=SBUF;
return dat;
{
P1=0x0f;
Delay(300);
P1=0xf0;
Delay(300);
}
6程序要求K1和K2都未按下时,P1口的8只LED呈流水灯显示,仅K1(P3.2)按下时,左右4只LED交替闪烁。仅按下K2(P3.3),P1口的8只LED全部闪亮。两个外中断的优先级相同。
参考程序如下。
#include <reg51.h>
12.掉电模式的退出两种方法:硬件复位和外部中断。
13.与汇编语言相比,用C51语言进行软件开发,有如下优点:1)可读性好。2)模块化开发与资源共享。3)可移植性好。4)生成的代码效率高。
14.存储原则:应当尽量把频繁使用的变量置于片内RAM。即采用data、bdata或idata存储类型,而将容量较大的或使用不太频繁的那些变量置于片外RAM,即采用pdata或xdata存储类型。常量只能采用code存储类型。
因此
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;
20.定时器可以实现的功能:定时操作:产生定时中断,实现定时采样输入信号,定时扫描键盘、显示器等定时操作。测量外部输入信号:对输入信号累加统计或测量输入
信号的周期参数。定时输出:定时触发输出引脚的电平,使输出脉冲的宽度、占空比、周期达到预定值。
21.计算机通信的工作方式:单工方式:数据仅按一个固定方向传送。半双工方式:数据可实现双向传送,但不能同时进行。全双工方式:允许双方同时进行数据双向传送。
}
void int1( ) interrupt 2
P1=0;
Delay(500);
}
7要在P1.0上产生周期为2ms的方波,定时器应产生1ms的周期性的定时,定时对P1.0求反。选择定时器T0,方式1定时,采用中断方式,GATE不起作用。
计算T0的初值计算:
设T0的初值为X,则
X=216−110−3 /110−6 = 65536−1000=64536
}
}
void main( )
{P1=0xfe;
while (1)
{P1=_crol_( P1,1) ; /*C51函数库中的左移函数,P1中的数据循环左移1位*/
delay( 500 ); /*500为延时参数,可根据实际需要调整*/
}
}
3左右来回循环的流水灯的制作
#include <reg51.h>
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
#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};
#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
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);
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)
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;
18.一个中断源的中断请求被响应,必须满足以下必要条件:(1)总中断允许开关接通,即IE寄存器中的中断总允许位EA=1。(2)该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。(3)该中断源的中断允许位=1,即该中断被允许。(4)无同级或更高级中断正在被服务。
19.外部中断有两种触发方式:电平触发方式和跳沿触发方式。
#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;
Biblioteka BaiduEA=1;
ET1=1;
TR1=1;
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。
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交替闪烁。
#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++);
6.CPU由运算器和控制器构成。
7.PC工作过程是:CPU读指令时,PC的内容作为所取指令的地址,程序存储器按此地址输出指令字节,同时PC自动加1。
8.堆栈的作用:保护断点和保护现场
9.复位电路采用上电自动复位和按钮复位两种方式。
10.两种低功耗节电工作模式:空闲模式(idle mode)和掉电保持模式(power down mode)。
void delay(uint j)
{uchar t;
while (j--)
{for(t = 0; t < 120; t++);
}
}
void main()
{uchar i;
while(1)
{for(i = 0; i < 15; i++)
{P1=tab[i];
delay( 500);
}
}
}
4AT89S51单片机P1.0和P1.1引脚接有两只开关S0和S1,两只引脚上的高低电平共有4种组合,这4种组合分别点亮P2.0~P2.3引脚控制的4只LED:LED0~LED3 (高电平点亮),编程实现此功能。
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;
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i--;
if(i==0)
{P1=~P1;i=10;}
}
9采用定时器T1的方式1的中断计数方式,如图6-13所示,计数输入引脚T1(P3.5)上外接开关K1,作为计数信号输入。按4次K1后,P1口的8只LED闪烁不停。
#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
15.C51语言的基本运算与标准C类似,主要包括算术运算、关系运算、逻辑运算、位运算和赋值运算及其表达式等。
16.函数的调用在一个函数中需要用到某个函数的功能时,就调用该函数。调用者称为主调函数,被调用者称为被调函数。
17.中断优先权的基本原则:(1)不同级的中断源同时申请中断——先高后低。(2)同级中断源同时申请中断时——事先规定。(3)处理低级中断又收到高级中断请求——停低转高。(4)处理高级中断又收到低级中断请求——高不理低。
p1_0=1;
delay(200);
}
}
28个发光二极管LED0~LED7经限流电阻分别接至P1口的P1.0~P1.7引脚上,阳极共同接高电平。编程来实现发光二极管的从左到右的流水点亮,即按照LED0→LED1→┉→LED7的顺序,每次点亮一个发光二极管,延时一段时间后熄灭这个发光二极管,然后点亮下一个发光二极管,重复循环。参考程序如下:
}
/*主函数*/
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种工作方式选择位
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);
{TI=0;
P1_0=1;
delay(500);
nSendByte<<=1;
if(nSendByte==0) nSendByte =1;
SBUF=nSendByte;
P1_0=0;
}
void delay(uint j)/*延时函数*/
{uchart;
while (j--)
{for(t = 0; t < 120; t++);
参考程序如下:
#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;
}
}
11单片机接收计算机发送的串行数据,并把接收到的数据送P1口的8位LED显示。参考程序如下。
#include <reg51.h>
unsigned char receive(void)
{unsigned char dat;
while(RI==0);
;/*空操作*/
RI=0;
dat=SBUF;
return dat;
{
P1=0x0f;
Delay(300);
P1=0xf0;
Delay(300);
}
6程序要求K1和K2都未按下时,P1口的8只LED呈流水灯显示,仅K1(P3.2)按下时,左右4只LED交替闪烁。仅按下K2(P3.3),P1口的8只LED全部闪亮。两个外中断的优先级相同。
参考程序如下。
#include <reg51.h>