‘壹’ 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;
//低八位装入初值}