单片机实验4

实验4.1 通过外部中断使P1口的开关控制8个发光二极管,开始是P1.0所接的灯亮,以后每中断一次,下一个灯亮,顺序左移,周而复始。

这次实验让我们使用外部中断来控制小灯,目的就是为了让我们巩固外部中断方面的只是,IE寄存器,TCON寄存器,以及外部中断的起始地址.

汇编程序:

ORG 0000H 
LJMP START 
ORG 0003H ;这里使用外部中断0,起始地址是03H
JMP I0
ORG 0040H 
START: 
SETB EA  ;中断总开关
SETB EX0 ;外部中断0开关
SETB IT0 ;下降沿触发
MOV P1,#01H
SJMP $

I0:      ;中断服务程序
MOV A,P1
RL A
MOV P1,A
RETI

END

C语言程序:
这里记录一下C语言中的中断编号的意思:
0 外部中断0
1 定时/计数器0中断
2 外部中断1
3 定时/计数器1中断
4 串行口发送与接受中断
5 定时/计数器2中断

#include<reg52.h>

int0()interrupt 0{ 
    uchar a=P1;
    a<<=1;
    if(a==0)        //因为C语言中的左移不是循环的,所以这里判断一下
        a=0x01;
    P1=a;
}
main(){
    EA=1;
    EX0=1;
    IT0=1;
    P1=0x01;
    while(1){
    }
}

实验4.2 外部中断控制P1口连接的8个发光二极管,同时亮,或同时灭,每中断一次,变反一次。

这个实验和上面那个差不多,没有什么难度

汇编程序:

ORG 0000H 
LJMP START 
ORG 0003H
JMP I0
ORG 0040H 
START: 
SETB EA
SETB EX0
SETB IT0
MOV P1,#00H
SJMP $

I0:
MOV A,P1
CPL A
MOV P1,A
RETI

END

C语言程序:

#include

int0()interrupt 0{
    P1=~P1;
}
main(){
    EA=1;
    EX0=1;
    IT0=1;
    P1=0x00;
    while(1){
    }
}

你可能感兴趣的:(个人学习记录)