哈工大单片机实验代码(张毅刚版教材)(10个)
- 格式:docx
- 大小:13.20 KB
- 文档页数:12
单片机原理与应用(C51编程+proteus仿真)第2版-张毅刚课后习题参考答案第6章思考题及习题6参考答案一、填空1.外部中断1的中断入口地址为()。
定时器T1的中断入口地址为()。
答:0013H;001BH2.若(IP)=00010100B,则优先级最高者为(),最低者为()。
答:外部中断1,定时器T13.AT89S51单片机响应中断后,产生长调用指令LCALL,执行该指令的过程包括:首先把()的内容压入堆栈,以进行断点保护,然后把长调用指令的16位地址送入(),使程序执行转向()中的中断地址区。
答:PC、PC、程序存储器4.AT89S51单片机复位后,中断优先级最高的中断源是()。
答:外部中断05.当AT89S51单片机响应中断后,必须用软件清除的中断请求标志是()。
答:串行中断、定时器/计数器T2中断二、单选1.下列说法错误的是()。
A. 同一级别的中断请求按时间的先后顺序响应B. 同一时间同一级别的多中断请求,将形成阻塞,系统无法响应C. 低优先级中断请求不能中断高优先级中断请求,但是高优先级中断请求能中断低优先级中断请求D. 同级中断不能嵌套答:B2.在AT89S51的中断请求源中,需要外加电路实现中断撤销的是()。
A. 电平方式的外部中断请求 B.跳沿方式的外部中断请求 C.外部串行中断 D.定时中断答:A3.中断查询确认后,在下列各种AT89S51单片机运行情况下,能立即进行响应的是()。
A.当前正在进行高优先级中断处理 B.当前正在执行RETI指令 C.当前指令是MOV A,R3 D.当前指令是DIV指令,且正处于取指令的机器周期答:C4.下列说法正确的是()。
A. 各中断源发出的中断请求信号,都会标记在AT89S51的IE寄存器中B. 各中断源发出的中断请求信号,都会标记在AT89S51的TMOD寄存器中C. 各中断源发出的中断请求信号,都会标记在AT89S51的IP寄存器中D. 各中断源发出的中断请求信号,都会标记在AT89S51的TCON、SCON寄存器中答:D三、判断对错1.定时器T0中断可以被外部中断0中断。
单片机原理及应用课后答案(张毅刚主编)篇一:单片机习题答案(哈工大张毅刚主编单片机原理及应用) “单片机原理及应用”课程习题与解答第一章1-3:单片机与普通计算机的不同之处在于其将()()和()三部分集成于一块芯片上。
答:CPU、存储器、I/O口1-8:8051与8751的区别是:A、内部数据存储但也数目的不同B、内部数据存储器的类型不同C、内部程序存储器的类型不同D、内部的寄存器的数目不同答:C第二章2-4:在MCS-51单片机中,如果采用6MHz晶振,1个机器周期为()。
答:2us。
析:机器周期为振荡周期的1/6。
2-6:内部RAM中,位地址为30H的位,该位所在字节的字节地址为()。
答:26H2-7:若A中的内容为63H,那么,P标志位的值为()。
答:0析:P为偶校验位,因为A中1的个数为偶数,所以P=0。
2-8:判断下列说法是否正确:A、8031的CPU是由RAM和EPROM所组成。
B、区分片外程序存储器和片外数据存储器的最可靠的方法是看其位于地址范围的低端还是高端。
C、在MCS-51中,为使准双向的I/O口工作在输入方式,必须保证它被事先预置为1。
D、PC可以看成使程序存储器的地址指针。
答:错、错、对、对2-9:8031单片机复位后,R4所对应的存储单元的地址为(),因上电时PSW=()。
这时当前的工作寄存器区是()组工作寄存器区。
答:04H、00H、02-11:判断以下有关PC和DPTR的结论是否正确?A、DPTR是可以访问的,而PC不能访问。
B、它们都是16位的存储器C、它们都有加1的功能。
D、DPTR可以分为两个8位的寄存器使用,但PC不能。
答:对、对、对、对2-13:使用8031芯片时,需将/EA引脚接()电平,因为其片内无()存储器。
答:低、程序2-14:片内RAM低128个单元划分为哪3个主要部分?各部分的主要功能是什么?答:工作寄存器区、位寻址区、数据缓冲区2-15:判断下列说法是否正确A、程序计数器PC不能为用户编程时直接使用,因为它没有地址。
单片机原理及应用(第三版)张毅刚-课后习题答案完整版第1章思考题及习题1参考答案一、填空1. 除了单片机这一名称之外,单片机还可称为或。
答:微控制器,嵌入式控制器.2.单片机与普通微型计算机的不同之处在于其将、、和三部分,通过内部连接在一起,集成于一块芯片上。
答:CPU、存储器、I/O口、总线3. AT89S52单片机工作频率上限为 MHz。
答:33 MHz。
4. 专用单片机已使系统结构最简化、软硬件资源利用最优化,从而大大降低和提高。
答:成本,可靠性。
二、单选1. 单片机内部数据之所以用二进制形式表示,主要是A.为了编程方便B.受器件的物理性能限制C.为了通用性D.为了提高运算速度答:B2. 在家用电器中使用单片机应属于微计算机的。
A.辅助设计应用B.测量、控制应用C.数值计算应用D.数据处理应用答: B3. 下面的哪一项应用,不属于单片机的应用范围。
A.工业控制 B.家用电器的控制 C.数据库管理 D.汽车电子设备答:C三、判断对错1. STC系列单片机是8051内核的单片机。
对2. AT89S52与AT89S51相比,片内多出了4KB的Flash程序存储器、128B的RAM、1个中断源、1个定时器(且具有捕捉功能)。
对3. 单片机是一种CPU。
错4. AT89S52单片机是微处理器。
错5. AT89C52片内的Flash程序存储器可在线写入,而AT89S52则不能。
错6. 为AT89C51单片机设计的应用系统板,可将芯片AT89C51直接用芯片AT89S51替换。
对7. 为AT89S51单片机设计的应用系统板,可将芯片AT89S51直接用芯片AT89S52替换。
对8. 单片机的功能侧重于测量和控制,而复杂的数字信号处理运算及高速的测控功能则是DSP的长处。
对四、简答1. 微处理器、微计算机、微处理机、CPU、单片机、嵌入式处理器它们之间有何区别?答:微处理器、微处理机和CPU它们都是中央处理器的不同称谓,微处理器芯片本身不是计算机。
哈尔滨工业大学单片机实验报告-图文(精)H a r b i n I n s t i t u t e o f T e c h n o l o g y 单片机原理与应用实验报告学生姓名:学号:班级:通信工程专业:任课教师:所在单位:电子与信息工程学院2013年5月在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。
实验一清零程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。
二、实验内容把2000~20FFh的内容清零。
三、程序框图四、实验过程1、LED环境⑴在“P.”状态下按“0→EV/UN”,装载实验所需的代码程序。
⑵在“P.”状态下键入0640,然后按“STEP”或“EXEC”进入实验项目的调试与运行。
在与PC联机状态下,编译、连接、下载PH51\se01.asm,用连续或单步方式运行程序。
3、运行结果检查⑴在单步运行时,每走一步可观察其运行结果。
⑵在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查2000~20FFH中执行程序前后的内容变化。
五、实验结果及分析实验前截图:实验后截图:实验源程序:ORG 0640HSE01: MOV R0,#00HMOV DPTR,#2000H ;(2000H送DPTR LOO1: MOVX @DPTR,A ;0送(DPTR INC DPTR ;DPTR+1INC R0 ;字节数加1CJNE R0,#00H,LOO1 ;不到FF个字节再清SJMP $END实验问题:2000H~20FFh中的内容是什么?解答:实验运行之前,2000H~20FFh中的内容是随机分配的;在执行完清零程序之后,2000H~20FFh中的内容都变为0.实验二拆字程序一、实验目的掌握汇编语言设计和调试方法。
软件实验在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。
实验一清零程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。
二、实验内容把2000~20FFh的内容清零。
三、程序框图四、实验过程(1)实验中定义R0为循环次数,利用定义了初值的数据指针DPTR不断加1指向需要被清零的外部数据存储器单元。
(2)再利用MOVX语句,将外部存储器指定内容清零。
(3)用CJNE比较语句判断循环是否结束。
五、实验结果及分析问题回答:清零前2000H~20FFH中为内存里的随机数,清零后全变为0。
六、实验源程序;清零程序ORG 0000HMOV DPTR,#2000HMOV R0,#0FFHORG 0660HMAIN: MOV A,#00HMOVX @DPTR,AINC DPTRDJNZ R0,MAINEND实验二拆字程序一、实验目的掌握汇编语言设计和调试方法。
二、实验内容把2000h的内容拆开,高位送2001h低位,低位送2002h低位,2001h、2002h高位清零,一般本程序用于把数据送显示缓冲区时用。
三、程序框图四、实验过程(1)定义数据指针DPTR为2000H,将其中内容送入累加器A中,利用高低四位交换语句SWAP可将高四位移至低四位,再用语句ANL与0FH进行与操作取出高四位送入2001H低位(2)再次让数据指针DPTR为2000H,将其中内容送入累加器A中,直接与0FH相与取出低四位送入2002H低位。
五、实验结果及分析问题回答:将ANL A,#0FH改为ORL A,#0F0H可以实现将高位置为1。
六、实验源程序;拆字程序ORG 0000HMAIN: MOV DPL, #00HMOV DPH, #20HMOVX A, @DPTRSWAP AANL A, #0FHINC DPTR-3-MOVX @DPTR, AMOV DPL,#00HMOVX A, @DPTRANL A, #0FHINC DPTRINC DPTRMOVX @DPTR, AEND实验三拼字程序一、实验目的进一步掌握汇编语言设计和调试方法。
1.答:系统连接简单:I2C 总线系统的基本结构如图12-7。
I2C 总线系统直接与具有I2C 总线接口的各种扩展器件(如存储器、I/O 芯片、A/D、D/A、键盘、显示器、日历/ 时钟)连接。
I2C 总线对各器件寻址采用纯软件的寻址方法,无需片选线的连接,这样就大大简化了总线数量,系统各部件之间的连接只需两条线。
数据传输速率较高:在标准I2C 普通模式下,数据的传输速率为100kbit/s ,高速模式下可达400kbit/s 。
2.答:I2C 总线的起始信号和终止信号都由主机发出,在起始信号产生后,总线就处于占用状态;在终止信号产生后,总线就处于空闲状态。
由图12-9 见起始信号和终止信号的规定。
(1)起始信号(S)。
在SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号,只有在起始信号以后,其他命令才有效。
(2)终止信号(P)。
在SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
随着终止信号的出现,所有外部操作都结束。
3.答:无论I2C 总线上的数据传输方向由寻址字节中的数据传输方向位规定:寻址字节器件地址引脚地址方向位DA3 DA2 DA1 DA0 A2 A1 A0 R/ =1,表示主机接收(读)。
R/ =0,表示主机发送(写)。
4.答:单片机对I2C 总线中的器件寻址采用软件寻址,主机在发送完起始信号后,立即发送寻址字节来寻址被控的从机,寻址字节格式如题 3 所示。
7 位从机地址即为“DA3、DA2、DA1、DA0”和“A2、A1、A0”。
其中“DA3、DA2、DA1、DA0”为器件地址,是外围器件固有的地址编码,器件出厂时就已经给定。
“A2、A1、A0”为引脚地址,由器件引脚A2、A1、A0 在电路中接高电平或接地决定(见图12-12)。
5.答:I2C 总线数据传送时,传送的字节数(数据帧)没有限制,每一字节必须为8 位长。
数据传送时,先传送最高位,每一个被传字节后面都须跟 1 位应答位(一帧数据共9 位),如图12-10。
《单片机原理》 实验指导书张毅刚 何谨 李华哈尔滨工业大学2007年4月目 录序-------------------------------------------------------------------------------------------------------------1实验1 单片机实验开发系统操作实验-------------------------------------2实验2 单片机数据区传送程序设计------------------------------------------4实验3 数据排序实验---------------------------------------------------------------------6实验4 查找相同数个数-----------------------------------------------------------------8实验5 P1口转弯灯实验---------------------------------------------------------------10实验6 工业顺序控制--------------------------------------------------------------------13实验7 8255控制交通灯---------------------------------------------------------------16实验8 A/D转换实验-----------------------------------------------------------------------19实验9 D/A转换实验-----------------------------------------------------------------------22实验10 电子时钟(定时器、中断综合实验)--------------------26附录1 DAIS-80958B单片机实验开发系统简介--------------------37附录2 实验开发系统的字形/字位/键值表---------------------------39序一、实验素养和一般知识1.实验前准备工作(1) 明确实验目的、熟悉实验内容、掌握实验步骤、了解所用单片机实验开发系统及仪器设备的性能。
单片机原理及应用第二版张毅刚--课后习题答案第1章单片机概述参考答案1.答:微控制器,嵌入式控制器2.答:CPU、存储器、I/O口、总线3.答:C4.答:B5.答:微处理器、微处理机和CPU它们都是中央处理器的不同称谓,微处理器芯片本身不是计算机。
而微计算机、单片机它们都是一个完整的计算机系统,单片机是集成在一个芯片上的用于测控目的的单片微计算机。
嵌入式处理器一般意义上讲,是指嵌入系统的单片机、DSP、嵌入式微处理器。
目前多把嵌入式处理器多指嵌入式微处理器,例如ARM7、ARM9等。
嵌入式微处理器相当于通用计算机中的CPU。
与单片机相比,单片机本身(或稍加扩展)就是一个小的计算机系统,可独立运行,具有完整的功能。
而嵌入式微处理器仅仅相当于单片机中的中央处理器。
为了满足嵌入式应用的特殊要求,嵌入式微处理器虽然在功能上和标准微处理器基本是一样的,但在工作温度、抗电磁干扰、可靠性等方面一般都做了各种增强。
6.答:MCS-51系列单片机的基本型芯片分别:8031、8051和8071。
它们的差别是在片内程序存储器上。
8031无片内程序存储器、8051片内有4K字节的程序存储器ROM,而8751片内有集成有4K字节的程序存储器EPROM。
7.答:因为MCS-51系列单片机中的“MCS”是Intel公司生产的单片机的系列符号,而51系列单片机是指世界各个厂家生产的所有与8051的内核结构、指令系统兼容的单片机。
8.答:相当于MCS-51系列中的87C51,只不过是AT89S51芯片内的4K字节Flash存储器取代了87C51片内的4K字节的EPROM。
9.单片机体积小、价格低且易于掌握和普及,很容易嵌入到各种通用目的的系统中,实现各种方式的检测和控制。
单片机在嵌入式处理器市场占有率最高,最大特点是价格低,体积小。
3.答:2µs4.答:1个机器周期等于12个时钟振荡周期。
5. 答:64K程序存储器空间中有5个特殊单元分别对应于5个中断源的中断服务程序入口地址,见下表:表 5个中断源的中断入口地址6. 答:28H;88H。
电路图用张毅刚版教材里给的图!!!!1、流水灯#include<reg52.h>#include<intrins.h>void delay(){unsigned char i,j;for(i=0;i<255;i++)for(j=0;j<255;j++);}void main(){P2=0xfe;while(1){P2=_crol_(P2,1);delay();}}2、单个外部中断#include<reg52.h>#include<intrins.h>void delay(unsigned char delay_time){unsigned int i,j;for(i=0;i<=delay_time;i++)for(j=0;j<=100;j++);}void init_tx(){EA=1;EX0=1;IT0=0;}void main(){P1=0x00;init_tx();delay(200);while(1){P1=~P1;delay(200);}}void tx0() interrupt 0{P1=0xfe;while(!INT0){P1=_crol_(P1,1);delay(200);}P1=0xff;}3、定时器#include<reg52.h>unsigned char t=20;sbit button=P3^2;sbit yellowled=P1^0;/* 定义接口*/void main(){TMOD=0x01;/* 选择中断方式*/ EA=1;ET0=1;TH0=0x3c;TL0=0x0b;while(button==0){TR0=1;}yellowled=1;}void tx() interrupt 1{TH0=0x3c;TL0=0xb0;t--;if(t==0){yellowled=~yellowled;t=20;}}4、双机串行通信#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define outk P1#define out1 P0#define out2 P2uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; uchar key,send,rec;uchar scan(void);void delay(unit);void main(void){TMOD=0X20; TH1=0XF2;/* 设置定时器T1 为方式/* 给定时器T1 赋初值 */2*/TH1=0XF2;TR1=1;/* 接通定时器T1*/SCON=0X50;/* 串行口方式1, REN=1允许接收*/ PCON=0X00;/* SMOD=0*/EA=1;ES=1;EX1=1;EX0=1;while(1){outk=0x07;out1=seg[send];out2=seg[rec];}}uchar scan(void){uchar k=10,m,n,in;delay(10);outk=0x07;if((outk&0x07)!=0x07){for(m=0;m<3;m++){outk=~(0x01<<(m+3));for(n=0;n<3;n++){in=outk;in=in>>n;if((in&0x01)==0){if((in&0x01)==0){k=n+m*3;break;}}}if(k!=10)break;}}return(k);}void delay(uint j){uchar i;for(;j>0;j--){i=250;while(--i);i=249;while(--i);}}void ext0()interrupt 0{EX0=0;key=scan();if(key!=10)send=key+1;EX0=1;}void ext1()interrupt 2{ES=0;SBUF=send;while(!TI);TI=0;ES=1;}void com()interrupt 4{RI=0;rec=SBUF;}5、单片机与PC 串行通信#include <reg51.h>void send(unsigned char dat) {SBUF=dat;while(TI==0);;TI=0;}void init_tx(){EA=1;EX0=1;}void delay(void){unsigned char m,n;for(m=0;m<250;m++)for(n=0;n<250;n++);}void main(void){init_tx();TMOD=0x20;SCON=0x40;PCON=0x00;TH1=0xfd;TL1=0xfd;TR1=1;while(1);}void tx0() interrupt 0{unsigned char i=0;send(0x01);delay();i++;}6、扩展 82c55 并行 IO 接口#include<reg51.h>#include<absacc.h>#define uchar unsigned char #define uint unsigned intsbit rst_8255=P3^5;#define con_8255XBYTE[0x7003] #define pa_8255XBYTE[0x7000] #define pb_8255XBYTE[0x7001] void reset_8255(void);void delay(uint);void main(void){/*0x7003 为 82C55 的控制寄存器地址/* 以下定义pa、pb 的端口地址 */*/uchar temp;rst_8255=1;delay(1);rst_8255=0;con_8255=0x82;while(1){/* 复位 */temp=pb_8255;pa_8255=temp;/* 锁存 */}}void delay(uint j)/* 延时函数*/{uchar i;for(;j>0;j--){i=250;while(--i);i=249;while(--i);}}7、矩阵键盘#include<reg51.h>unsigned char codetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void delay(){unsigned char i,j;(延时)for(i=0;i<=25;i++)for(j=0;j<=25;j++);}unsigned char key_scan(){unsigned char key0,key1;unsigned char key_num=0;P1=0x0f; 先将 p1.0~P1.3 置高key0=P1;if(key0!=0x0f) 如果 P1.4~P1.7 不全为 1,可能有键按下{delay();key0=P1;if(key0!=0x0f){P1=0xf0;key1=P1;if(key0==0x0e){switch(key1){case 0xe0: key_num=0;break;case 0xd0: key_num=1;break;case 0xb0: key_num=2;break;case 0x70: key_num=3;break;default: key_num=0;break;}}else if(key0==0x0d){switch(key1){case 0xe0: key_num=4;break;case 0xd0: key_num=5;break; ( 处理 5 号键 )case 0xb0: key_num=6;break;case 0x70: key_num=7;break;default: key_num=0;break;(无效按键,如多个键同时按下)}}else if(key0==0x0b){switch(key1){case 0xe0: key_num=8;break;case 0xd0: key_num=9;break;case 0xb0: key_num=10;break;case 0x70: key_num=11;break;default: key_num=0;break;}}else if(key0==0x07){switch(key1){case 0xe0: key_num=12;break;case 0xd0: key_num=13;break;case 0xb0: key_num=14;break;case 0x70: key_num=15;break;default: key_num=0;break;}}}}return key_num;}void main(){unsigned char key_num;do{key_num=key_scan();P2=table[key_num];}while(1);}8、 1602 液晶显示#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define out P0sbit RS=P2^0;sbit RW=P2^1;sbit E=P2^2;void lcd_initial(void);void check_busy(void);void write_command(uchar com);void write_data(uchar dat);void string(uchar ad,uchar *s);void lcd_test(void);void delay(uint);void main(void){lcd_initial();while(1){string(0x82,"Hello Welcome");string(0xC2,"To China");delay(100);write_command(0x01);delay(100);}}void delay(uint j){uchar i=250;for(;j>0;j--){while(--i);i=249;while(--i);i=250;}}void check_busy(void){uchar dt;do{dt=0xff;E=0;RS=0;RW=1;E=1;dt=out;}while(dt&0x80);E=0;}void write_command(uchar com){check_busy();E=0;RS=0;RW=0;out=com;E=1;_nop_();E=0;delay(1);}void write_data(uchar dat){check_busy();E=0;RS=1;RW=0;out=dat;E=1;_nop_();E=0;delay(1);}void lcd_initial(void){write_command(0x3c);write_command(0x0C);write_command(0x14);write_command(0x01);delay(1);}void string(uchar ad,uchar *s) {write_command(ad);while(*s>0){write_data(*s++);delay(100);}}9、 DA 转换#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define out P1sbit DAC_cs=P2^0;sbit DAC_wr=P2^1;void main(void){uchar temp,i=255;while(1){{out=temp;DAC_cs=0; DAC_wr=0;/* 片选端,芯片被选中/* 选通,并被锁存*/*/DAC_cs=1;/* 以下开始转换*/DAC_wr=1;temp++;while(--i);/* 延时函数!!,老师帮改的*/}}}10、 AD 转换#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define LED P0#define out P1sbit start=P2^1;sbit OE=P2^7;sbit EOC=P2^3;sbit CLOCK=P2^0;sbit add_a=P2^4;sbit add_b=P2^5;sbit add_c=P2^6;void main(void){uchar temp;add_a=0;add_b=0;add_c=0;while(1){start=0;start=1;start=0;while(1){CLOCK=!CLOCK;if(EOC==1){break;}OE=1;temp=out;OE=0;LED=temp;}}}。