找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2479|回复: 1
打印 上一主题 下一主题
收起左侧

单片机学习札记4 8051内部资源编程以及定时器、中断

[复制链接]
跳转到指定楼层
楼主
ID:3721 发表于 2015-1-5 14:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
8051内部资源编程以及定时器、中断
例一:在单片机P1.0~P1.2三根口线上分别接有三个发光二极管,要求编程实现三个发光二极管循环依次点亮。
#include<reg51.h>
Void Delay(Void);
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
Void main(Void)
{
  while(1)
      {
       P1_0=0;P1_1=1;P1_2=1;//P1_0对应的LED亮
       Delay();
       P1_0=1;P1_1=0;P1_2=1;//P1_1对应的LED亮
       Delay();
       P1_0=1;P1_1=1;P1_2=0;//P1_2对应的LED亮
       Delay();
      }

//延时子程序
Void Delay(Void);
{
   int i;
   for(i=o;i<10000;i++);
}


呃。好久都木有正经的学习,我连软件都忘记怎么用了。一直在问成哥。。。。。

例二:若单片机时钟频率为12MHZ,计算定时2ms所需的定时器初值。
背景知识:若单片机主脉冲频率为12MHZ,则最大定时时间为:
方式0(13位):T最大=2的13次幂*1us=8.19us
方式1(16位):T最大=2的16次幂*1us=65.536us
方式2,3(8位):T最大=2的8次幂*1us=0.256us
所以由此可见,本题必须工作在方式0或者方式1。
T计数=12/12=1us 所以脉冲个数为2ms/1us=2000个
若是方式0:TC=8192-2000=6092=1830H=1100 0001 10000B 所以TH0应装C1H,TL0应装10H(TL1只用低五位,高三位填0)
若是方式1:TC=65536-2000=F830H所以TH0应装F8H,TL0应装30H

例三:在此例基础上,要求从P1.1引脚输出周期为4ms的方波。
解:方法一:采用定时器0定时,周期为2ms,TH0=F8H,TL=30H
#include<reg51.h>
sbit P1_1=P1^1;
void main(Void)
{
TMOD=0x01;//定时器0方式1
TH0=0xf8;
TL0=0x30;//装入时间常数
TR0=1;//启动定时器
while(1)
  {
   while(!TF0);//查询TF0状态,时间未到则空等待
    P1_1=!P1_1;//P1.1取反
    TH0=0xf8;
    TL0=0x30;//装入时间常数
   }
}
方法二:中断法
#include<reg51.h>
sbit P1_1=P1^1;
Void timer0(Void) interrupt 1//定时器0中断服务程序。中断层为1
{
TH0=0xf8;
TL0=0x30;//装入时间常数
P1_1=!P1_1;//P1.1取反
}
void main(Void)
  {
  TMOD=0x01;//定时器0方式1
  TH0=0xf8;
  TL0=0x30;//装入时间常数
  TR0=1;//启动定时器
  TF0=0;
  EA=1;//开全局中断
  ET0=1;//开定时器0中断
  while(1);//主程序死循环,空等待
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155466 发表于 2016-12-18 21:30 | 只看该作者
我怎么还显示错误
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表