at89s52单片机开发入门:流水灯实验

上传人:suns****4568 文档编号:94795064 上传时间:2019-08-11 格式:PPT 页数:39 大小:1.10MB
返回 下载 相关 举报
at89s52单片机开发入门:流水灯实验_第1页
第1页 / 共39页
at89s52单片机开发入门:流水灯实验_第2页
第2页 / 共39页
at89s52单片机开发入门:流水灯实验_第3页
第3页 / 共39页
at89s52单片机开发入门:流水灯实验_第4页
第4页 / 共39页
at89s52单片机开发入门:流水灯实验_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《at89s52单片机开发入门:流水灯实验》由会员分享,可在线阅读,更多相关《at89s52单片机开发入门:流水灯实验(39页珍藏版)》请在金锄头文库上搜索。

1、5 AT89S52单片机开发入门:流水灯实验,基础篇 通过通用I/O口控制LED灯的点亮,基本要求,电路图、PCB编辑软件的使用; 单片机基本概念; P1口的结构; Keil C开发环境的使用; 编程器使用; 单片机工作基本原理;,更高要求,汇编指令阅读 指令执行时间的计算 执行时间测试,主要内容,程序演示 软件说明&分析 硬件说明 P1 IO口结构 单片机工作原理 汇编语言&执行时间测量,5.1实验操作与实验结果,通过USB电缆给单片机板子供电 观察LED D1D8工作情况:从左到右依次点亮,然后从右到左依次点亮 其他LED: D9点亮:+5V电源指示 D10闪动:在线编程器AT89C205

2、1工作正常,图5-1-1 实验1中观察LED的位置,5.2 源程序分析,void main() unsigned char i,dat; while(1) dat=0x01; for(i=0;i1; Delay(); ,i dat P1 点亮的LED 0 0000 0001 1111 1110 D1(左边第一个) 1 0000 0010 1111 1101 D2 2 0000 0100 1111 1011 D3 3 0000 1000 1111 0111 D4 7 1000 0000 0111 1111 D8(右边第一个) 循环1总结:LED从左到右依次点亮 I dat P1 点亮的LED 0

3、 1000 0000 0111 1111 D8 1 0100 0000 1011 1101 D7 7 0000 0001 1111 1110 D1 循环2总结:LED从右到左依次点亮,表5-1 第一个for循环程序分析,表5-2 第二个for循环程序分析,具体工作波形,具体工作波形(故障),1、程序写入后,LED(D6)始终点亮,为什么?哪里的问题?如何验证?硬件?软 件? 2、提示:断电后再上电恢复正常,思考题,P1变量在何处定义? P1端口是什么? P1口、触发器、寄存器、锁存器的关系? 如何改变P1的内容? sfr P1 = 0x90; ? 如何改变LED灯流动的速度? D1、D8点亮的

4、时间与其他LED(D2D6)点亮的时间相同吗?为什么?修改程序使D1、D7点亮的时间与其他LED点亮的时间相同。,3、硬件说明-PCB部分,3、硬件说明-电原理图部分,硬件部分要求,可以使用Protel99SE或Altium Designer 打开电原理图 打开PCB图 能够读懂对应的电路 理解电原理图、PCB图、实物之间的对应关系,硬件说明-问题,问题: 1、阻排是什么? 2、U1的地、电源怎么看不到? 3、LED如何才能点亮?,4、P1 I/O端口的结构,问题: 1、P1.X中的X是什么意思? 2、什么是内部总线? 3、CP是什么? 4、读引脚和读锁存器的区别? 5、什么是准双向IO口?

5、6、内部总线是双向的吗? 7、Vcc是什么?,读引脚指令:MOV A,P1 读寄存器:CPL P1.X(读-修改-写),5、单片机工作原理 AT89S52单片机内部结构&资源,单片机工作原理相关问题,CPU是什么? 时钟电路如何构成?有什么用处? ROM是什么? RAM是什么? 什么是串行接口、并行接口? (后面讲) 什么是中断?(后面讲) 什么是定时器?和计数器的区别? (后面讲) 什么是总线?,AT89S52主要内部资源,FLASH 8KB RAM:256B SFR(Special File Register) 4个并口(每个8位) 1个串口(占用P3口的2位) 3个16bit定时器,AT

6、89S52内部存储器资源,问题: 1、EA是哪两个单词的缩写? 2、RAM和Flash的区别?,程序存储区 地址范围:0x00000x1FFF 大小:8K=0010 0000 0000 0000,数据存储区,应为多少?,内部RAM构成,通用寄存器区(4个组) 0区( 00H07H)1区 (08H0FH) 2区(10H17H3)3区 (18H1FH) 由PSW中的RS1,RS0来决定用哪个工作区 可位寻址区 (bit、bdata) 202FH, 16字节 007FH, 128位 用户RAM 30H7FH 堆栈, 60H(向上增长) 复位后设置SP=07H 间接寻址RAM (idata) 0x80

7、0xff,编译连接结果,存储器使用情况: 1、data=9:内部数据RAM使用了9个字节; 2、xdata=0:外部数据RAM没有使用; 3、code=71:内部程序存储区(FLASH)使用了71(0x47)个字节,5.3 对程序进行调试,软件仿真 硬件仿真 调试 设置断点F8 单步执行F10(step over) 单步执行F11(step in) 全速执行F5,图5-3-1 软件仿真调试模式(simulator),图5-4-1 汇编程序分析系统复位后,5.5 计算Delay函数延时,汇编指令说明及执行时间计算,CLR A ;A清0 1个机器周期 MOV R7,A ;R7清0 1个机器周期 C

8、:0030 CLR A 1个机器周期 MOV R6,A 1个机器周期 C:0032 INC R6 ;R6加1 1个机器周期 CJNE R6,#0xFF,C:0032 ;R6不等于0xFF则跳转到0032 2个机器周期 INC R7 ;R7加1 1个机器周期 CJNE R7,#0xFF,C:0030 ;R7未到0xFF则跳转到0030执行 2个机器周期 RET 2个机器周期,全部机器周期数为:2+255*(2+255*(1+2)+1+2)+2=4+255*(5+255*3)=196354个机器周期。 对应时间为:196354*12/11059200=0.213s,图5-5-2 利用示波器测试时延

9、长度,汇编部分问题,1、MOV指令的含义? 2、CLR? 3、CJNE? 4、INC? 5、RET? 6、指令长度是什么? 7、指令长度和执行时间有什么关系?,7、深入了解程序执行过程(1),工程中不包含Startup.a51程序时,7、深入了解程序执行过程(2),Startup.a51代码功能: 对内部RAM清0(范围:00x7F) 设置堆栈指针(SP=#07H) 跳到main执行,工程中包含Startup.a51程序时,与不加入startup.a51模块时没有区别,深入了解程序执行过程(3),-main函数部分,寄存器R5代替变量dat,寄存器R4代替变量i,取反输出,左移1位相对于乘2,

10、这里用累加器A的相加实现,循环控制变量R4加1,R4!=8则跳转到地址0x0007执行,7、深入了解程序执行过程(4),使用了哪9个内部RAM? 5个通用寄存器:R0、R4、R5、R6、R7 A、P1、SP、C(PSW的一位) 堆栈深度多少? SP初始化为0x07 最大值为0x09(SP_MAX),7、深入了解程序执行过程(5),参照左图 理解程序执行过程,8、Keil C软件使用(3),给项目添加/删除文件 仿真执行程序 单步执行、设置断点 查看变量 查看端口 查看特殊寄存器 查看汇编,5.6 查表法实现流水灯功能-定义数据(表格),code unsigned char tab16=0x01

11、,0x02,0x04,0x08,0x10,0x20,0x40,0x80,/9 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01; /8,5.6 查表法实现流水灯功能-程序,void main() unsigned char dat,i; while(1) for(i=0;i16;i+) dat=tabi; P1=dat; Delay(); /while ,5.7 课后作业,1.如何设置断点?如何单步执行程序? 2.如何查看、修改变量? 3.如何设置变量的存储位置? 4.修改程序,使流水灯流动的速度增加1倍,并利用示波器检查结果。 5.修改程序,设D1、D8点亮的时间与其他LED点亮的时间相同,并利用示波器检查结果。 6.说出这些程序中所用到指令的功能。 7.对实验主循环中后一个for循环对应的汇编程序进行分析。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号