免费样片申请(暂时无用,不说了,很简单)
作业讲解
1-5点亮灯过简单,不说了
6:尝试让第一个发光管闪烁
闪烁,就是亮,灭,再亮,再灭这样一个循环的过程,就是写程序控制某一个IO口先输出低电平,再输出高电平,再输出低电平,如此循环,没变化一个状态要持续一个时间(即为延时)。简单的延时就用一个while或者for循环就可以。
1 #include<reg52.h> 2 sbit p1_1=P1^0; 3 unsigned int a; 4 void main() 5 { 6 a=50000; 7 p1_1=0; 8 while(a--); 9 a=50000; 10 p1_1=1; 11 while(a--); 12 }
定义一个unsigned int(无符号整型)类型的变量a,其范围为0-65535,若超出这个值,就会取余,例如70000,那么就会取70000-65535后的值。
这里选中这两个,这样如果一直插着单片机,然后更改代码并编译的话,会自动下载进单片机。
你可能会按照上面的方法,但这样是不对的,不标准。因为正常执行c语言代码时,从进入main函数开始,执行完main内部的代码就结束了,但这里却又重新再执行了,因为单片机会一直重复执行main函数,但有时会出错。
正确的写法
1 #include<reg52.h> 2 sbit p1_1=P1^0; 3 unsigned int a; 4 void main() 5 { 6 while(1) 7 { 8 a=50000; 9 p1_1=0; 10 while(a--); 11 a=50000; 12 p1_1=1; 13 while(a--); 14 } 15 }
在main函数内部再写一个while(1),将需要循环执行的代码放入while(1)的花括号内,这样单片机就会一直循环while(1)内部的内容而不出错了。
要学会软件调试
点击这个放大镜一样的东西就是打开调试了,调试前要先编译。再次点击就关闭。
黄色箭头指着的就是下一条要执行的语句
这个是复位,点击后让调试重头开始。
全速执行。
停止全速执行,只有在开启全速执行后它才会变成红色,才能使用。
进入函数内部。
执行下一调语句。
点击Peripheral(硬件)
Interrupt:中断
I/O-Ports:IO口
Serial:串行端口
Timer:定时器
这里选择我们现在用到的IO口的P1口Port 1
可以看到P1上电后为oxFF,即上电后所有IO口为高电平(IO口上电后为1,其余寄存器上电后为0,上电后会自动复位,所以这里软件的复位就可以当做上电),对应的后面8位都打了√,如果√没了,对应的一位就变成了0。操作单片机就是对内部的寄存器(P1)进行操作。
点击View,选上call stack window
看到,执行过的语句变成绿色,没执行的是灰色,这里while(a--)要想执行完需要单步执行(即一次执行一句)50000次,要点50000次,很慢,所以我们可以设置断点。
断点就是前面出现了红色,有的版本是红色的圆,设置断点的方法就是在需要的语句前方灰色处用鼠标单击。
现在我们说一下上面的全速执行,全速执行就是一直执行,而且执行的很快,不需要你一下一下的点,但是你不知道执行到哪里了,所以我们要用到断点,这里我们不想点击50000次,所以我们在while(a--)后面那条语句设置断点,再开启全速执行,那么程序就会全速执行到断点的位置然后停止,不会执行断点那条语句。
这里执行完全速后,a变为了65535(也是满,unsigned int类型的最大值,满和空是一个概念),意思是减空了,从原本的50000,减到0后再减一次就是65535了。
硬件调试(在线调试)(仿真芯片) 你没买,先不用看
仿真芯片有利于你领悟程序具体是怎么执行的
点开设置