微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > C51单片机学习手记之1:一盏闪烁

C51单片机学习手记之1:一盏闪烁

时间:10-24 来源:互联网 点击:
最近开始学习C51单片机,可谓磕磕绊绊,因为本人比较笨笨啦...(听听Michael Jackson的《Heal The World》就坚持下来了),不知道对大家是否有用...

闲言碎语不要讲,下面我就来说说这迈出的第一步,我从2010年才接触到单片机,想想比别人晚了10多年,不过没关系,只要有心学习,从0-1很难,但从1到100、1000、...可能就没有那么麻烦了。主要要自学单片机原理、电子线路、汇编语言,C语言,如果你刚好学过,那就恭喜啦。

本文旨在介绍单片机入门的基础知识,为和我一样的新手提供一个交流的平台。仿真所使用单片机为ATMEL公司的AT89C52,软件为PROTEUS和KEIL;只提供原理图和KEIL环境下的注释,希望对广大即将接触单片机的人有所帮助,如果有错误欢迎回帖指出与本人交流或QQ联系(93542746),共同进步。

一盏闪烁的LED


本人用Proteus画得原理图如下所示,该电路较简单,在P1.7上接一个发光二极管,为防止电流过大烧坏二极管(LED的Imax=10mA),因此接了一个限流电阻。单片机31引脚(EA/Vpp)要接高电平,因为单片机访问的是下载到单片机内部的程序。

原理图:

汇编程序:

    org 000h
    ajmp main
    org 003h
main:  mov P1,#07fh;7fh的二进制数为01111111,P1.7输出低电平
    acall del;调用延时子程序
    mov p1,#0ffh;ffh的二进制数为11111111,P1.7输出高电平
    acall del
    ajmp main
del:   mov r5,#04h
del1:  mov r6,#0ffh
del2:  mov r7,#0ffh
del3:  djnz r7,del3;r7中内容减1后判断,为0,向下执行;不为0,执行本身
    djnz r6,del2
    djnz r5,del1;共做04h*ffh*ffh次减1,即4*256*256次
    ret
    end

C程序:

#include reg52.h> //通用89C52头文件

/*************************************************************
* IO定义 *
/*************************************************************/
sbit LED = P1 ^ 7;//定义P1.7为LED控制口,低电平LED亮

/*************************************************************
* 毫秒级延时函数 *
调用函数必须给延时函数一个0~65535的延时值对应0MS到65535MS
备 注:应用于1T单片机时i600,应用于12T单片机时i125
/*************************************************************/
void Delay (unsigned int a){//需要输入变量值0~65535
unsigned int i;
while( --a != 0){//i 从0加到125,CPU大概就耗时1毫秒
for(i = 0; i 125; i++);//空指令循环
}
}
/*************************************************************
* 主函数 *
/*************************************************************/
void main (void){

while(1){//无限循环以下程序
LED = ~LED;//取LED相反状态
Delay(150);//延时150ms

}//(0~65535之间)
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top