51单片机定时器实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机定时器实验

实验内容:

实验内容:

(1)编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。C语言程序

#include

#define uint unsigned int

#define ucahr unsigned char

sbit FM=P0^0;

void main()

{

TMOD=0x01;

TH0=(65535-50000)/256;

TH0=(65535-50000)%256;

EA=1; //开总中断

ET0=1; //开定时器0中断

TR0=1;

while(1);

}

void T0_time()interrupt 1

{

TH0=(65535-50000)/256;

TH0=(65535-50000)%256;

FM=~FM;

}

汇编程序

ORG 0000H

JAMP MAIN

ORG 000BH

LJMP INT0_INT

ORG 0100H

MIAN: SETB EA

SETB ET0

AJMP $

INT0_INT:MOV R2,#0FAH

MOV R3,#0C8H

DJNZ R3,$

DJNZ R2,INT0_INT

RETI

(2)编写程序使定时器0或者定时器1工作在方式1,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。

#include

#define uint unsigned int

#define ucahr unsigned char

uint num,num1;

sbit FM=P0^7;

int shi,ge,a;

void delay(uint);

void shumaguan();

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表

void main()

{

TMOD=0x01;

TH0=(65535-50000)/256;

TH0=(65535-50000)%256;

EA=1; //开总中断

ET0=1; //开定时器0中断

TR0=1;

while(1)

{

shumaguan();

}

}

void T0_time()interrupt 1

{

TH0=(65535-50000)/256;

TH0=(65535-50000)%256;

num1++;

if(num1==10)

{

num1=0;

num++;

shi=num/10;

ge=num%10;

if(num==100)

{

num=0;

}

}

}

void shumaguan()

{

P3=0x01;

P2=table[shi];

delay(5);

P3=0x02;

P2=table[ge];

delay(5);

void zuoyi()

{

a=~P3;

a=a<<1;

P3=~a;

if(P3==0xfb)

{

P3=0xfe;

}

}

void delay(uint x)

{

int i,j;

for(i=0;i

for(j=0;j<110;j++);

}

(3)编写程序使定时器0或者定时器1工作在方式2,自动重装载模式,定时500ms 使两位数码管从00、01、02……98、99每间隔500ms加1显示。

#include

#define uint unsigned int

#define ucahr unsigned char

uint num,num1;

int shi,ge,a;

void delay(uint);

void shumaguan();

void zuoyi();

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表

void main()

TMOD=0x02;

TH0=255-200;

TH0=255-200;

EA=1; //开总中断

ET0=1; //开定时器0中断TR0=1;

P3=0x01;

while(1)

{

shumaguan();

}

}

void T0_time()interrupt 1 {

num1++;

if(num1==2500)

{

num1=0;

num++;

shi=num/10;

ge=num%10;

if(num==100)

{

num=0;

}

}

}

void shumaguan()

{

相关文档
最新文档