① 怎么用51单片机定时1个小时 好像是循环,具体汇编程序是怎样的
开启定时器作为时间基准,
然后再设置几个软件计数器,
比如,你设定定时器每隔10毫秒中断一次,
软件计数器a加1,当a数值=100时,就已经定时1秒了,
软件计数器b这时+1,当b数值=60时,就已经定时1分了,
软件计数器c这时+1,当c数值=60时,就已经定时1小时了。
就是这样累积的定时,
明白?
② 51单片机定时器初始化程序的基本步骤
1.设置工作方式即TMOD的值
2.计算初值写TH TL的值
3.开启定时器中断和总中断
4.启动定时器。
③ 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单片机C51编写一电脑钟程序,定时器用方式2中断处理实现
第一问比较简单,拓展功能比较繁琐,要考虑闰年的影响,计算复杂一些。
以下是简单的时钟:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a=0;//中断次数
uchar sec=0,min=0,hour=0;//时分秒
uchar date=1,mon=1, year=19;//年月日,年只计算后2 位,如2019,只考虑19
uchar tablemon[12]={31,28,31,30,31,30,31,31,30,31,30,31};//每月有多少天,2月按28天考虑
void main(void )//主程序
{
TMOD=0x01;// 定时器0工作方式一,方式2一次只能定时256us,中断太频繁 ,不建议使用
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定时50ms
TL0=(65536-50000)%256;
TR0=1;
while(1)
{ dislpay();}//显示子程序,与硬件连接有关
}
//中断子程序
void Timer0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20) {a=0;sec++;}//20次是1秒
if(sec==60) {sec=0;min++;}
if(min==60) {min=0;hour++;}
if(hour==24){hour=0;date++;}
if(date>tablemon[ mon-1]){date=1;mon++;}
if(mon==13){mon=1;year++;}
}
⑤ 51单片机定时器中断程序
再次重新启动。
⑥ 51单片机定时器编程
10ms中断后次,计中断的200次求反P1.1、P1.2
ORG 0000H
START: LJMP MAIN
ORG 001BH
LJMP CTC1 ……1分
ORG 0100H
MAIN : MOV TMOD,#00H ……3分
MOV R0,#200
MOV TH1, #0CH
MOV TL1, #78H
SETB EA ……3分
SETB ET1
LOOP: SETB TR1
HERE: SJMP $
CTC1: MOV TH1, #0CH ……3分
MOV TL1, #78H
DJNZ R0,RTI
MOV R0,#200
CPL P1.1
CPL P1.2
RTI: RETI
END
⑦ 51单片机定时器问题
你5ms中断一次,而你在中断程序里向液晶屏写数据,耗时远超5ms,因此中断次序被打乱,时间就不准了。解决办法一是加大定时时长50ms中断一次,二是可以将写液晶屏操作放入主程序中。中断程序一定要短小精悍,只进行一些重要的操作,将那些耗时长的不重要的操作放主程序中,像写液晶屏,即使被打断,显示错误的几率是很小的。
⑧ 51单片机 定时器程序 是怎么走的
你说的没错,那句主循环上面的代码只会执行一次,执行后下面就进入了while(1)无限循环中,执行循环的指令,在循环过程中,定时器也在运行,当定时器溢出引起中断时,程序就跳转到中断服务函数继续执行,中断服务结束后继续在主循环中循环,并不是从主函数的最上面开始运行。