首页 > 编程知识 正文

单片机程序实例(流水灯程序c语言)

时间:2023-05-04 14:48:22 阅读:76908 作者:2655

51单片机定时器中断程序(c语言) )。

程序:延迟1s

方法:1.汇编的实现影响程序的运行速度2 .中断比较快

要用c语言实现,必须首先定义计时器的初始值

无论使用多大的石英晶体振动,使用51单片机,通常可以分频12分钟,产生机器的周期

设机械周期=12/n(n是指石英振动频率)、施加计时器的时间为m

那么,定时的初始值如下

M/机器周期=初始值

th0=(65536-初始值) %6;

TL0=(65536-初始值)/256;

将(65536-初始值)得到的值进行十六进制化后,其上位比特为TH0的值,下位比特为TL0的值

例如,如果使用12M石英振动计算1ms的时序,则如下。

机器循环=12/12*10^6=1us (微秒)

定时初始值=(1*10^-3 )/)/(1*10^-6 )=1000;

因此,th0=(65536-1000 ) %6;

TL0=(65536-1000 )/256;

将65536-1000=64536设置为十六进制表示0xFC18

TH0=0xFC;

TL0=0X18;

决定初始值后,要延迟1秒,请决定延迟参数。 在这里用1000就可以了。 (定时为1ms )中断程序如下。

timer0 ) )中断1//1ms的延迟(12.0MHz ) ) ) ) ) )。

{

TR0=0;

ET0=0;

TH0=0xfc;

TL0=0x18;

延迟时间S1!=0)延迟时间S1--;

TR0=1;

ET0=1;

}

调用程序大致如下

if(delay_flag==0) ) ) )。

{

delay_flag=1;

延迟时间S1=1000;

}

if (延迟时间S1==0) ) ) ) ) )。

{

delay_flag=0;

在这里写上到定时的操作就可以了;

}

(主程序中为delay_ms ) )这样的程序会影响程序的执行速度。 使用中断时不能。

定时器初始值计算小工具http://doc.xuehai.net/soft/Cun/2009/2009032018855.html

计时器计数00-59(p0连接8的是数码管的位选择端子ds1-ds8,P2连接8位数码管的段代码A-H ) )。

* * * * * * * * * * * * * * * * *

#包含

sbit P0_0=P0^0; //一位数字

sbit P0_1=P0^1; //10位数字

Void延迟(Intk ); //Tab是数码管的显示值,存储在一个数组中

unsigned char ge,shi,num,count;

unsigned char code Tab[]={0x3F,0x 06,0x5b,0x4F,0x 66,0x6d,0x 07 f,0x 77,0x7c,0x 39,0x5e,0x7D

Void主() )

{

TMOD=0x1; //T0,工作方法1

TH0=0xb1; //20ms时机

TL0=0xe0;

TR0=1; 打开//T0计时器

ET0=1; //T0允许计时器中断

EA=1; //打开总中断许可

P2=Tab[0]; P0_0=0; P0_1=0; 显示//00

num=0; //显示的数量为0

继续调用while(1)//显示,等待T0中断显示数据的变更

{

shi=num/10;//取出10位

ge=num; //取出一位

P0_0=1; P0_1=1; //关闭显示

P2=Tab[shi]; //P2端口发送10位数据显示代码

P0_0=0; 打开//10位显示

延迟(1000; //延迟

P0_0=1; //关闭显示

P2=Tab[ge]; //P2端口发送位数据显示代码

P0_1=0;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。