ORG 0000H
LJMP START
ORG 0003H
LJMP X0_INT
ORG 0013H
LJMP X1_INT
ORG 0030H
START:
SETB IT0
SETB IT1
SETB EX0
SETB EX1
SETB EA
----------------------
MOV A, #0FEH
LOOP:
MOV P1, A
CALL DELAY
RLA
SJMP LOOP
----------------------
X0_INT:
PUSH ACC
PUSH PSW
SETB RS0
MOV A, #0F0H
MOV R2, #6
X0_1:
MOV P1, A
CALL DELAY
CPL A
DJNZ R2, X0_1
POP PSW
POP ACC
RETI
----------------------
X1_INT:
PUSH ACC
PUSH PSW
SETB RS1
MOV A, #0AAH
MOV R2, #6
X1_1:
MOV P1, A
CALL DELAY
CPL A
DJNZ R2, X1_1
POP PSW
POP ACC
RETI
----------------------
DELAY:
MOV R5, #3
DJNZ R7, $
DJNZ R6, $ - 2
DJNZ R5, $ - 4
RET
----------------------
END
如果是VC则在编译器命令行参数再加 /FA 则会生成汇编代码。如果参数是 /FAs 则会同时将源码和汇编代码。/FA 程序集代码;.asm
/FAc 机器码和程序集代码;.cod
/FAs 源代码和程序集代码;.asm
/FAcs 机器码、源代码和程序集码;.cod
/Fa的用法
/Fa 为编译中的每个源代码文件创建一个源文件.asm。
/Fa文件名 将文件名.asm 放到当前目录中。仅在编译单个源代码文件时有效。
/Fa文件名.扩展名 将文件名.扩展名放到当前目录中。仅在编译单个源代码文件时有效。
/Fa目录\ 为编译中的每个源代码文件创建一个源文件.asm,并将其放到指定目录中。请注意必须有后缀反斜杠。只允许使用当前磁盘上的路径。
/Fa目录\文件名 将文件名.asm 放到指定目录中。仅在编译单个源代码文件时有效。
/Fa目录\文件名.扩展名 将文件名.扩展名放到指定目录中。仅在编译单个源代码文件时有效。
如果你是用gcc 或 g++编译器,如dev c++则加入命令行参数 -S 即可
程序有很多问题,做了部分修改#include<reg51.h>
#define uchar unsigned char
sbit p10=P1^0
sbit p30=P3^0
sbit p31=P3^1
sbit p12=P1^2
void delay()
{
uchar i,j
for(i=0i<170i++)
for(i=0i<187i++)
}
void alarm()
{
uchar times
p12=1
p30=0
p31=0
times=0x14
TMOD=0x01
TH0=0x3c
TL0=0xb0
TR=1
while(times)
{
while(TF0==0)
TF0=0
TH0=0x3c
TL0=0xb0
times--
}
p30=1
p31=0
p12=0
}
void pint0() interrupt 0
{
EX0=0
if(p32==0)
{
delay()
if(p32==0)
{
p30=1
p31=0
p12=0
}
}
EX0=1
}
main()
{
IE=0x81
IT0=1
SP=0x30
p30=1
p31=1
P1=0xff
P2=0x00
p12=0
while(1)
{
if(p10==0)
{
delay()
if(p10==0)alarm()
}
}
}