標(biāo)題: 單片機(jī)學(xué)習(xí)札記4 8051內(nèi)部資源編程以及定時(shí)器、中斷 [打印本頁]

作者: heicc    時(shí)間: 2015-1-5 14:18
標(biāo)題: 單片機(jī)學(xué)習(xí)札記4 8051內(nèi)部資源編程以及定時(shí)器、中斷
8051內(nèi)部資源編程以及定時(shí)器、中斷
例一:在單片機(jī)P1.0~P1.2三根口線上分別接有三個(gè)發(fā)光二極管,要求編程實(shí)現(xiàn)三個(gè)發(fā)光二極管循環(huán)依次點(diǎn)亮。
#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對(duì)應(yīng)的LED亮
       Delay();
       P1_0=1;P1_1=0;P1_2=1;//P1_1對(duì)應(yīng)的LED亮
       Delay();
       P1_0=1;P1_1=1;P1_2=0;//P1_2對(duì)應(yīng)的LED亮
       Delay();
      }

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


呃。好久都木有正經(jīng)的學(xué)習(xí),我連軟件都忘記怎么用了。一直在問成哥。。。。。

例二:若單片機(jī)時(shí)鐘頻率為12MHZ,計(jì)算定時(shí)2ms所需的定時(shí)器初值。
背景知識(shí):若單片機(jī)主脈沖頻率為12MHZ,則最大定時(shí)時(shí)間為:
方式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計(jì)數(shù)=12/12=1us 所以脈沖個(gè)數(shù)為2ms/1us=2000個(gè)
若是方式0:TC=8192-2000=6092=1830H=1100 0001 10000B 所以TH0應(yīng)裝C1H,TL0應(yīng)裝10H(TL1只用低五位,高三位填0)
若是方式1:TC=65536-2000=F830H所以TH0應(yīng)裝F8H,TL0應(yīng)裝30H

例三:在此例基礎(chǔ)上,要求從P1.1引腳輸出周期為4ms的方波。
解:方法一:采用定時(shí)器0定時(shí),周期為2ms,TH0=F8H,TL=30H
#include<reg51.h>
sbit P1_1=P1^1;
void main(Void)
{
TMOD=0x01;//定時(shí)器0方式1
TH0=0xf8;
TL0=0x30;//裝入時(shí)間常數(shù)
TR0=1;//啟動(dòng)定時(shí)器
while(1)
  {
   while(!TF0);//查詢TF0狀態(tài),時(shí)間未到則空等待
    P1_1=!P1_1;//P1.1取反
    TH0=0xf8;
    TL0=0x30;//裝入時(shí)間常數(shù)
   }
}
方法二:中斷法
#include<reg51.h>
sbit P1_1=P1^1;
Void timer0(Void) interrupt 1//定時(shí)器0中斷服務(wù)程序。中斷層為1
{
TH0=0xf8;
TL0=0x30;//裝入時(shí)間常數(shù)
P1_1=!P1_1;//P1.1取反
}
void main(Void)
  {
  TMOD=0x01;//定時(shí)器0方式1
  TH0=0xf8;
  TL0=0x30;//裝入時(shí)間常數(shù)
  TR0=1;//啟動(dòng)定時(shí)器
  TF0=0;
  EA=1;//開全局中斷
  ET0=1;//開定時(shí)器0中斷
  while(1);//主程序死循環(huán),空等待
}


作者: 杰克稻草    時(shí)間: 2016-12-18 21:30
我怎么還顯示錯(cuò)誤




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1