(3) CPU同时接收到几个中断请求时,首先响应优先级最高的中断请求。
※17. 设8051的P1中各位接发光二极管,分别用汇编语言和C语言编程实现逐个轮流点亮二极管,并循环显示。
ORG 0000H LJMP MAIN
ORG 0100H ;主程序
MAIN: MOV A,#01H LOOP:MOV P1,A
CALL DELAY RL A
SJMP LOOP SJMP $
DELAY:MOV R7,#0FFH DJNZ R7,$ RET
END
C语言程序:
#include <reg51.h> //包含特殊功能寄存器库 void delay(unsigned int x); void main() {
unsigned char i,j; while(1) {i=01;
for (j=0;j<8;j++)
{P1=i;
delay(100); i=i*2; }
} }
void delay(unsigned int x) {
unsigned char j; while(x--)
{for (j=0;j<125;j++);} }
18. 8051系统中,已知振荡频率为12MHz,用定时/计数器T0,实现从P1.0产生周期为2ms的方波。要求分别用汇编语言和C语言进行编程。
解:分析:从P1.0输出周期为2ms的方波,只须P1.0每1ms取反一次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式1时,最大的定时时间为65.536ms,满足1ms的定时要求,方式控制字应设定为00000001B(01H)。定时1ms,计数值N为1000,初值X=65536-1000=64536,则TH0=FCH,TL0=18H。
采用中断处理方式:
ORG 0000H LJMP MAIN
ORG 000BH ;中断处理程序 MOV TH0,#0FCH MOV TL0,#18H CPL P1.0 RETI
ORG 0100H ;主程序
MAIN: MOV TMOD,#01H