⑴ 單片機外部中斷實驗
想付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);}