导航:首页 > 操作系统 > 51单片机定时器0程序

51单片机定时器0程序

发布时间:2023-09-15 04:20:32

‘壹’ 51单片机中用定时器定时1毫秒,怎么编写

假设晶振为12MHz,不用中断时程序语句如下:
TMOD=0x01;//定时器0工作方式1
TH0=(65536-1000)/256;//装入初值
TL0=(65536-1000)%256;
TF0=0;//清溢出标志;
TR0=1;//启动定时器0
while(TF0==0);//等待定时时间到
TR0=0;
TF0=0;

‘贰’ 使用51单片机,晶振频率为6MHz,使用定时器0,以 方式2,在P1.0输出周期400us, 占空

#include<reg52.h>

sbit P1_1=P1^0;//PWM输出
unsigned int num;//定时器计时标志位,一次40us

/*********************************************************
主函数
**********************************************************/
void main()
{
TMOD=0x02; //设置定时器0工作方式2 (00000010)
TH0=256-20;//40us@6MHz 方式2为八位初值自动装载
TL0=256-20;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
// num = 0;//定时器计时标志位,一次40us
while(1);//等待

}

/********************************************************
中断函数
********************************************************/
void time0() interrupt 1
{
// TL0 = (65536-50) % 256;
// TH0 = (65536-50) / 256; //50us @12MHz
num++;
if(num>=10)num=0;//PWM周期为 40*10=400us
if(num<1)P1_1=0xff;
else P1_1=0x00;
}

周期为:400us,40us产生一次中断,所以占空比为1:9 。占空比为1:10则产生的波形不准确。

‘叁’ 51单片机的,这个程序该怎么整呀

当完成一个问题的编程后,编译链接没有问题,这时就可以进入调试阶段了,调试分软件调试和硬件调试
软件调试可以借助Keil软件调试界面,在运行后观察相应寄存器的值与我们预想的是否一致。
软件调试重点在寄存器的内容,或者变化,如I/O口寄存器,定时器相关寄存器,串口通信相关寄存器等。
硬件调试主要是设计一些外围调试电路用以观察或者显示执行过程。
如我可以用一个I/O口(P1.0)连接一个LED灯来测试单片机能否正常工作,在串口通信的端口串接LED等,指示是否有数据传输等等。
还有更重要的就是使用仪器进行测量调试,万用表和示波器是基本配置,用好示波器,对调试及故障排查解除有非常大的帮助
以上都将帮助我们快速将一个项目调试成功。
面包板调试
面包板调试
调试

‘肆’ 51单片机定时器的汇编语言程序编程,

LED BIT P1.0 ;定义LED的引脚
ORG 0000H

LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H ;定时器0工作模式1
MOV TH0,#HIGH(65536-50000) ;初值,50毫秒中断一次
MOV TL0,#LOW(65536-50000)
SETB TR0 ;启动定时器
SETB ET0 ;启动定时器中断
SETB EA ;开总中断
MOV R2,#40 ;中断计数初始值
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
DJNZ R2,T0E ;R2减到0重新赋值,否则退出
MOV R2,#40
CPL LED ;LED亮灭转换
T0E:
RETI
END

‘伍’ 51单片机定时中断C语言的写法步骤,可追加分数

程序说明:51单片机定时器0工作于方式一,定时50ms中断一次
晶振为12M
#include

void
main
{
TOMD
=
0X01;
//配置定时器0工作于方式一
TH1
=
(65536-50000)/256;
//高八位装入初值
TL1
=
(65536-50000)%256;
//低八位装入初值
ET0
=
1;
//开定时器0中断
EA
=
1;
//开总中断
TR0
=
1;
//启动定时器0
while(1)
{

}
}
void
Timer0_int()
interrupt
1
{
//重新装初值
TH1
=
(65536-50000)/256;
//高八位装入初值
TL1
=
(65536-50000)%256;
//低八位装入初值
}
/***************************************************************************************************************/
上面是比较好理解的。如果实在要求简洁的话,看下面的,跟上面功能一样
#include

void
main
{
TOMD
=
0X01;
//配置定时器0工作于方式一
TH1
=
0x3c;
//高八位装入初值
TL1
=
0xb0;
//低八位装入初值
IE
=
0x82;//开总中断并开定时器0中断
TR0
=
1;
//启动定时器0
while(1)
{

}
}
void
Timer0_int()
interrupt
1
{
//重新装初值
TH1
=
0x3c;
//高八位装入初值
TL1
=
0xb0;
//低八位装入初值}

阅读全文

与51单片机定时器0程序相关的资料

热点内容
oppor系列如何解除应用加密 浏览:599
程序员那么可爱姜逸城初恋 浏览:496
modbustcp编程 浏览:491
实况为什么安卓看不了 浏览:129
Java多线程Queue 浏览:95
云服务器499元三年 浏览:980
nbd源码 浏览:847
x86在arm上编译 浏览:8
linux怎么配置网络 浏览:307
程序员想要的小礼物 浏览:187
java获取网页url 浏览:625
怎么做解压神器泡泡版 浏览:967
自己动手做一个c编译器 浏览:930
手机如何链接谷歌服务器地址 浏览:137
废掉一个程序员的武功 浏览:249
java树形算法 浏览:642
通达信加锁指标源码怎么看 浏览:755
将同名文件移动到部分同名文件夹 浏览:404
摆荡指标加压力线源码 浏览:916
新一代单片机特征 浏览:770