⑴ 单片机外部中断实验
想付vvv的风格
⑵ 单片机中断定时实验
涉及到的单片机知识如下:数码管编码(视具体电路连接而定,看是共阴还是共阳)、定时(可以采用定时器或者软件延时)、流水灯直接在pin口上输出高或低就行了。编码自己去写,不然怎么会有进步呢。看你们的要求,就知道你应该是重点高校学生,一定要对自己负责才行。
⑶ 关于单片机中断实验:
#include<reg51.h>
void delay1()
{
unsigned char i,j,k;
for(i=30;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void Delay2()
{
unsigned char i,j;
for(i=1000;i>0;i--)
for(j=0;j<125;j++)
{;}
}
void exter0() interrupt 0
{
int i;
for(i=0;i<7;i++)
{
P2=0x07;
delay1();
delay2();
P2=0x00;
delay1();
delay2();
}
}
void main()
{
EA=1;
EX0=1;
IT0=1;
while(1)
{
P2=0xFF;
delay1();
P2=0x00;
delay1();
}
}
⑷ 单片机中断实验 为什么设置SP的值
设置SP的值,这与中断无关。对于51单片机,开机后默认的SP的值是07H,这个区域是不能做堆栈区的,必须要移到内部RAM的128字节的高地址区。只要是写程序,就必须先给SP指针先重新赋值,移动指针。不管有无中断都必须这么做,所以,与中断无关。
当然了,这是用汇编语言写程序时,需要用户来完成这个操作。如果是用C语言写程序,用户不必关心这个问题了。
⑸ 单片机定时器中断实验 程序(汇编语言)不要c语言的
下列程序,已经经过实验,可以满足题目要求.
ORG 0000H
SJMP MAIN
ORG 000BH
SJMP T0_INT
MAIN:
MOV TMOD, #01H ;T0定时方式1
MOV TH0, #(65536-50000) / 256 ;定时50ms@12MHz
MOV TL0, #(65536-50000) MOD 256 ;
SETB TR0 ;启动T0
MOV IE, #82H ;开中断
;第一秒钟L0,L2亮,第二秒钟L1,L3亮,第三秒L4,L6亮,第四秒钟L5,L7亮,
;第五秒L0,L2,L4,L6亮,第六秒钟,L1,L3,L5,L7亮,第七秒钟八个二极管全亮,第八秒钟全灭.
MOV 30H, #11111010B
MOV 31H, #11110101B
MOV 32H, #10101111B
MOV 33H, #01011111B
MOV 34H, #10101010B
MOV 35H, #01010101B
MOV 36H, #00000000B
MOV 37H, #11111111B
MOV R0, #30H
MOV R7, #20
M_LOOP:
SJMP M_LOOP ;无限循环
T0_INT:
MOV TL0, #(65536-50000) MOD 256 ;
MOV TH0, #(65536-50000) / 256 ;定时50ms@12MHz
DJNZ R7, T0_END
MOV R7, #20
MOV P1, @R0
INC R0
CJNE R0, #38H, T0_END
MOV R0, #30H
T0_END:
RETI
END ;完
⑹ 8051单片机中断实验的问题
_cror_()这种内联函数,使用时要包含intrins.h头文件的。
你在程序最开头加一行
#include "intrins.h"
⑺ 80C51单片机按键中断实验(用汇编语言)
语句分号后为你原先指令,前面为修改后指令。
主要是标号错误和输入时输入法错误,要英文模式。
修改后编译通过。
但没有 按8次后重复开始状态,你自己加入该功能。
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP iINT0 ;LJMP INT0
ORG 0013H
LJMP iINT1 ;LJMP INT1
ORG 0030H
MAIN:SETB EA
SETB EX0
SETB EX1
SETB IT0
SETB IT1
MOV B,#0FFH
HERE:SJMP HERE
iINT0:MOV A,B ;INT30:MOV A,B
RL A
DEC A
MOV B,A
MOV P1,A ;MOV P1,A
RETI
iINT1:MOV A,B ;INT1:MOV A,B
RR A
ADD A,#80H
MOV B,A
MOV P1,A ;MOV P1,A
RETI
end
⑻ 单片机定时中断实验
跟你理清一下思路,你的问题就解决了。首先,你的程序很简单,就是让发光二极管1秒亮1秒灭。因此,你前提是要定时1秒,但51单片机无法定时1秒,因此,你的程序就要定时50毫秒,每到了50毫秒,你就让num自加1,当num加到20时,换句话说,已经定时50毫秒20次了,那就是1秒咯,所以此有led1=~led1;
//让发光管状态取反,达到程序目的。另外,定时50毫秒你要给th0和tl0赋给初值,因此
th0=(65536-45872)/256;
//重新装载初值tl0=(65536-45872)%256;才会有这两句,但定时50毫秒后,你的初值也会随之消失,因此才会在void
t0_time()这个函数中重新赋初值。的确像你所说的初值是装满了开始执行中断,其实从你tmod=0x01;
//设置定时器0位工作模式1(m1,m0位0,1)这句已经开始定时了,而赋初值是为了准确的定时50毫秒罢了。明白了没有?
(其实你可以这样理解,定时计数器就好比一个空的瓶子,当你给tmod=0x01时,水就开始一滴一滴的往瓶子你滴,当瓶子满了的时候,中断就发生了。假如从一个空的瓶子滴到满的瓶子定时是80毫秒的话,可你只需要定时50毫秒就够了,所以就要一开始往瓶子里倒水,使滴水的起点不是空瓶子,这就是赋初值的作用。当瓶子满了后,瓶子就会自动清空,重新从零开始。而第二次你再想定时50毫秒,你就必须从新再往瓶子里倒水,这就是第二次赋初值的作用)
⑼ 单片机定时器中断实验
我也来回答下
假设用51单片机,晶振是12MHz,发光二极管由P1.1引脚控制
ORG 0000H
LJMP START
ORG 000BH
LJMP SER_T0 ;定时器T0
ORG 0030H
START:
MOV IE,#82H ;开中断
MOV TMOD,#01H ;方式1
MOV TH0,#3CH ;定时器没中断一次50ms
MOV TL0,#0B0H
SETB TR0 ;启动定时器
MOV R7,#10 ;中断10次为500ms
SJMP $
SER_T0:
MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ R7,NEXT
MOV R7,#10
CPL P1.1
NEXT:
RETI
END
⑽ 单片机外部中断实验
include<reg51.h>include<intrins.h>define uchar unsigned charuchar cnt,times;void delay(){uchar i;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;for(i=0;i<times;i++){while(TF0==0);TH0=(65536-50000)/256;TL0=(65536-50000)%256;TF0=0;}TR0=0;}void ext0() interrupt 0{uchar i,j;P1=0xfe;times=8;for(i=0;i<5;i++){for(j=0;j<8;j++){P1=_crol_(P1,1);delay();}}}void ext1() interrupt 2{uchar i,j;P1=0x7f;times=12;for(i=0;i<3;i++){for(j=0;j<8;j++){P1=_cror_(P1,1);delay();}}}main(){EX0=1;EX1=1;IT0=0;IT1=1;PX0=0;PX1=1;while(1);}