MCU第二次实验报告
- 格式:pdf
- 大小:179.32 KB
- 文档页数:9
项目二单片机控制的流水灯设计、仿真及制作专业:17电子信息学号:19 姓名:张静一、实验目的和要求1、理解并行I/O口的输入/输出功能。
2、根据项目要求,设计电路,PROTEUS完成仿真,用面包板完成硬件制作。
3、实现单片机控制的LED闪烁,掌握电路设计、软件设计调试、源程序下载,软硬联调。
二、实验仪器设备1、PC机(PROTEUS,Keil)2、元器件3、面包板4、编程器三、实验步骤1、器件准备2、系统设计1)软件仿真----PROTUES 仿真2)、硬件设计在面包板上搭建电路。
3)、软件设计源程序#include<reg51.h>#include<intrins.h>void delay (unsigned int i){unsigned int k;for (k=0;k<i;k++);}void main(){P1=0x7F;while(1){P1=_cror_(P1,1);delay(5000);}}四、硬件(照片)五、项目扩展A 暗点流动仿真仿真图核心代码#include<reg51.h>#include<intrins.h>void delay (unsigned int i){unsigned int k;for (k=0;k<i;k++);}void main(){P1=0x07;while(1){P1=_cror_(P1,1);delay(5000);}}B 四个按键控制的LED灯----按键1启动,按键2 停止,按键3向上流水,按键4 向下流水1) 仿真仿真图2) 硬件制作(照片)核心代码#include<reg51.h>#define TIME 1200#include<intrins.h> sbit S1=P3^2;sbit S2=P3^3;sbit S3=P3^4;sbit S4=P3^5;void delay (unsigned int i) {unsigned int k;for (k=0;k<i;k++);}void main(){P1=0xff;while(1){if (S1==0){delay(TIME);if (S1==0)P1=0x00;} else if(S2==0){delay(TIME);if(S2==0)P1=0xFF;}else if(S3==0){delay(TIME);if (S3==0)P1=0x7f;while(1){P1=_cror_(P1,1); delay(10000);if (S4==0) break;}}else if (S4==0){delay(TIME);if (S4==0)P1=0x7f;while(1){ P1=_crol_(P1,1);delay(10000);if (S2==0) break;}}}}六、总结。
单片机实验报告学号:____________ 姓名:____________一、实验目的:1.实验一的目的:掌握汇编语言设计和调试方法,熟悉键盘操作;2.实验二的目的:掌握汇编语言设计和调试方法;3.实验三的目的:进一步掌握汇编语言设计和调试方法。
二、实验设备:装有Keil uVision的计算机1台(本人用的是装有Keil uVision2的计算机)三、实验内容:实验一清零程序1.实验内容:把2000H~20FFH的内容清零2.我的流程图、源程序及调试结果:流程图(用Edraw Mind Map 7.8制作):源程序:ORG 0000HLJMP STARTORG 0100HSTART: MOV R0,#0FFHMOV DPTR,#2000HMOV A,#00HMAIN: MOVX @DPTR,AINC DPTRDJNZ R0,MAINSJMP $END调试结果:将源程序中的MOV A,#00H改为MOV A,#0FFH,以便观察上述程序是否能够实现清零功能。
实验二拆字程序1.实验内容:把2000H的内容拆开,高位送2001H,低位送2002H,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。
2.我的流程图、源程序及调试结果:流程图(用Edraw Mind Map 7.8制作):源程序:ORG 0000HLJMP STARTORG 0100HSTART: MOV DPTR,#2000HMOV A,#0A3H ;给累加器A赋一个值MOVX @DPTR,A ;将累加器A中的内容作为2000H的内容 MOV R0,AANL A,#0F0HSWAP AINC DPTRMOVX @DPTR,AMOV A,R0ANL A,#0FHINC DPTRMOVX @DPTR,ASJMP $END调试结果:实验三拼字程序1.实验内容:把2000H、2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成一字节。
《微机实验》报告实验名称 分支程序设计实验 专业班级 姓名 学号 序号 联系方式一、任务要求熟练掌握KeilC 环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行IO 口的使用。
1. 设有8bits 符号数X 存于外部RAM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写程序。
240/2204020X X Y X X X X ⎧≥⎪=<<⎨⎪≤⎩当当当2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD 码的形式)。
P3.0为低电平时开始计时,为高电平时停止计时。
提高部分(选做):a. 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。
利用P3.7状态选择加、减计数方式。
b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。
二、设计思路1.分段函数设计对于第一个任务,相当于设计一个分段函数程序,根据变量X的值所处的区间进行相应的计算。
由学过的知识知道,可利用比较转移指令CJNE来判断X是否等于临界值20,40,若不等,再根据执行CJNE 指令后的进位位CY的值来判断X与临界值的的大小关系,易知CY=0则X大于临界值,CY=1则X小于临界值;如此,再进行相应的计算。
另外,除法计算中可能产生余数,商和余数应该分开存储,若乘方运算结果大于255,高八位与低八位应分开存储。
2. 24小时制时钟程序本程序须可以构建两部分循环。
首先构建一个三重循环实现“一秒延时”,循环体利用NOP指令(单字节指令,1µs)经多次循环达到延时一秒的效果。
再利用已经构建好的“一秒延时”部分,设计计时系统的三重循环,秒(0-59)、分(0-59)、时(0-23)。
需要注意的是,在小时、分、秒达到59时,下一次应该为零。
单片机上机实验报告学院:光学与电子信息学院班级:光电1001班姓名:学号:U201013349日期:微机实验二实验名称 KeilC的使用与汇编语言的上机操作一.实验目的:熟练掌握KeilC环境下汇编语言程序的调试方法,加深对汇编语言指令,机器码,寻址方式等基本内容的理解,掌握用分支程序和简单程序的设计和调试方法,了解并行I/O口的使用。
二.实验内容:1.分支程序的设计:1)设计要求:设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写程序:240/2204020X XY X XX X⎧≥⎪=<<⎨⎪≤⎩当当当2)设计思路:把外部RAM内容传给A,先判断正负,小于或等于0,则执行取反,并把结果传回片外RAM,并结束;若大于0,再判断A与14H的大小,若小于,则执行取反;若大于14H,则再判断A与28H的大小,若A大于等于28H,则执行平方操作,并依此分别把积的低八位,高八位传回片外RAM,并结束;若小于28H,则执行A除以2,结果传回片外RAM。
3)程序流程图如下所示:start DPTR赋初值A←(DPTR)ACC.7=1 ?A≤14H ?A≥28H ? CPL A A←A/2A←A的平方←YNYNNY(DPTR+1)←A(DPTR+1)←低八位,(DPTR+2)←高八位end4)资源分配和源代码如下所示:File name: 分支程序设计.asmDescription: 判断片外RAM的2000H单元的内容,若小于或等于40,则逐位取反,结果存于原单元中,若大于20且小于40,则内容除以2,结果送回原单元,若大于或等于40,则单内容平方,结果低八位送回原单元,高八位送至下一单元。
Date: 2012.10.10Designed by: QinChengzhiSource used: DPTR 对片外RAM进行读写A,B 用于乘法运算的中间结果2000H,2001H 存放待操作的数作为结果的存放单元ORG 0000HLJMP MAINORG 1000H ;程序从1000H开始TABLE EQU 2000H ;定义符号地址TABLE,为2000HMAIN: MOV DPTR,#TABLE ;DPTR赋初值,指向2000H单元MOVX A,@DPTR ;把2000H单元内容给AJB ACC.7, L1 ;最高位为1,则跳转至L1CJNE A,#14H,LOOP1 ;最高位为0,则比较A与14H,不等则跳转LOOP1L1: CPL A ;A等于14H,也跳转L1,A逐位取反INC DPTR ; DPTR加1MOVX @DPTR,A ;把A的内容再送回下一单元SJMP DONE ;跳转至DONELOOP1: JC L1 ;A小于14H,也跳转至L1CJNE A,#28H,LOOP3 ;A大于14H,再与28H比较,不等则跳转LOOP3LOOP2: MOV B,A ;若A小于28H,则转LOOP2,把A内容给BMUL AB ;A与B相乘INC DPTR ;DPTR加1MOVX @DPTR,A ;积的低位存于下一单元INC DPTR ;高位存于再下一单元MOV A,BMOVX @DPTR,ASJMP DONE ;跳转至DONELOOP3: JNC LOOP2 ;若A大于28H,跳转到LOOP2RR A ;若A小于28H,则A除以2INC DPTR ;DPTR加1MOVX @DPTR,A ;把A内容传回下一单元SJMP DONE ;跳转至DONEDONE: SJMP $ ;踏步END ;结束4)程序结果测试与软件性能分析:4.1程序结果测试:情况1:不妨在memory的2000H中输入FE,运行结果应为(2001H)=FE取反,即(2001H)=01 仿真结果如下:对比运行结果和分析结果,两者相符情况2:在memory的2000H中输入24H,运行结果应为24H/2=12H,运行结果如下所示:对比运行结果和分析结果,两者相符情况3:在memory的2000H中输入35H,运行的结果为(2001H)=F9,(2002H)=0A,运行结果如下:对比运行结果和分析结果,两者相符4.2软件性能测试:1)运行时间:从simulation中即可看出程序的运行时间,情况如下:情况1:情况2:情况3:2)代码量的大小,资源的消耗情况如下所示:2. 24小时的电子时钟的设计:1)设计要求:利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。
第二次实验报告心得前言本次实验是第二次实验,我们小组研究的主题是XXX。
通过这次实验,我们掌握了XXX的基本原理和实验操作方法。
在实验过程中,我们遇到了挑战和问题,但也取得了进步和收获。
实验过程与成果我们小组在实验前制定了详细的实验计划并分工合作。
首先,我们对XXX进行了深入的了解和学习,并通过查阅大量的文献和资料来提高对该主题的理解和认识。
在熟悉了实验内容和操作流程后,我们进行了实验的准备工作,包括搭建实验装置、调试仪器设备等。
在实验过程中,我们认真操作,严格遵守实验操作规范,确保了实验的安全性和准确性。
我们按照实验计划逐步进行实验并记录下实验数据和现象。
同时,我们也积极讨论和交流,共同解决实验中遇到的问题和困难。
通过实验,我们获得了大量的实验数据和结果。
我们对实验数据进行了仔细的整理和分析,并进行了合理的处理和计算。
最终,我们得到了一系列有关XXX的重要结论和发现。
实验收获与成长本次实验让我们获得了许多宝贵的经验和知识,也让我们在实践中得到了成长。
首先,通过实验过程,我们掌握了XXX的基本原理和实验方法。
我们深入研究了相关的理论知识,并将其运用到实际操作中。
我们通过实验实践,进一步加深了对XXX的理解,加强了对实验方法的掌握。
其次,通过团队合作,我们学会了有效地协作和沟通。
在实验过程中,我们互相帮助、共同解决问题,并且共同分工合作,提高了实验效率和质量。
我们在团队中形成良好的合作氛围,培养了团队意识和合作能力。
最后,通过实验报告的撰写,我们学会了对实验数据进行整理和分析,并将实验结果清晰准确地表达出来。
这锻炼了我们的科学思维和表达能力,提高了我们的写作水平。
反思与改进在实验中,我们也面临了一些挑战和问题。
通过实验的反思和总结,我们认识到了不足之处,并提出了一些改进的建议。
首先,我们在实验前准备方面需要更加细致和仔细。
在本次实验中,我们发现有些仪器设备的调试工作并没有充分准备,导致实验过程中出现了一些意外情况。
3.5.4 实验参考程序;T8259-1.asm;8259中断查询方式应用实验IOY0 EQU 3000H ;片选IOY0对应的端口始地址MY8259_ICW1 EQU IOY0+00H ;实验系统中8259的ICW1端口地址MY8259_ICW2 EQU IOY0+04H ;实验系统中8259的ICW2端口地址MY8259_ICW3 EQU IOY0+04H ;实验系统中8259的ICW3端口地址MY8259_ICW4 EQU IOY0+04H ;实验系统中8259的ICW4端口地址MY8259_OCW1 EQU IOY0+04H ;实验系统中8259的OCW1端口地址MY8259_OCW2 EQU IOY0+00H ;实验系统中8259的OCW2端口地址MY8259_OCW3 EQU IOY0+00H ;实验系统中8259的OCW3端口地址STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODESTART: MOV DX,MY8259_ICW1 ;初始化实验系统中8259的ICW1 MOV AL,13H ;边沿触发、单片8259、需要ICW4OUT DX,ALMOV DX,MY8259_ICW2 ;初始化实验系统中8259的ICW2MOV AL,08HOUT DX,ALMOV DX,MY8259_ICW4 ;初始化实验系统中8259的ICW4MOV AL,01H ;非自动结束EOIOUT DX,ALMOV DX,MY8259_OCW1 ;初始化实验系统中8259的OCW1MOV AL,0FCH ;打开IR0和IR1的屏蔽位OUT DX,ALQUERY: MOV AH,1 ;判断是否有按键按下INT 16HJNZ QUIT ;有按键则退出MOV DX,MY8259_OCW3 ;向8259的OCW3发送查询命令MOV AL,0CHOUT DX,ALIN AL,DX ;读出查询字TEST AL,80H ;判断中断是否已响应JZ QUERY ;没有响应则继续查询AND AL,03HCMP AL,00HJE IR0ISR ;若为IR0请求,跳到IR0处理程序JNE IR1ISR ;若为IR1请求,跳到IR1处理程序JMP QUERYIR0ISR:MOV AL,30H ;IR0处理,显示字符0MOV AH,0EHINT 10HMOV AL,20HINT 10HJMP EOIIR1ISR:MOV AL,31H ;IR1处理,显示字符1MOV AH,0EHINT 10HMOV AL,20HINT 10HEOI: MOV DX,MY8259_OCW2 ;向实验系统中8259发送中断结束命令MOV AL,20HOUT DX,ALJMP QUERYQUIT: MOV AX,4C00H ;结束程序退出INT 21HCODE ENDSEND START3.5.5 实验现象和分析3.5.6 实验心得。
引言 (03)1.设计目的 (03)2.设计要求 (03)2.1. 基本功能 (03)2.2. 扩展功能 (03)3. 软件设计 (03)3.1. 方案论证比较 (03)3.1.1. 数码管与LCD液晶显示 (03)3.1.2. 用单片机内部定时器设计时钟与用DS1302时钟芯片 (03)3.1.2. 用按键模拟红外探测、输入门禁与用发光二极管 (04)3.2. 总体框图设计 (04)3.3. 电路原理分析 (04)3.3.1. 晶振电路 (04)3.3.2. DS1302 模块 (05)3.3.3. LCD1602 显示模块 (05)3.3.4. 按键模块 (06)3.3.5. SPEAKER 电路 (06)3.3.6. 数码管驱动电路 (07)3.4. 总体电路图设计 (07)3.5. 程序设计模块 (07)3.5.1. LCD 显示程序 (07)3.5.2. DS1302 读写数据函数 (08)3.5.3. 按键扫描 (09)3.5.4. 内中断函数 (10)3.5.5. 外中断函数 (11)3.6. 完整的程序清单 (11)4. 硬件设计 (21)4.1. 硬件实物图 (21)4.1.1. 复位 (22)4.1.2. 外部中断0模拟红外探测 (22)4.1.3. 外部中断1模拟输入门禁 (22)4.1.4. 时钟显示 (23)4.2. 硬件检错分析 (23)5. 单片机课程设计心得体会 (24)20世纪末,电子技术获得了飞速的发展,在其推动下,具有功能强、体积小、可靠性高、价格低廉的单片机在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。
现在生活的人们越来越重视起了时间观念和防范意识,可以说是时间和防范意识和金钱划上了等号,对于那些对时间把握非常严格和警惕性高的人来说,时间的不准确性带来不小的麻烦,所以说以数码管显示的时钟比指针式的时钟表现出了很大的优势。
题目实验5 中断实验一、实验目的:1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
二、实验设备:CPU挂箱、8031CPU模块三、实验内容:在交通灯控制实验的内容的基础上增加允许急救车优先通过的要求。
当有急救车到达时,两个方向上的红灯亮,以便让急救车通过,假定急救车通过路口的时间为10秒,急救车通过后,交通灯恢复中断前的状态。
本实验以单脉冲为中断申请,表示有急救车通过。
四、实验步骤:1、打开CPU挂箱,正确安装8031CPU模块,指导显示屏上显示“199502”字样2、74LS273的输出O0~O7接发光二极管L1~L8,74LS273的片选CS273\接片选信号CS2,此时74LS273的片选地址为CFB0H~CFB7H之间任选。
单脉冲输出端P-接CPU板上的INT0。
3、打开软件,选择相应的COM口和波特率,电脑与CPU挂箱正确连接上后,软件窗口的下端会显示已连接上,相应的CPU挂箱显示屏上会显示“C ”字样。
4、在软件上选择新建,新建文件类型为ASM51,新建好后,编写程序。
5、程序编写好后,选择保存,然后进行编译,调试,运行程序。
6、观察CPU挂箱上硬件的运行是否与设计的一样,否则进行相应的修改和调试。
五、注意事项:1、应保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。
要保护的地方,有累加器ACC、标志寄存器PSW,还有需要保护的工作寄存器。
2、主程序中的延时程序和中断处理程序中的延时程序不能混用,本实验给出的程序中,主程序延时用的是R5、R6、R7,中断延时用的是R3、R4和新的R5。
3、主程序中每执行一步经74LS273的端口输出数据的操作时,应先将所输出的数据保存到一个单元中。
因为进入中断程序后也要执行往74LS273端口输出数据的操作,中断返回时如果没有恢复中断前74LS273端口锁存器的数据,则显示往往出错,回不到中断前的状态。
六、汇编程序:T5.ASMNAME T5 ;中断控制实验OUTPORT EQU 0CFB0H ;端口地址SAVE EQU 55H ;save保存从端口cfa0输出的数据CSEG AT 0000H ;程序入口地址LJMP START ;跳转到程序开始CSEG AT 4003H ;中断入口地址LJMP INT ;无条件跳转到中断服务程序CSEG AT 4100HSTART: SETB IT0 ;IT0置1,外部中断0的触发方式为下降沿触发 SETB EX0 ;EX0置1,打开外部中断0,允许外部中断0中断 SETB EA ;EA置1,打开中断允许总控制位,开放中断MOV A,#11H ;置首显示码MOV SAVE,A ;保存ACALL DISP ; 调用子程序DISP,显示输出ACALL DE3S ;延时3秒LLL: MOV A,#12H ;东西路口绿灯亮,南北路口红灯亮MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE10S ;延时10秒MOV A,#10H ;东西路口绿灯灭MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPMOV R2,#05H ;东西路口黄灯闪烁5次TTT: MOV A,#14H ;东西路口黄灯亮,南北路口红灯亮MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE02S ;延时0.2秒MOV A,#10H ;东西路口黄灯灯灭MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE02S ;延时2秒DJNZ R2,TTT ;循环5次,东西路口黄灯闪烁5次MOV A,#11H ;红灯全亮MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE02S ;延时0.2秒MOV A,#21H ;东西路口红灯亮,南北路口绿灯亮MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE10S ;延时10秒MOV A,#01H ;南北路口绿灯灭MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPMOV R2,#05H ;南北路口黄灯闪烁5次GGG: MOV A,#41H ;南北路口黄灯亮,东西路口红灯亮 MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE02S ;延时0.2秒MOV A,#01H ;南北路口黄灯灭,东西路口红灯亮 MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE02S ;延时0.2秒DJNZ R2,GGG ;南北路口黄灯闪烁5次MOV A,#11H ;红灯全亮MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE02S ;延时0.2秒JMP LLL ;转LLL循环DE10S: MOV R5,#100 ;延时10秒JMP DE1 ;跳到DE1DE3S: MOV R5,#30 ;延时3秒JMP DE1 ;跳转到DE1DE02S: MOV R5,#02 ;延时0.2秒DE1: MOV R6,#200 ;置R6的初值DE2: MOV R7,#126 ;置R7的初值DE3: DJNZ R7,DE3 ;由R7的初值,循环126次DJNZ R6,DE2 ;由R6的初值,循环200次DJNZ R5,DE1 ;由R5的初值,循环2次RET ;中断返回INT: CLR EA ;EA清零,关闭中断PUSH ACC ;中断处理PUSH PSW ;入栈MOV A,R5 ;入栈PUSH ACC ;入栈MOV A,#11H ;红灯全亮,绿、黄灯全灭ACALL DISP ;调用子程序DISPDEL10S: MOV R3,#100 ;延时10秒DEL1: MOV R2,#200 ;R2置初值DEL2: MOV R5,#126 ;R5置初值DEL3: DJNZ R5,DEL3 ;由R5的值,循环126次DJNZ R2,DEL2 ;由R2的值,循环200次DJNZ R3,DEL1 ;由R3的值,循环100次MOV A,SAVE ;取SAVE中保存数据输出到cfa0端口 ACALL DISP ;调用子程序DISPPOP ACC ;出栈MOV R5,A ;出栈POP PSW ;出栈POP ACC ;出栈SETB EA ;允许外部中断RETI ;中断返回DISP: MOV DPTR,#OUTPORT ;输出程序CPL A ;累加器A中的值取反MOVX @DPTR,ARET ; 子程序调用返回END ;程序结束。
实验二定时器实验一、实验目的与要求利用定时器控制产生占空比可变的PWM波,通过实验验证进一步加强对定时器功能的认识,掌握定时器的使用方法。
1、用P1.0口输出PWM波,利用按键控制占空比的增加和降低,用示波器查看P1.0口的输出波形。
2、引导学生进行利用现有程序演示定时器动态显示数码管实验,了解数码管动态扫描方式。
二、实验注意事项1、启动KEIL软件,选择菜单“工程\新建工程”以建立工程(扩展名为.uv2,如T2a.uv2)。
2、选择菜单“文件\新文件”以建立一个新的文本编辑窗口,在窗口中输入参考源程序1并保存(扩展名为.asm),如test2a.asm,然后将其加入到源程序组1中。
3、在工程菜单的选项“目标1属性”中设置相应的选项,包括“输出\产生hex文件”选项以便汇编生成HEX代码供编程器使用,在“调试\使用KeilMonitor-51 Driver”的设置中选择相应的串口号。
4、使用“工程”中的“编译全部文件”完成相应的文件编译,如果程序格式正确将生成相应HEX代码文件,如T2a.hex。
如果提示有编译错误请自行修改源程序然后再重新编译。
5、用单根连线将P1.0(JP44)连接到8路指示灯部分(JP32)的LED0,将P1.6、P1.7(JP44)分别连接到JP37的K01、K02。
6、完成仿真器与计算机之间的连线并通电。
7、在KEIL软件中启动“调试\开启仿真模式”,然后用“运行”命令实现全速运行的仿真。
8、观察实验现象并分别依次按下K01、K02,观察并记录实验现象然后在KEIL软件中启动“中断运行-调试(debug)\关闭仿真模式”退出仿真,选择“工程\关闭工程”可关闭当前工程。
9、参考步骤1-4完成参考源程序2的建立与输入,如新项目T2b.uv2和新的源程序test2b.asm,完成编译与仿真设置。
10、用8PIN连线将P0口连接到数码管数据输入端,P2口连接到数码管控制端。
11、输入程序并仿真运行,注意数码管的显示内容。
单片机原理及应用实验报告一、引言单片机(Microcontroller Unit,简称MCU)是一种集成电路芯片,内部集成了微处理器、存储器、输入输出接口和定时器等功能模块,广泛应用于各种电子设备和控制系统中。
本实验报告将介绍单片机的基本原理以及其在实际应用中的实验。
二、单片机的基本原理单片机的核心是微处理器,它负责执行程序指令。
单片机的存储器包括程序存储器(Program Memory)和数据存储器(Data Memory)。
程序存储器用于存储程序指令,数据存储器用于存储数据和中间结果。
单片机通过输入输出接口与外部设备进行通信,通过定时器来控制程序的执行时间。
三、单片机的应用实验1. LED闪烁实验LED闪烁实验是单片机入门实验的经典案例。
通过控制单片机的输出口,周期性地改变LED的状态,从而实现LED的闪烁效果。
这个实验可以帮助初学者了解单片机编程的基本概念和操作。
2. 温度测量实验温度测量实验可以通过连接温度传感器和单片机的输入口,实时地获取环境温度,并通过数码管或LCD显示器来显示温度数值。
这个实验可以帮助学生掌握单片机输入输出口的使用方法,以及模拟信号的处理和显示。
3. 蜂鸣器控制实验蜂鸣器控制实验可以通过连接蜂鸣器和单片机的输出口,实现对蜂鸣器的控制。
通过编写程序,可以使蜂鸣器发出不同的声音,如单调的蜂鸣声、警报声等。
这个实验可以帮助学生学习单片机的数字输出和PWM(脉冲宽度调制)技术。
4. 电机控制实验电机控制实验可以通过连接电机和单片机的输出口,实现对电机的控制。
通过编写程序,可以控制电机的转动方向和速度。
这个实验可以帮助学生理解单片机输出口的电流和电压特性,以及电机的控制原理。
5. 红外遥控实验红外遥控实验可以通过连接红外接收器和单片机的输入口,实现对红外遥控信号的解码和处理。
通过编写程序,可以实现对各种红外遥控器的解码和按键处理。
这个实验可以帮助学生学习单片机输入口的中断处理和红外通信原理。
实验名称:I/O接口实验与LED显示实验
目录
一.实验目的和要求 (3)
二.实验原理 (3)
三.实验方案与实验步骤 (5)
四.实验设备与器材 (7)
五.实验记录 (7)
六.实验总结 (7)
七.源代码 (7)
一.实验目的与要求
(一)实验目的
1、I/O接口实验了解单片机各个口的输出,以及延时程序的计算;
2、L ED显示实验,了解数码管显示机理,学会片外编码。
(二)实验要求
1、I/O接口实验
利用实验板I/O口(例如P0口)控制8个LED循环显示,循环点亮时间间隔约为1秒(采用软件延时实现)。
2、LED显示实验
要求在8个LED数码管显示8个指定的数(例如学号后8位)。
本实验不需要接线。
二.实验原理
1、I/O接口实验
图2-1 上排LED指示灯(与FPGA相连)原理图
图2-2 下排LED指示灯(通过CPLD译码与CPU相连)原理图主板左下方有16个LED指示灯,其中上面8个LED指示灯FLED0~FLED7输入直接与FPGA 插座引脚相连,可由FPGA模块输出引脚直接驱动,电路如图2-1所示,输入高电平时相应指示灯被点亮(这里实验箱开机复位后默认是点亮的)。
下面一排的8个LED指示灯LED0~LED7输入与CPU总线相连,作为系统扩展接口,其地址选通(0F600H)由CPLD地址译码控制,电路如图2-2所示,输入低电平时相应指示灯被点亮。
本实验采用的是上面一排与FPGA 相连的LED,需要8根导线将I/O口与相应的LED连接。
2、LED显示实验
如图所示:实验装置上设有8只共阳极七段数码管及驱动电路,8只数码管共数据线,通过片选可以分别显示。
段码表为:
表2-1 数码管段码表
编程提示:
数码管模块具有两个地址:片选地址(位控地址)0F400H和数据(段码)地址0F300H,要在某个数码管上显示1个数,需要先向片选地址上送一个数选中其中一个数码管,再向数据地址送要显示的数据的段码值,这就是位控和段控。
数码管的I/O地址都为片外地址。
数码管要8位同时显示,需要采用动态刷新的方式将8位数码管轮流显示。
刷新时间可设为1ms。
段码可采用查表法或其它方法来实现,例如查表法
TAB: DB 0C0H,0F9H,…
三.实验方案与实验步骤
1、I/O接口实验
实验箱单片机的工作频率为12MHz,机器周期为1us。
延时1s,循环亮灭显示,实现流水灯。
首先,实验要求指示灯轮流暗灭变化,那么能够想到的就是给一个8位的2进制数,其每个位代表每个指示灯的电平,假设高电平(1)时指示灯灭,低电平(0)时指示灯亮,那么这个8位2进制数有一位是0,假设是最低位即11111110(0FEH),实现流水灯则需要将这个最低位逐步左移即可,左移之前循环调用延时程序,假设延时1s进行左移,则可以实现流水灯。
左移操作用RL,但必须是累加器内容循环左移,也即是说8位的初始值先要赋值给累加器,然后累加器得值送给P0(或者P1等)后的8位输出,然后左移,即可。
延时程序是采用延时1s循环显示,由于该单片机的晶振频率是12MHZ,则一个机器周期是1us,要求达到1s的延时,需要做一个多重循环,加长延时时间,这里做三重循环。
实验流程图:
2、LED显示实验
本实验的原理是数码管的两个地址,片选和数据地址,要求在某个数码管上显示一个数字,那么先要向片选段送一个数选中其中一个数码管,之后再由数据传送显示要显示的数字,而数码管的显示分为两种,静态显示和动态显示,这里采用的是动态刷新显示,8个数码管其实是相隔1ms轮流显示的,只不过是刷心的时间比较短,人眼无法识别而已,看起来像静态显示。
由片选初地址0F400H,便可以用来选中其中的某个数码管,一旦选通后,将数据地址传送至要显示的数码管,将该地址的数据通过查表。
得到要显示的数字,从而实现段控。
流程图:
四.实验设备与器材
1.单片机/ISP综合设计实验箱一台
2.CPU模块一块(可选)
3.DB25标准并口下载电缆一根
4.电源线一根
5.DB9在线调试线
五.实验记录
1、I/O接口实验:
运行程序后,可以看到八个LED灯依次循环点亮,即实现流水灯。
2、LED显示实验
运行程序后,可以看到在八个数码管显示实验要显示的数据12345678。
六.实验总结
1、本次两个实验,第一个I/O接口实验程序较简单。
第二个LED显示实验程序较复杂,实验中遇到的第一个问题就是延时程序,一个实验我们最初的延时程序是:DELAY: MOV R1,#10 ;[(10*2+2+1)*200+2+1]*218+2+1=1003457
DE1: MOV R2,#200
DE2: MOV R3,#218
DJNZ R1,$
DJNZ R2, DE2
DJNZ R3,DE1
RET
第二个实验延时程序:
DELAY: MOV R1,#10 ;(10*2+2+1)*44+2+1=1015
DE1: MOV R2,#44
DJNZ R1,$
DJNZ R2, DE1
RET
但是执行程序时,卡住了不继续执行下去,当单步跟踪时,发现存储器R1内的数据从0FFH减到00H后,又从头开始减,即程序进入死循环,具体原因不知道。
后来改了延时程序,程序得以正确运行。
2、在数码管动态显示的实验中,通过实验我加深了对数码管动态显示的原理的理解,它是利用人眼辨别的视觉停留原理,在很短的时间内,依次选通每个数码管,并给数码管输出要显示数的段码,接着形成循环,这样在很短的时间内不断显示,给人的感觉就像数码管同时在显示。
3、实验的延时不是精确的,近似1s和1ms。
七.源代码
1、I/O接口实验:
ORG 0000H
LTMP MAIN
ORG 0100H
MAIN: MOV A,#01H
LOOP: MOV P0,A;
ACALL DELAY
RL A
SJMP LOOP
ELAY: MOV R7,#0A7H ;((16*2+1+2)*171+2+1)*167+2=1000000
DL1: MOV R6,#0ABH
DL0: MOV R5,#10H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
NOP
RE
2、LED显示实验:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV 48H,#01H
MOV 47H,#02H
MOV 46H,#03H
MOV 45H,#04H
MOV 44H,#05H
MOV 43H,#06H
MOV 42H,#07H
MOV 41H,#08H
D0: MOV R0,#41H
MOV R1,#0FEH ;11111110,低位选中,右边开始显示
MOV A,R1 ;位控码,选中最右位
D1: MOV DPTR,#0F400H ;位控口地址
MOVX @DPTR,A ;位控码送入位控地址
MOV A,@R0 ;把要显示的数据送入累加器
MOV DPTR,#TAB ;表的首地址给DPTR
MOVC A,@A+DPTR ;A的内容加上DPTR的内容(表首地址)当做地址,取该地址
中的数送给A
MOV DPTR,#0F300H ;段控口地址
MOVX @DPTR,A ;将数据的段码值(A的值)送给段控地址,使显示该段码对应
的数值
CALL DELAY
INC R0 ;转向下一数据所在地址
MOV A,R1
JNB ACC.7,D2 ;判断是否选中高位(第七位为0跳转)
RL A ;未选中高位,向高位移位
MOV R1,A ;位控码送R1保存
AJMP D1 ;继续扫描显示能否用LJMP?
D2: AJMP D0
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH DELAY:MOV R4,#2H
D3: MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
NOP
RET
END。