大众信息网

单片机实验与课程设计

答案:3  mip版
解决时间 2021-02-22 11:33
  • 提问者网友:雨份凉伴
  • 2021-02-22 08:29
编写程序,当外部中断1响应后,让8个LED灯交替闪烁(第1,3,5,7个LED灯亮1s后,第2,4,6,8个LED灯亮1s,轮流闪烁)
最佳答案
  • 二级知识专家网友:不了解我就别说我变了
  • 2021-02-22 09:19
在外部中断里面定义一个变量,
//晶振 12MHz
#include<reg52.h>

//定时50ms

#define TH = (65536 - 50000)>>8 // 高位初值;
#define TL = (65536 - 50000)%256// 低位初值;

#define LED P0 //设高电平点亮LED;

unsigned char timer_cnt = 0;
unsigned char extern_flag = 0;
bit timer_1sflag;

void main()
{

TMOD = 0x10;//使用定时器1
EA = 1;
ET1 = 1;
TR1 = 1;
TH1 = TH;// 高位初值;
TL1 = TL;// 低位初值;
EX0 = 1;//开启外部中断;

while(1)

{
if(extern_flag)

{
if(timer_1sflag)LED = 0x55;

else LED = ~LED;//按位取反即可;

}

}

}

void timer1() interrupt 3
{

TH1 = 0x3C;
TL1 = 0x0B0;
timer_cnt++;
if(timer_cnt > 20)

{
timer_cnt = 0;
timer_1sflag = !timer_1sflag;
}

}


void Extern() interrupt 2 using1//中断向量符号为2;
{
extern_flag = 1;
}

请采纳,参考!
全部回答
  • 1楼网友:輓畱嶼赱
  • 2021-02-22 11:13
//假设晶振12MHZ,P1控制LED低电平亮 #include "reg51.h" unsigned int YSJS=0; void main(void) { TMOD |= 0x10; //定时器1工作于方式1,16位定时器 TH1 = 0xFF; //定时器1定时时间=500uS TL1 = 0x06; ET1 = 1; //使能定时器1中断 IT1=1; //负跳变触发 EX1=1; //开外部中断1 EA =1; //开总中断 P1 = 0xFF; while(1) { } } void INT0() interrupt 0 { P1 = 0x55; TR1 = 1; //开启定时器1 } void TIMER1(void) interrupt 3 //定时器1中断函数使用默认寄存器组 { TH1 = 0xFF; //定时器1定时时间=500us TL1 = 0x06; YSJS++; if(YSJS==2000) //500uS*2000=1000000us=1s { P1 = P1 & 0xFF; YSJS = 0 } }
  • 2楼网友:有你才幸福
  • 2021-02-22 09:50
你写的要求太宽泛,我就随便给你两个,你参考下,根据你的题目修改下,这你应该可以的吧

总结随便找点,我也不知道你的具体要求,就不发了


给你个流水灯的,循环点亮程序
 org 0000h
 jmp main
 org 0030h
main: mov a,#0ffh 
 clr c 
 rlc a; 
 mov p2,a
 call delay

loop: mov r2,#07h 
loop1: rlc a 
 mov p2,a 
 call delay 
 djnz r2,loop1 

 mov r2,#07h ;设置右移次数7次
loop2: rrc a ;右移1位
 mov p2,a ;输出到p2
 call delay ;
 djnz r2,loop2 ;右移7次
 jmp loop

delay: mov r7,#20 ;延时0.3s
d1: mov r6,#30
d2: mov r5,#250
 djnz r5,$
 djnz r6,d2
 djnz r7,d1
 ret 
 end 


数码管的,可以循环显示012345678abcdef的,共阳极接法
 org 0000h
 ljmp main
 org 0030h
main: nop
start: mov r2,#0 
 mov r5,#16
next: mov dptr,#tab
 mov a,r2
 movc a,@a+dptr
 mov p2,a
 inc r2
 lcall delay
loop: djnz r5,next
 mov r5,#16
 mov r2,#0
 jmp start
delay: mov r0,#10 ;延时0.5s
delay0: mov r7,#100
delay1: mov r6,#250
 djnz r6,$
 djnz r7,delay1
 djnz r0,delay0
 ret
tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
 db 88h,83h,0c6h,0a1h,86h,8eh
 end
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯