嵌入式之单片机.docx
- 文档编号:27046742
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:19
- 大小:26.58KB
嵌入式之单片机.docx
《嵌入式之单片机.docx》由会员分享,可在线阅读,更多相关《嵌入式之单片机.docx(19页珍藏版)》请在冰豆网上搜索。
嵌入式之单片机
一、填空题
1.数制转换163D=10100011B=a3H。
(二进制B八进制O十进制D十六进制H)
2.8051内部有4个并行口,P0口直接作输出口时,必须外接上拉电阻。
3.单片机三总线为:
地址总线、数据总线和控制总线。
4.MCS-51单片机定时器工作方式0是指的13位定时/计数器。
0x00方式0,13位定时器/计数器M=2^13=8192
0x01方式1,16位定时器/计数器M=2^16=65536
0x10方式2,自动重载8位定时器/计数器M=2^8=256
0x11方式3,T0分为2个8位独立计数器,T1停止计数,两个M均为256
5.MCS-51有一个全双工的异步串行口,有4种工作方式。
6.MCS—51单片机内部有2个16位加1定时/计数器,可通过编程决定它们的工作方式,其中,定时/计数工作方式2是8位。
7.MCS—51单片机外部中断请求信号有边沿触发方式和电平方式,在边沿触发方式下,当采集到INT0、INT1的有效信号为高电平时,激活外部中断。
8、单片机中断系统中共有外部中断0、定时器0、外部中断1、定时器1和串行口五个中断源。
9.I/O作为输入口时应该端口置1,假如P2低四位作输入高四位做输出时的操作指令P2=0xf0。
//11110000
10.TMOD=0x62表示T1为计数工作方式2,T0为定时工作方式2 。
C/T=0时为定时功能,C/T=1时为计数功能。
0x62→01100010高四位计数器(方式1)低四位定时器(方式0)10→方式2
11.MCS—51的存储器空间配置从功能上可分为四种类型:
片内程序存储器、内部数据存储器、外部数据存储器、外部程序存储器。
1.数制转换10110110B=182D=b6H。
2.SCON=0x50;表示串行口工作在通信方式1、非多机模式、允许接收,不发送T8位,不接收T9位。
0101000001→8位异步
SM0
SM1
工作方式
0
0
方式0
同步移位寄存器方式
0
1
方式1
8位异步通信方式
1
0
方式2
9位异步通信方式
1
1
方式3
9位异步通信方式
0SM2:
多机通信控制位1多机,0单机
1REN:
允许/禁止串行口接收的控制位
0TB8:
奇偶校验位,在方式1中是停止位。
0RB8:
在方式2和方式3中,是被接收的第9位数据;
在方式1中,RB8收到的是停止位,在方式0中不用。
0TI——串行口发送中断请求标志位当发送完一帧串行数据后,由硬件置1;
0RI——串行口接收中断请求标志位
SCON=0x4001000000
3.单片机三总线为:
地址总线、数据总线和控制总线。
4.MCS-51单片机定时器工作方式1是指的16位定时/计数器。
5.MCS-51有一个全双工的异步串行口,有4种工作方式。
6.MCS—51单片机内部可以自动重装初值的定时/计数工作方式是2。
工作方式2是8位的定时/计数器;
7.MCS—51单片机外部中断请求信号有边沿触发方式和电平方式,设置INT0边沿触发方式汇编语句为MOVIT0,0。
8、单片机中断系统中共有外部中断0、定时器0、外部中断1、定时器1和串行口五个中断源。
9.单片机即一个芯片的计算机,此芯片上包括五部分:
运算器、存储器、控制器、输入部分和输出部分。
10.任何程序总是由三种基本结构组成:
顺序、分支和循环。
11.MCS—51的存储器空间配置从功能上可分为四种类型:
片内程序存储器、内部数据存储器、外部数据存储器、外部程序存储器。
二、注释题:
#include”REG51.H”//包含的头文件
sbitled=P1^0;//定义I/O口
voidT0_init(void)//初始化T0{
TMOD=0x01;//设置T0的工作模式
TH0=0x3c;//T0高八位赋值
TL0=0xb0;//T0低八位赋值
ET0=1;//开定时器中断
TR0=1;//启动定时器
EA=1;}//开总中断
voidT1_init(void){//初始化T1
TMOD=0x10;//设置T1的工作模式
TH1=0x3c;//T1高八位赋值
TL1=0xb0;//T1低八位赋值
ET1=1;//开定时器中断
TR1=1;//启动定时器
EA=1;}//开总中断
voidT0_zhongduan(void)interrupt1//T0中断服务程序
{
TH0=(65536-50000)/256;//重新赋值
TL0=(65536-50000)%256;
t++;
if(t>=10){
t=0;
P1=P1^0x02;}//P1.1“取反”
}
voidRS_init(void){
SCON=0x40;//串口控制寄存器赋值
TMOD=0x20;//定时器模式设置
TH1=0xfd;//T1高八位赋值
TR1=1;}//启动定时器
voidRS_zhongduan(void)interrupt4//RS中断服务程序
{
if(RI==1)//判断接收中断请求标志位是否为1
{
RI=0;//标志位置零
A=SBUF;//读取接收缓冲区
}
}
voidRS_send_byte(unsignedcharc){
SBUF=c;//将发送的数据放入缓冲区
while(!
TI);//等待发送完毕(发送中断请求标志位)
TI=0;}//发送标志位置零
三、程序设计题:
一、要求外部中断0下降沿时P1.0取反,完成程序。
#include”REG51.H”
sbitled=P1^0;
voidT0_zhongduan(void)interrupt0
led=~led;
voidT0_init(void){
EA=1;//总中断
EX0=1;//开启外部中断
IT0=1;}//开启下降沿功能
voidmain(void){
T0_init();
while
(1);}
二、P1.0接一个扬声器,利用T1产生频率为1Hz的方波信号从产生器输出,编写程序。
sbitysq=P1^0;
voidT1_init(void){
TMOD=0x10;
TH1=0x3c;
TL1=0xb0;
ET1=1;
TR1=1;
EA=1;}
voidT1_zhongduan(void)interrupt3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t++;
if(t>=20){
t=0;
P1=P1^0x02;}}
voidmain(void){
T1_init();
while
(1);}
三、定时器,开始、暂停、置零。
#include
#include
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
intqishi=0;
voidT0_zhongduan(void)interrupt1//T0定时/计数器的功能编写
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
qishi++;
display(qishi);
if(qishi>=2000)qishi=0;
}
voidT0_init(void){//T0定时/计数器初始化
TMOD=0x01;TH0=0x3c;TL0=0xb0;
EA=1;ET0=0;TR0=1;}
voidmain(void){
T0_init();//T0定时/计数器初始化
while
(1){
if(key1==0)//判断按下开始
ET0=1;
if(key2==0)//判断按下暂停
ET0=0;
if(key3==0)//判断按下置零
qishi=0;}}
头文件display.h
#include
unsignedcharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴0-9的数字
sbitwei1=P3^0;//第一位
sbitwei2=P3^1;//第二位
sbitwei3=P3^2;//第三位
sbitwei4=P3^3;//第四位
voiddelay(intms){
inta,b;
for(a=0;a for(b=0;b<100;b++);} voiddisplay(unsignedintk){ P2=0;//初始值置零 P2=tab[k/1000];// wei1=0;wei2=1;wei3=1;wei4=1;;//启动对应的数码管位置0为启动,1为关闭 delay (2); P2=0; P2=tab[k%1000/100]; wei1=1;wei2=0;wei3=1;wei4=1; delay (2); P2=0; P2=tab[k%100/10]; wei1=1;wei2=1;wei3=0;wei4=1; delay (2); P2=0; P2=tab[k%10]; wei1=1;wei2=1;wei3=1;wei4=0; delay (2);} 四、LED流水灯 #include unsignedchartab[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/*记忆: edb7*/ voiddelay(intms){//延迟时间 inta,b; for(a=0;a for(b=0;b<1000;b++);} voidmain(void){ chari; while (1){ for(i=0;i<8;i++){ P1=tab[i];//对P1接口发送指令 delay(10);} for(i=7;i>=0;i--){ P1=tab[i];//对P1接口发送指令 delay(10);}}} 程序例子: 二、数码管的使用 #include"reg51.h" unsignedcharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};//共阴0-9的数字 /*0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90共阳*/ sbitwei1=P3^0;//第一位 sbitwei2=P3^1;//第二位 sbitwei3=P3^2;//第三位 sbitwei4=P3^3;//第四位 charmiao,m=99; chartt; voiddelay(charms){ chara,b; for(a=0;a for(b=0;b<100;b++);} voiddisplay(){ P2=0;//初始值置零 P2=tab[miao/10];// wei1=0;wei2=1;wei3=1;wei4=1;;//启动对应的数码管位置0为启动,1为关闭 delay (2); P2=0; P2=tab[miao%10]; wei1=1;wei2=0;wei3=1;wei4=1;//启动对应的数码管位置0为启动,1为关闭 delay (2); P2=0; P2=tab[m/10]; wei1=1;wei2=1;wei3=0;wei4=1; delay (2); P2=0; P2=tab[m%10]; wei1=1;wei2=1;wei3=1;wei4=0; delay (2);} voidtimer0(void)interrupt1//T0定时/计数器的功能编写 { tt++; if(tt>=20){ tt=0; miao++; if(miao>99)miao=0; m--; if(m<0)miao=99;} } voidcsh_T0(void)//T0定时/计数器初始化 { TMOD=0x01; TH0=0x3c;//T0高八位(2^16-50000)/2^8 TL0=0xb0;//T0低八位(2^16-50000)%2^8 EA=1;//T0总开关 ET0=1;//开定时器中断1开启0关闭 TR0=1;//启动定时器1开启0关闭 } voidmain(void){ csh_T0();//T0定时/计数器初始化 while (1)display(); } 三、LM016L液晶显示屏的使用 #include sbitRS=P2^0;//高电平时选择数据寄存器/低电平时选择指令寄存器。 sbitRW=P2^1;//高电平时进行读取操作,低电平进行写操作。 sbitEN=P2^2;//使能端,为1是读取信息,为0时液晶模块执行命令。 charbuffer[20]={0}; intjishu=1,miao=1; unsignedcharxuehao[]="20140115102"; charn,i,j,t; voiddelay(intms){ ms*=1000;//增大1000倍ms while(ms--);} voidled_cmd(unsignedcharc)//对LED液晶下达指令,系统指令 { RS=0;//低电平→指令寄存器(写命令) RW=0;//低电平→写操作(也在指令寄存器) P0=c;//要执行的代码,并存放在指令寄存器 EN=1;//读取LED信息(也在指令寄存器)相当于打开LED的开关 delay (2); EN=0;//把指令寄存器内的代码执行一次 } voidled_send_date(unsignedcharc)//对LED液晶写入字节数据 { RS=1;//高电平→数据寄存器(写数据) RW=0;//低电平→写操作(也在数据寄存器) P0=c;//要改写的数据 EN=1;//读取LED信息(也在数据寄存器)相当于打开LED的开关 delay (2); EN=0;//把数据寄存器内的代码执行一次 } voidled_init(void) { led_cmd(0x38);//显示16*2,5*7的点阵 led_cmd(0x0c);//开显示,不显示光标,不闪烁 led_cmd(0x06);//写入一个字符后,地址后移一位。 地址指针自动加1 led_cmd(0x01);//LED清屏 } voidT0_init(void)//定时/计数器T0定义初始值 { TMOD=0x01;//只使用T0 TH0=(65536-50000)/256;//预设定时器的初值(2^16-50000)/2^8 TL0=(65536-50000)%256;//预设计数器的初值 EA=1;//总开关 ET0=1;//定时器开关1开启0关闭 TR0=1;//计数器开关1开启0关闭 } voidT0_zhongduan(void)interrupt1//T0定时/计数器的功能编写 { //重新定义下一次中断的时间(可以忽略,真的) TH0=(65536-50000)/256;//预设定时器的初值(2^16-50000)/2^8 TL0=(65536-50000)%256;//预设计数器的初值 //本次中断功能要执行的代码↓ t++; if(t>=20){ t=0; miao++; if(miao>99)miao=0;} } voidmain(void) { led_init();//初始化LED屏 T0_init();//初始化定时/计数器T0 while (1) { led_cmd(0x80);//第一行 for(j=0;j<11;j++) { led_send_date(xuehao[j]);//打印数组 } //显示学号次数 led_cmd(0xC0);//第二行c0 led_send_date(jishu/10+'0');//将整数转换为字符(+'0') led_send_date(jishu%10+'0'); jishu++; if(jishu==99)jishu=0; //显示T0定时/计数器的频率 led_cmd(0xC8); led_send_date(miao/10+'0');//将整数转换为字符(+'0') led_send_date(miao%10+'0'); delay (2); } } 四、串口通讯 (1)发送 #include unsignedcharxuehao[]="20140115102"; voiddelay(intms){ inta,b; for(a=0;a for(b=0;b<1000;b++);} voidcsh_RS(void) { SCON=0X40;//设置串口为工作方式1//40是发送,50是接收 TMOD=0X20;//设置定时器1为工作方式2 TH1=0XFD;//波特率为9600,标准波特率 TR1=1;//启动定时器1 } voidsendbyte(unsignedcharc)//串口内部的发送指令 { SBUF=c;//SBUF是发送和接收,传递的桥梁 while(TI==0);TI=0; } voidfasong(void) { chari; for(i=0;i<11;i++) {sendbyte(xuehao[i]);delay(100);} } voidmain(void) { csh_RS();//初始化串口 while (1){ fasong(); delay(5000);} } (2)接收 #include sbitRS=P2^0;//高电平时选择数据寄存器、低电平时选择指令寄存器。 sbitRW=P2^1;//高电平时进行读取操作,低电平进行写操作。 sbitEN=P2^2;//使能端,为1是读取信息,为0时液晶模块执行命令。 unsignedcharxuehao[]="20140115102"; charn,i,j; voiddelay(intms) { inta,b; for(a=0;a for(b=0;b<1000;b++); } voidled_cmd(unsignedcharc)//对LED指令,系统指令 { RS=0;//低电平→指令寄存器 RW=0;//低电平→写操作(也在指令寄存器) P0=c;//要执行的代码,并存放在指令寄存器 EN=1;//读取LED信息(也在指令寄存器)相当于打开LED的开关 delay(10); EN=0;//把指令寄存器内的代码执行一次 } voidled_write(unsignedcharc)//对LED写入数据 { RS=1;//高电平→数据寄存器 RW=0;//低电平→写操作(也在数据寄存器) P0=c;//要改写的数据 EN=1;//读取LED信息(也在数据寄存器)相当于打开LED的开关 delay(10); EN=0;//把数据寄存器内的代码执行一次 } voidcsh_LED(void) { led_cmd(0x38);//显示16*2,5*7的点阵 led_cmd(0x0c); led_cmd(0x06);//写入一个字符后,地址后移一位。 led_cmd(0x01);//LED清屏 } voidcsh_RS(void) { SCON=0X50;//设置串口为工作方式1//40是发送,50是接收 TMOD=0X20;//设置定时器1为工作方式2 TH1=0XFD;//波特率为9600,标准波特率 TR1=1;//启动定时器1 ES=1;//选择串口 EA=1;//总开关 } voidzd_RS(void)interrupt4//串口的功能编写 { if(RI==1)//判断是否有信号 { RI=0; xuehao[n]=SBUF;//将值赋给数组(xuehao) n++; if(n>10)n=0; } } voidmain(void) { csh_LED();//初始化LED屏 csh_RS();//初始化串口 while (1) { led_cmd(0x01);//先清除屏幕,方便看效果 led_cmd(0x80);//第一行,第二行c0; for(j=0;j<11;j++) led_write(xuehao[j]);//打印数组 delay(1000); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 单片机