① 利用51单片机汇编实现计数器
p3.2 p3.3分别为中断输入,程序比较简单,和C做差不多,区别在于
在汇编的中断入口写上跳转语句跳到对应的中断子程序
ORG 0003H
JMP INT0
ORP 0013H
JMP INT1
INT0://加操作
INT1://减操作
注意返回要用中断返回RETI
② 求高手帮忙,利用51单片机汇编实现计数器
#include "regx52.h"
#define KEY_UP P3_6
#define KEY_DOWN P3_7
#define UP_KEY_RELEASED 0x1
#define DOWN_KEY_RELEASED 0x2
unsigned char code Tab[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
bit bUpPressed=0,bDownPressed=0;
void Delay(unsigned int uiCnt)
{
while(uiCnt>0)uiCnt--;
}
Display(unsigned char ucVar)
{
unsigned char ucTemp;
ucTemp=ucVar;
ucTemp=ucTemp/10;
P0=Tab[ucTemp];
P3_1=1;
Delay(100);
P3_1=0;
ucTemp=ucVar;
ucTemp%=10;
P0=Tab[ucTemp];
P3_0=1;
Delay(100);
P3_0=0;
}
unsigned char KeyProc()
{
if(KEY_UP==0)bUpPressed=1;
if(KEY_DOWN==0)bDownPressed=1;
if(bUpPressed==1&&KEY_UP==1){bUpPressed=0;return UP_KEY_RELEASED;}
if(bDownPressed==1&&KEY_DOWN==1){bDownPressed=0;return DOWN_KEY_RELEASED;}
}
main()
{
char ucTemp=12;
while(1)
{
if(KeyProc()==UP_KEY_RELEASED)
{
ucTemp++;
if(ucTemp>99)ucTemp=0;
}
if(KeyProc()==DOWN_KEY_RELEASED)
{
ucTemp--;
if(ucTemp<0)ucTemp=99;
}
Display(ucTemp);
}
}
程序已经调试,引脚定义跟你不一样,自己改哈。
系统不让回复,所以写这了哈,
回cakoii兄:
其实,我也很不喜欢proteus这玩意,经常出现莫名错误,不过玩玩还是可以的。
第二,你真以为P0口的RP是多余的吗?我曾经做了个LED点阵试验,不接RP,根本无法正确显示,是一些随机的点,别以你聪明,经验是很重要的,不信你多看看别人的电路都是怎么画的,别人都是笨蛋吗?
第三,P0的次序可以是任意的,这个跟你程序相关,你甚至可以这样:a=p04,b=p02,b=p07...,你连这个都不懂,还作评论,你的思维已经被前辈给定死了,所以理解你。
第四,STC单片机有强上拉,相比之下,你的三极管及电阻就是脱了裤子放屁。
所以,这个世上很多人自以为是,悲哀!
到底是怎么回事,诸位看官都有自己的判断,不强求。
③ 单片机实现60秒计时器 用汇编语言
这是你学校的实验仪吗?这原理图不全,没有开关电路,两个74374的选片电路也没有,这写不了程序的。
④ 用汇编语言写一个单片机定时器/计数器的程序
1.以查询方式工作,每计满100个脉冲,则取反P1.0口线状态。
ORG0000H
MOVTMOD,#06H
MOVTH0,#156
MOVTL0,#156
SETBTR0
LP:JNBTF0,LP
CPLP1.0
SJMPLP
END
2.以中断方式工作,每计满200个脉冲,则取反P1.0口线状态。
ORG0000H
SJMPSTART
ORG000BH
CPLP1.0
RETI
START:
MOVTMOD,#06H
MOVTH0,#56
MOVTL0,#56
SETBTR0
MOVIE,#82H
SJMP$
END
⑤ 急!51单片机定时计数器实验编程(汇编语言)
将计数值按二进制数在P1口驱动发光二极管显示出来,到15秒后,计数值清零再从0开始计。
--这些发光二极管,是低电平发光,还是高电平发光?
下面的程序,适合于低电平发光:
ORG
0000H
LJMP
START
ORG
000BH
DEC
A
MOV
P1,
A
RETI
ORG
0030H
START:
MOV
TMOD,
#16H
MOV
TH0,
#255
MOV
TL0,
#255
SETB
TR0
SETB
TR1
MOV
IE,
#82H
LOOP:
MOV
A,
#255
MOV
P1,
A
MOV
R2,
#240
WAIT:
MOV
TH1,
#HIGH(65536-62500)
MOV
TL1,
#LOW(65536-62500)
JNB
TF1,
$
CLR
TF1
DJNZ
R2,
WAIT
SJMP
LOOP
END
如果是高电平发光,可以使用下面的程序:
ORG
0000H
LJMP
START
ORG
000BH
INC
A
MOV
P1,
A
RETI
ORG
0030H
START:
MOV
TMOD,
#16H
MOV
TH0,
#255
MOV
TL0,
#255
SETB
TR0
SETB
TR1
MOV
IE,
#82H
LOOP:
CLR
A
MOV
P1,
A
MOV
R2,
#240
WAIT:
MOV
TH1,
#HIGH(65536-62500)
MOV
TL1,
#LOW(65536-62500)
JNB
TF1,
$
CLR
TF1
DJNZ
R2,
WAIT
SJMP
LOOP
END
⑥ 倾家荡产求教 如何用单片机汇编语言编写计数器程序
程序分开写啊
首先是 单片机的初始化
然后是设置定时器的工作模式,计数初值,
在次,编写显示程序啊,用一个死循环来结束程序,通过不断的定时器中断来增加计数值,然后显示到数码管中
不过,整流电路应该在这个程序中不必使用吧,那个应该和电源想关的
⑦ 求单片机汇编程序:用定时器/计数器在P1.0口线上产生周期为500微秒,占空比为2:5的连续矩形波
;500us周期方波 ,占空比 2:5 。即高电平200us,低电平300us
ORG 0000H
AJMP START
ORG 000BH
AJMP T0INT
ORG 0030H
START: MOV SP,#60H
SETB EA
SETB ET0
MOV TMOD,#01 ;T0为工作方式1
CLR P1.0 ;先低电平
MOV TH0,#0FEH
MOV TL0,#0D4H ;300us 定时
SETB TR0;启动定时
AJMP $
T0INT: CPL F0
CPL P1.0
JB F0,HIGH1
LOW0: MOV TH0,#0FEH
MOV TL0,#0D4H
RETI
HIGH1: MOV TH0,#0FFH
MOV TL0,#38H ;200us 定时
RETI
END
⑧ at89c51单片机计数器的使用,汇编语言,
P1,当做按键输入,低电平有效;
P0,计数输出,低电平发光。
KEYSTA EQU P1.0
KEYADD EQU P1.1
KEYSUB EQU P1.2
ORG 0000H
JMP MAIN
ORG 0030H
MAIN:
MOV R2, #255
LOOP:
MOV P0, R2
JB KEYSTA, LOOP1
CALL DELAY
JB KEYSTA, LOOP1
JNB KEYSTA, $
CPL F0
SJMP LOOP
LOOP1:
JNB F0, LOOP2
JB KEYADD, LOOP2
CALL DELAY
JB KEYADD, LOOP2
JNB KEYADD, $
DEC R2
SJMP LOOP
LOOP2:
JNB F0, LOOP
JB KEYSUB, LOOP
CALL DELAY
JB KEYSUB, LOOP
JNB KEYSUB, $
INC R2
SJMP LOOP
DELAY:
MOV R6, #20
DJNZ R7, $
DJNZ R6, $ - 2
RET
END
试验成功。
⑨ 单片机汇编计数器有如下语句求解
简单的说,这段代码的意图应该是:把定时器T0的16位初值移到内部工作寄存器并转换成相应的BCD码(一般用于送显),结果保存在R4、R5、R6
ps:DA指令必须跟在ADD或ADDC后才起作用,对每4位进行BCD调整。因为4位16进制数(即16位二进制,具体到这段代码就是TH0和TL0的内容)转换成十进制的值最大为65535(其中每位10进制数用4位BCD码来保存,5位数就要用20位,但是存储器以字节为单位组织,因此需要3字节——24位),所以至少需要3个字节(即代码中的R4~6)才能完成保存其十进制值的转换结果。 把这段代码中的R4、R5、R6的内容直接送外部带BCD译码的数码管(或高低4位分离后送全编码的数码管)就可以直接显示定时器T0的十进制初值。
呵呵,楼主把左移当做乘2来理解也可以,但是这段代码的意图比较明显,只是为了移位和BCD转码……
⑩ MCS-51单片机,利用定时计数器设计一个程序,汇编语言,最好有注释,很简单的就可以
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