MCS-51单片机,利用定时计数器设计一个程序,汇编语言,最好有注释,很简单的就可以

作者&投稿:魏蓝 (若有异议请与网页底部的电邮联系)
用at89c51单片机的定时/计数器T0汇编语言设计(附图)~

再好好想想几天,也许就不用求人了。

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

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

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
JMP BEGIN
ORG 0030H
TABLE: ; 共阴极数码管显示代码表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6fh ;56789
DELAY: MOV R5,#20
LOOP4: MOV R6,#50H ;延时20X20ms
LOOP5: MOV R7,#100
DJNZ R7,$
DJNZ R6,LOOP5
DJNZ R5,LOOP4
RET
;---------------------------------------
BEGIN: MOV P2,#0FFH ;P2口置高电平,准备接收信号
MOV R4,#0
MOV A,R4 ;R4位标志值送A寄存器
AGAIN: MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A
LOOP1: MOV A,P3 ; 接收p3口的抢答信号
CPL A
JZ LOOP1
LOOP2: RRC A ;有人抢答信号则逐次移动判断哪一位抢答
INC R4
JNC LOOP2
;********************
MOV A,R4
MOVC A,@A+DPTR ;找到相应位显示代码
MOV P1,A
LEDDIS:
MOV A,#0FFH
CLR C
LEDDIS1:
RLC A
DJNZ R4,LEDDIS1
MOV P0,A
LOOP3: JNB P2.2,BEGIN ;若主持人按下复位信号键,则转向主程序
CPL P2.0 ;若没按复位信号键,则通过p2.2口给出高低信号驱动蜂鸣器
LCALL DELAY ;调用延时子程序
SJMP LOOP3 ;p2.2口反复间隔0.4s变化,驱动蜂鸣器
END

ORG 0000H
AJMP MAIN
MAIN: MOV P0, #0FFH
MOV P1, #0FFH
MOV P3, #0FFH ;初始化
MOV A, #81H;立即数送入累加器A
MOV P1, A;累加器A的值送入P1口
ACALL DELAY;调用延时程序
MOV A, #42H
MOV P1, A
ACALL DELAY
MOV A, #24H
MOV P1, A
ACALL DELAY
MOV A, #18H
MOV P1, A
ACALL DELAY
AJMP MAIN
;6ms延时
DELAY: MOV TMOD, #01H;设定定时计数器工作模式
MOV TH0, #0E8H;赋初值
MOV TL0, #90H
SETB TR0;启动定时器0
JNB TF0, $;检测定时计数器是否溢出
CLR TF0
CLR TR0
RET

利用mcs51单片机p1口控制8只发光二极管循环点亮,采用定时器t0,使之工作...
答:中断方式:ORG 0000H JMP MAIN ORG 000BH JMP T0_INT MAIN:MOV TMOD, #01H MOV TH0, #HIGH(65536-62500)MOV TL0, #LOW (65536-62500)SETB TR0 MOV A, #7FH MOV P0, A M_LOOP:SJMP M_LOOP ;--- T0_INT:MOV TH0, #HIGH(65536-62500)MOV ...

MCS-51单片机的编程题:已知系统晶振频率为12MHZ,采用定时器T0的方式1...
答:DELAY1S: MOV TMOD,#01H MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB TR0 MOV R2,#20LOOP: JNB TF0,$ CLR TF0 CLR TR0 MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB TR0 DJNZ R2,LOOP RET ...

MCS-51单片机时钟为12MHz,利用定时器T0编程令P1.0引脚输出2ms的矩形...
答:2ms周期方波,1:2占空比的话得不到精确值。ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN:MOV TMOD,#02H MOV TH0,#246 MOV TL0,#246 SETB TR0 SETB ET0 SETB EA SETB P1.0 CLR A SJMP T0ISR:INC A CJNE A,#67,T01 T01:JC T02 CLR P1.0 CJNE A,#200,T03 T03...

11.若MCS—51单片机的晶振频率为12MHz,要求产生100ms的定时,采用定时/...
答:TMOD=0x10 初值为:TH1=(65536-50000)/256;TL1=(65536-50000)%256;两次中断定时100ms。

设MCS-51单片机的晶振频率为12MHZ,使用定时器1工作方式1中断方式在P1...
答:;ORG 0000H SJMP START ORG 0001BH MOV TH1, #(65536 - 50000) / 256 MOV TL1, #LOW(65536 - 50000)CPL P1.0 RETI START:MOV TMOD, #10H MOV TH1, #(65536 - 50000) / 256 MOV TL1, #LOW(65536 - 50000)SETB TR1 MOV IE, #88H SJMP END ...

MCS-51单片机的编程题:已知系统晶振频率为12MHZ,采用定时器T0的方式1...
答:中断服务函数就不用写了吧,就写个初始化函数:void inition(){ TOMD=0x01;//选择定时器0并选择工作方式1 TH0=(65536-50000)/256;TL0=(65536-500000)%6;EA=1;ET0=1;TR0=1;} 这样初始化就没问题了,另外要实现1S延时,需要在中断函数里加个变量自增,因为我定义的是50ms中断一次,那么...

已知MCS-51系列单片机的晶体振荡频率为6 MHz,请编程实现利用定时器T1定...
答:主程序:sbit PWM=P1^2;uchar a=0;TMOD=0X20;TH1=256-25;TL1=256-25;ET1=1;TR1=1;PWM=1;while(1);中断程序:void timer1() interrupt 3 { a++;if(a>=1)PWM=0;if(a==8){a=0; PWM=1;} }

如何利用mcs-51单片机的中断定时程序设计一个倒计时程序
答:Second EQU 30H ORG 0 START: MOV Second,#60H NEXT: MOV A,Second MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B MOVC A,@A+DPTR MOV P2,A LCALL DELY1S DEC Second MOV A,Second CJNE A,#00,NEXT LJMP START DELY1S: MOV R5,#100 D2: MOV R6,#...

比较MCS-51单片机内部定时器4种工作方式的异同?
答:方式0:13位定时计数方式,最大计数值为2^13=8192,定时8192个机器周期.此方式已经不再用了,是为了和以前的单片机兼容,学初者不用掌握。方式1:16位定时计数方式,最大计数值为2^16=65536,定时65536个机器周期.此方式可实现最大的定时时间和最大计数次数.是最常用方式之一。方式2:8位自动重装计数方式,...

单片机MCS-51问题。 1:50ms延迟和1ms延迟怎么实现有什么差别。2:定时...
答:要精确定时的话就需要用定时器来实现。50毫秒和1毫秒实现唯一区别就是给定时器赋初值不一样。12M晶振情况下:50毫秒延时:TH0=(65536-50000)/256;TL0=(65536-50000)%256;1毫秒延时:TH0=(65536-1000)/256;TL0=(65536-1000)%256;中断和延时是两个不同的概念,中断产生必须具备一定条件,比如定时...