📄 io.sdi
字号:
,,,;单片机每50ms从扩展的外部输入口读取开关的状态
,,,;单片机将开关的状态以1Hz的闪动频率显示出来
,,,;开关闭合时LED闪烁
,,,IO EQU 8000H ;扩展的I/O口地址
,,,BUF EQU 30H ;开关状态缓冲区
,,,FLASH BIT 00H
,,, ORG 0
0000,02 00 30,, LJMP START
,,, ORG 0BH
000B,02 00 5B,, LJMP TS
,,, ORG 30H
0030,75 81 60,START,START: MOV SP,#60H
0033,75 89 01,, MOV TMOD,#1
0036,75 8C 3C,, MOV TH0,#3CH
0039,75 8D B0,, MOV TH1,#0B0H ;定时50ms
003C,D2 A9,, SETB ET0
003E,D2 AF,, SETB EA
0040,7A 0A,, MOV R2,#10 ;定时500ms计数
0042,75 30 00,, MOV BUF,#0 ;清开关状态缓冲区
0045,C2 00,, CLR FLASH ;清闪烁标志
0047,D2 8C,, SETB TR0
0049,12 00 4E,LOOP,LOOP: LCALL DISP ;显示开关状态
004C,80 FB,, SJMP LOOP
,,,;============================================
,,,;显示程序
,,,;功能:根据闪烁标志FLASH将开关缓冲区内容送显
,,,;============================================
004E,90 80 00,DISP,DISP: MOV DPTR,#IO
0051,20 00 03,, JB FLASH,DISP1 ;FLASH=1则将开关缓冲区内容送显
0054,E4,, CLR A ;否则熄灭所有LED
0055,F0,, MOVX @DPTR,A
0056,22,, RET
0057,E5 30,DISP1,DISP1: MOV A,BUF
0059,F0,, MOVX @DPTR,A
005A,22,, RET
,,,;============================================
,,,;50ms中断服务程序
,,,;功能:读取开关状态并存到开关缓冲区
,,,; 每500ms将闪烁标志取反。
,,,;============================================
005B,C2 8C,TS,TS: CLR TR0
005D,75 8C 3C,, MOV TH0,#3CH
0060,75 8A B0,, MOV TL0,#0B0H
0063,D2 8C,, SETB TR0
0065,90 80 00,, MOV DPTR,#IO
0068,E0,, MOVX A,@DPTR ;读开关状态
0069,F4,, CPL A
006A,F5 30,, MOV BUF,A ;存开关状态
006C,DA 04,, DJNZ R2,TS1
006E,7A 0A,, MOV R2,#10
0070,B2 00,, CPL FLASH
0072,32,TS1,TS1: RETI
000E,,, END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -