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

晶振为12M的,要求让一个LED灯亮两秒,灭两秒的小程序,最好附上详解,谢谢了

这么简单的要求,不用大动干戈。

看看下面的程序,是不是最简单:

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

本程序,已经实验成功。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-18
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本回答被网友采纳
第2个回答  2013-06-18
#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);
}
}
第3个回答  2013-06-18
自己好好看看定时器怎么配置。