
51单片机定时器的汇编语言程序编程,
4个回答
展开全部
这么简单的要求,不用大动干戈。
看看下面的程序,是不是最简单:
ORG 0000H
SETB TR0 ;启动T0
MOV R2, #250 ;定时计数初值
LOOP:
MOV TH0, #(8192 - 8000) / 32 ;定时8ms
MOV TL0, #(8192 - 8000) MOD 32
JNB TF0, $ ;等待8ms
CLR TF0
DJNZ R2, LOOP ;每隔8ms,R2减一次一
CPL P1.0 ;R2为0则LED亮灭转换
LJMP 0000H
END
本程序,已经实验成功。
看看下面的程序,是不是最简单:
ORG 0000H
SETB TR0 ;启动T0
MOV R2, #250 ;定时计数初值
LOOP:
MOV TH0, #(8192 - 8000) / 32 ;定时8ms
MOV TL0, #(8192 - 8000) MOD 32
JNB TF0, $ ;等待8ms
CLR TF0
DJNZ R2, LOOP ;每隔8ms,R2减一次一
CPL P1.0 ;R2为0则LED亮灭转换
LJMP 0000H
END
本程序,已经实验成功。
展开全部
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
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
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <reg52.h>
sbit P0^0=led;
void delayms(unsigned int ms)
// 延时子程序 对应12M晶振
{
while(ms--) //每一次循环1ms
{
for(i = 0; i < 120; i++);
}
}
void main()
{
while(true)
{
led=~led;
delayms(2000);
}
}
sbit P0^0=led;
void delayms(unsigned int ms)
// 延时子程序 对应12M晶振
{
while(ms--) //每一次循环1ms
{
for(i = 0; i < 120; i++);
}
}
void main()
{
while(true)
{
led=~led;
delayms(2000);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己好好看看定时器怎么配置。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询