📄 stop.sdi
字号:
,,,;这是一个利用串行口扩展并行I/O口的例子
,,,;系统的晶振频率12MHz,利用CD4014和CD4094扩展出两个8位并行口。
,,,;编程读入开关状态,存入片内RAM的40H单元,并同时输出到LED上显示出来。
,,,KEY EQU 40H
,,, ORG 0
0000,75 98 00,, MOV SCON,#0H ;串口方式0,允许接收数据
0003,C2 90,RX0,RX0: CLR P1.0 ;并行输入开关状态
0005,D2 90,, SETB P1.0 ;允许串行移位
0007,D2 9C,, SETB REN ;允许串行接收数据
0009,30 98 FD,, JNB RI,$ ;等待一帧数据接收结束
000C,C2 9C,, CLR REN ;停止接收
000E,C2 98,, CLR RI
0010,E5 99,, MOV A,SBUF ;读开关状态
0012,F5 40,, MOV KEY,A ;存开关状态
0014,12 00 28,TX0,TX0: LCALL CONVERT ;将开关状态转换为数码管的段码
0017,C2 92,, clr p1.2
0019,D2 91,, setb P1.1 ;关显示
001B,F5 99,, MOV SBUF,A ;开关状态送数码管显示
001D,30 99 FD,, JNB TI,$ ;等待一帧数据发送结束
0020,C2 99,, CLR TI
0022,C2 91,, clr P1.1 ;选通CD4094
0024,D2 92,, setb p1.2
0026,80 DB,, SJMP RX0
0028,20 E0 04,CONVERT,CONVERT:JB ACC.0,C0 ;S0按下了?否,则转
002B,74 3F,, MOV A,#3FH ;"0"的显示段码
002D,80 33,, SJMP C_END
002F,20 E1 04,C0,C0: JB ACC.1,C1
0032,74 06,, MOV A,#06H ;"1"的显示段码
0034,80 2C,, SJMP C_END
0036,20 E2 04,C1,C1: JB ACC.2,C2
0039,74 5B,, MOV A,#5BH ;"2"的显示段码
003B,80 25,, SJMP C_END
003D,20 E3 04,C2,C2: JB ACC.3,C3
0040,74 4F,, MOV A,#4FH ;"3"的显示段码
0042,80 1E,, SJMP C_END
0044,20 E4 04,C3,C3: JB ACC.4,C4
0047,74 66,, MOV A,#66H ;"4"的显示段码
0049,80 17,, SJMP C_END
004B,20 E5 04,C4,C4: JB ACC.5,C5
004E,74 6D,, MOV A,#6DH ;"5"的显示段码
0050,80 10,, SJMP C_END
0052,20 E6 04,C5,C5: JB ACC.6,C6
0055,74 7D,, MOV A,#7DH ;"6"的显示段码
0057,80 09,, SJMP C_END
0059,20 E7 04,C6,C6: JB ACC.7,C_7
005C,74 27,, MOV A,#27H ;"7"的显示段码
005E,80 02,, SJMP C_END
0060,74 00,C_7,C_7: MOV A,#0
0062,22,C_END,C_END: RET
000E,,, END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -