单片机系列(2)流水灯程序是如何写入单片机的

单片机系列(2)流水灯程序是如何写入单片机的_第1张图片

在上一篇中《单片机实现跑马灯》中我们完成了一个漂亮的流水灯,里面有一段代码我们来分析一下吧,看看单片机是怎么理解这段代码的。

                                        

《单片机实现跑马灯》(点击图片跳转)



#include    //此文件中定义了51的一些特殊功能寄存器


void Delay10ms(unsigned int);   //误差 0us


void main()     //主函数

while(1)

{

P2  = 0x00;     //置P0口为低电平

Delay10ms(50);  //调用延时程序

P2  = 0xff;     //置P0口为高电平

Delay10ms(50);  // 调用延时程序

}

}


void Delay10ms(unsigned int c)   //误差 0us

{

    unsigned char a,b;

    for(;c>0;c--)

        for(b=38;b>0;b--)

            for(a=130;a>0;a--);

}



为什么我们可以直接给P2赋值呢?哪里定义了这个变量,打开Keil的安装目录(例如我的在C:\Keil\C51\INC\REG51.H)我们可以看到一个头文件,内容里面定义了P2.粘贴一部分如下。



#ifndef __REG51_H__

#define __REG51_H__


/*  BYTE Register  */

sfr P0   = 0x80;

sfr P1   = 0x90;

sfr P2   = 0xA0;

sfr P3   = 0xB0;

sfr PSW  = 0xD0;

sfr ACC  = 0xE0;

sfr B    = 0xF0;

sfr SP   = 0x81;

sfr DPL  = 0x82;

sfr DPH  = 0x83;


此处省略........


#endif



sfr P2   = 0xA0这句话的意思是把单片机内部地址0xA0处的这个寄存器重新起名叫P2,所以我们在程序中可以直接操作P2来操作地址0xA0处的寄存器。如下图这是STC89C52RC单片机的管脚分布,P0, P1, P2分别对应8个管脚。


单片机系列(2)流水灯程序是如何写入单片机的_第2张图片

对应实物图如下  ↓↓


进入main()函数(程序的入口)后我们让P2寄存器赋值为0意思就是让P2对应的8个IO口电压为低电平,此时发光二极管不亮。然后一段延时后再给P2寄存器赋值为FF(二进制为1111 1111)意思让P2对应的8个IO口电压为高电平。while语句就是让无限循环这一过程。


单片机系列(2)流水灯程序是如何写入单片机的_第3张图片


Delay10ms()函数是一个延时程序,感觉好像在做无用功。单片机工作和人一样有心跳的,这个心跳我们称为时钟周期,如果外接晶振(上图右下角所示)那么这个时钟周期就是这个晶振频率的倒数(如12MHZ的晶振,它的时钟周期就是1/12us),它是单片机中的最小时间单位。我们让单片机没执行一个程序指令就需要消耗一个机器周期(对应多个时钟周期)这样就会延时。


噢耶!程序有了,是怎么将程序烧写到单片机的呢?


单片机系列(2)流水灯程序是如何写入单片机的_第4张图片


就是这个小家伙将程序烧写到单片机的,但是它不是什么神兵利器,它只是做了一件很简单的事情。它里面最核心的就是USB转UART模块,功能是把RS-232电平(PC机输出一般12v)和TTL电平(单片机输出一般5v)相互转换。


单片机系列(2)流水灯程序是如何写入单片机的_第5张图片


然后我们可以看到连接图中TXD和RXD两个管脚,TXD 发送数据Transmit(tx) Data的缩写,RXD接收数据Receive(rx) Data的简写。所以注意这两个接口连接需要互换。将USB一头插到PC机上安装驱动后使用STC单片机烧写工具擦除之前程序写入新的程序。


单片机系列(2)流水灯程序是如何写入单片机的_第6张图片


将发光二极管一个管脚接地另一个串联一个100欧电阻接到P2相应8个管脚就可以跑我们刚刚写入的程序了。


单片机系列(2)流水灯程序是如何写入单片机的_第7张图片


提示:Keil、STC-ISP工具下载和其他疑问请关注公众号后留言询问,吉格斯看到会回复你的。


单片机系列(2)流水灯程序是如何写入单片机的_第8张图片

你可能感兴趣的:(单片机)