|
|
P_SW2 DATA 0BAH ;定义外设端口切换寄存器1,复位值nnxx,000x
P_SW1 DATA 0A2H ;定义外设端口切换寄存器2,复位值0x00,0000
P4 DATA 0C0H ;定义P4,传统51单片机到P3
P5 DATA 0C8H ;定义P5
P0M0 DATA 094H
P0M1 DATA 093H
P1M0 DATA 092H
P1M1 DATA 091H
P2M0 DATA 096H
P2M1 DATA 095H
P3M0 DATA 0B2H
P3M1 DATA 0B1H
P4M0 DATA 0B4H ;本程序验证:将串口挪至P1.6 P1.7;5个外部中断全用起来;验证其正确性。
P4M1 DATA 0B3H ;开始:1、无限循环点亮7个灯P0.0--P1.0--P2.0--P3.4(P3.0,P3.1仿真用)--P4.1(无P4.0)--P5.4--P4.5
P5M0 DATA 0CAH ; 亮1s灭1s.
P5M1 DATA 0C9H ; 2、按P3.2(INT0发生)P0.0点亮5s; 按P3.3(INT1发生)P1.0点亮5s; 按P3.6(INT2发生)P2.0点亮5s;
P6M0 DATA 0CCH ; 按P3.7(INT3发生)P3.4点亮5s; 按P3.0(INT4发生)P4.1点亮5s;
P6M1 DATA 0CBH ;
P7M0 DATA 0E2H ; 注:I/O口用于点灯,设为准双向口即可;I/O口用于外部中断,须设为准双向口,因为此时可以被
P7M1 DATA 0E1H ; 外部容易的拉为低电平。
; P0,P1,P2,P3,P4,P5,P6,P7均可位寻址,复位值全为FFH
;
;
INTCLKO DATA 8FH ;定义INT2,3,4的允许中断寄存器
;EX2 EQU 10H ;INTCLKO不能位赋值,只能整体赋值,如果只使用某1个中断,可把某项单独赋值给寄存器
;EX3 EQU 20H
;EX4 EQU 40H
;AUXINTIF DATA 0EFH ;不触发,加上此句也无用
ORG 0000H ;
LJMP START ;
ORG 0003H
LJMP INT_0
ORG 0013H
LJMP INT_1
ORG 0053H
LJMP INT_2
ORG 005BH
LJMP INT_3
ORG 0083H
LJMP INT_4
ORG 0030H ;首先设置I/O口
START: MOV SP,#5FH ;设置栈底地址
ORL P_SW2,#80H ;使能访问XFR(放在扩展RAM中的特殊功能寄存器,与SFR对应)
ORL P_SW1,#80H ;串口1配置在P1.6,P1.7
MOV P0M1,#00H ;配置P0为准双向口
MOV P0M0,#00H
MOV P1M1,#00H ;配置P1为准双向口,因高电平时截止,不必推挽输出
MOV P1M0,#00H
MOV P2M1,#00H ;配置P2为准双向口
MOV P2M0,#00H
MOV P3M1,#00H ;配置P3为准双向口
MOV P3M0,#00H
MOV P4M1,#00H ;配置P4为准双向口
MOV P4M0,#00H
MOV P5M1,#00H ;配置P5为准双向口
MOV P5M0,#00H
SETB EX0 ;开INT0 ,在IE中
SETB EX1 ;开INT1
SETB EA ;开总中断 在IE中,
MOV INTCLKO,#70H ;开中断2,3,4;因只有下降沿中断方式,不用重申
;MOV AUXINTIF,#00H ;加上此句也无用
SETB IT0 ;使能INT0下降沿中断 ,在TCON中
SETB IT1 ;使能INT1下降沿中断
MAIN1: CLR P0.0 ;点亮P0,0
ACALL DELAY ;调用延时1s子程序
SETB P0.0 ;熄灭P0,0
CLR P1.0 ;点亮P1,0
ACALL DELAY ;调用延时1s子程序
SETB P1.0 ;熄灭P1,0
CLR P2.0 ;点亮P2,0
ACALL DELAY ;调用延时1s子程序
SETB P2.0 ;熄灭P2,0
CLR P3.4 ;点亮P3,1
ACALL DELAY ;调用延时1s子程序
SETB P3.4 ;熄灭P3,1
CLR P4.1
ACALL DELAY ;调用延时1s子程序
SETB P4.1 ;熄灭P4,1
CLR P5.4 ;点亮P5,4
ACALL DELAY ;调用延时1s子程序
SETB P5.4 ;熄灭P5,4
CLR P4.5 ;点亮P4,5
ACALL DELAY ;调用延时1s子程序
SETB P4.5 ;熄灭P4,5
SJMP MAIN1 ;返回继续显示后面各灯
INT_0: MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV P4,#0FFH
MOV P5,#0FFH ;全灭
CLR P0.0 ;只点亮P0.0
ACALL DELAY5 ;调用延时5s子程序
SETB P0.0 ;熄灭P0.0
RETI
INT_1: MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV P4,#0FFH
MOV P5,#0FFH ;全灭
CLR P1.0 ;只点亮P1.0
ACALL DELAY5 ;调用延时5s子程序
SETB P1.0 ;熄灭P1.0
RETI
INT_2: ;ANL AUXINTIF,#0EFH ;标志位清0 ;INT2不触发,加上此句也无用
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV P4,#0FFH
MOV P5,#0FFH ;全灭
CLR P2.0 ;只点亮P2.0
ACALL DELAY5 ;调用延时5s子程序
SETB P2.0 ;熄灭P2.0
RETI
INT_3: ;ANL AUXINTIF,#0DFH ;标志位清0 ;INT2不触发,加上此句也无用
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV P4,#0FFH
MOV P5,#0FFH ;全灭
CLR P3.4 ;只点亮P3.4
ACALL DELAY5 ;调用延时5s子程序
SETB P3.4 ;熄灭P3.4
RETI
INT_4: ;ANL AUXINTIF,#0BFH ;标志位清0 ;INT2不触发,加上此句也无用
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV P4,#0FFH
MOV P5,#0FFH ;全灭
CLR P4.1 ;只点亮P4.1
ACALL DELAY5 ;调用延时5s子程序
SETB P4.1 ;熄灭P4.1
RETI
DELAY: MOV R5,#30 ;延时0.5s,因STC单片机速度快,普通单片机此设置为5s.
Z1: MOV R6,#200
Z2: MOV R7,#250
DJNZ R7,$
DJNZ R6,Z2
DJNZ R5,Z1
RET
DELAY5: MOV R5,#100 ;延时2.5s
ZZ1: MOV R6,#200
ZZ2: MOV R7,#250
DJNZ R7,$
DJNZ R6,ZZ2
DJNZ R5,ZZ1
RET
END
|
|