
AT89C51单片机计数器汇编语言程序 10
硬件电路图画好好了,就是不会编程!用以实现语音与计数同步的功能!希望同行的兄弟姐妹帮帮忙!定重谢...
硬件电路图画好好了,就是不会编程!用以实现语音与计数同步的功能!
希望同行的兄弟姐妹帮帮忙!定重谢 展开
希望同行的兄弟姐妹帮帮忙!定重谢 展开
展开全部
假设,信号从p0.0输入,且不计算晶振频率(你自己算)
ORG 00H
LJMP START
ORG 0BH
LJMP TIM
ORG 30H
START:
MOV SP,#7FH
MOV R0,#00H
MOV R1,#00H
MOV R2,#00H
MOV R3,#00H
MOV R4,#00H
MOV IE,#10000010B
MOV TMOD,#00000001B
MOV TH0,#10H;微调。根据你的晶振自己算
MOV TL0,#12H
SETB TR0
LOOP:
JB P0.0,$
INC R0
CJNE R0,#10,OVER
MOV R0,#00H
INC R1
CJNE R1,#10,OVER
MOV R1,#00H
INC R2
CJNE R2,#10,OVER
MOV R2,#00H
INC R3
CJNE R3,#10,ERRO
OVER:
AJMP LOOP
ERRO:
MOV R3,#0EH
MOV R2,#0EH
MOV R1,#0EH
MOV R0,#0EH
SJMP $
TIM:
MOV TH0,#20H;粗调,根据你的晶振自己算
MOV TL0,#30H
INC R4;中断次数。根据你的晶振自己算
CJNE R4,#13H,OVER_TIM;如果时间未到,结束
DEC SP;否则,抛弃断点
DEC SP
LJMP OUT;跳转到输出程序
OVER_TIM:
RETI
OUT:
....;这些是输出程序,你根据自己的硬件自己写
LJMP LOOP;跳转到loop
END
ORG 00H
LJMP START
ORG 0BH
LJMP TIM
ORG 30H
START:
MOV SP,#7FH
MOV R0,#00H
MOV R1,#00H
MOV R2,#00H
MOV R3,#00H
MOV R4,#00H
MOV IE,#10000010B
MOV TMOD,#00000001B
MOV TH0,#10H;微调。根据你的晶振自己算
MOV TL0,#12H
SETB TR0
LOOP:
JB P0.0,$
INC R0
CJNE R0,#10,OVER
MOV R0,#00H
INC R1
CJNE R1,#10,OVER
MOV R1,#00H
INC R2
CJNE R2,#10,OVER
MOV R2,#00H
INC R3
CJNE R3,#10,ERRO
OVER:
AJMP LOOP
ERRO:
MOV R3,#0EH
MOV R2,#0EH
MOV R1,#0EH
MOV R0,#0EH
SJMP $
TIM:
MOV TH0,#20H;粗调,根据你的晶振自己算
MOV TL0,#30H
INC R4;中断次数。根据你的晶振自己算
CJNE R4,#13H,OVER_TIM;如果时间未到,结束
DEC SP;否则,抛弃断点
DEC SP
LJMP OUT;跳转到输出程序
OVER_TIM:
RETI
OUT:
....;这些是输出程序,你根据自己的硬件自己写
LJMP LOOP;跳转到loop
END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2020-01-15 广告
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar shi,ge,i=0,k;
uint x,m,n;
sbit led =P3^2;
sbit buzzer=P3^5;
uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99,
0x49, 0x41, 0x1f, 0x01, 0x09};
void delayxms(uint);
void display();
void main()
{
while(1)
{
shi= i/10;
ge = i%10;
display();
}
}
void display()
{
P2=0x01;
P0= table[ge];
delayxms(5);
P2 = 0x02;
P0= table[shi];
delayxms(5);
if(led==0)
{
delayxms(50);
if(led==0)
{
i++;
if(i==59)
{
i=0;
}
}
}
}
void delayxms(uint x)
{
for(m=x;m>0;m--)
for(n=256;n>0;n--);
}
以上这个程序是自己练习时写的,能计数到59.。。
#define uint unsigned int
#define uchar unsigned char
uchar shi,ge,i=0,k;
uint x,m,n;
sbit led =P3^2;
sbit buzzer=P3^5;
uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99,
0x49, 0x41, 0x1f, 0x01, 0x09};
void delayxms(uint);
void display();
void main()
{
while(1)
{
shi= i/10;
ge = i%10;
display();
}
}
void display()
{
P2=0x01;
P0= table[ge];
delayxms(5);
P2 = 0x02;
P0= table[shi];
delayxms(5);
if(led==0)
{
delayxms(50);
if(led==0)
{
i++;
if(i==59)
{
i=0;
}
}
}
}
void delayxms(uint x)
{
for(m=x;m>0;m--)
for(n=256;n>0;n--);
}
以上这个程序是自己练习时写的,能计数到59.。。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询