求单片机实验的外部中断实验的程序

求单片机实验的外部中断实验的程序,第1张

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

uchar cnt,times

void delay()

{

uchar i

TMOD=0x01

TH0=(65536-50000)/256

TL0=(65536-50000)%256

TR0=1

for(i=0i<timesi++)

{

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=0i<5i++)

{

for(j=0j<8j++)

{

P1=_crol_(P1,1)

delay()

}

}

}

void ext1() interrupt 2

{

uchar i,j

P1=0x7f

times=12

for(i=0i<3i++)

{

for(j=0j<8j++)

{

P1=_cror_(P1,1)

delay()

}

}

}

main()

{

EX0=1

EX1=1

IT0=0

IT1=1

PX0=0

PX1=1

while(1)

}

下列程序,已经经过实验,可以满足题目要求.

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完

第一、设置定时器工作模式;第二、给TLX、THX赋初值;第三、开中断;第四、启动定时器。当然你要编好中断服务程序了。下面给一个简单的示范例程:程序运行后将在P1.0上产生1K的方波信号输出。

ORG 0000H

LJMP START

ORG 000BH

LJMP TM0

ORG 0100H

START:

CLR EA

MOV SP,#60H

MOV TMOD,#01H

MOV TCON,#01H

MOV TH0,#0FEH

MOV TL0,#0BH

SETB TR0

SETB EA

SJMP $

TM0:

CLR TR0

MOV TH0,#0FEH

MOV TL0,#0BH

SETB TR0

CPL P1.0

RETI

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12016565.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存