打印

C51单片机基础讲座

[复制链接]
1731|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
anybody|  楼主 | 2008-10-1 19:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
<一>
本次课堂以51系列单片机AT89S52为例来讲述,欢迎提问、批评和交流。

AT89S52单片机与普通的8051单片机管脚兼容,共有40个管脚,其中IO管脚共32个,
分别为P0.0-P0.7,P1.0-P1.7,P2.0-P2.7,P3.0-P3.7。

其中P0内部没有上拉,所以如果P0需要输出高电平的话必须在外部加上拉电阻。需要
注意的是,在作为数据/地址总线的情况下,单片机会自动开启P0的内部上拉功能,此时不需要
上拉电阻也可以输出高电平。
P1口为普通IO双向口,没有第二功能,常用来作为LED或数码管扫描控制接口及其他普通IO
控制端口。
P2口既可以作为普通双向IO口,也可以作为外部设备地址总线。
P3口既可以作为普通双向IO口,也具备丰富的第二功能,例如外部中断输入,定时器外部计数输入,
UART口,总线读写控制端口等。

在实际设计电路时我们需要根据自己的需要合理安排IO的应用。

<二>
开始我们的第二讲,老生长谈的话题:点灯。这里我们采用延时的方法实现LED闪烁。
LED闪烁的基本原理就是通过IO口的电平高低变化实现LED的开和关,通过一定的延
时(延时时间至少大于100ms,否则人眼反应不过来),得到LED闪烁的结果。

下面是程序和仿真效果。附件包含了仿真图(Proteus 7.12和源代码,大家可以回去试试)

#include<reg52.h>

#define LED P1
//sbit LED0 = P1^0;
typedef unsigned int uint;
typedef unsigned char uchar;
void Delay_Nms(uint N);

void main()
{
   LED = 0xFF;       //熄灭所有LED
   while(1)
  {
     LED ^= 0xFF;     //取反LED,使之闪烁
     Delay_Nms(1000);//延时约1秒
  }
}

void Delay_Nms(uint N)
{
     uchar i;
      uint j;
     for(j = N; j>0 j--)
    {
        for(i = 0; i<120;i++);
    }
}

图片什么的不好粘,大家自己去这个地方看吧

相关链接:http://www.neoic.cn/bbs/read-html-tid-772.html

相关帖子

沙发
lag3631| | 2008-10-1 19:34 | 只看该作者

看了下,挺不错的

支持这样基础的东西

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

186

帖子

0

粉丝