恭喜,你发布的帖子
发布于 2016-09-07 07:54:11
6楼
你可以下载这个程序试试:
ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1 // 网络标题
// 主程序
LD SM0.0
CALL SBR1, VB0, 16#08 // 输出第1位
CALL SBR1, VB1, 16#04 // 输出第2位
CALL SBR1, VB2, 16#02 // 输出第3位
CALL SBR1, VB3, 16#1 // 输出第4位
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK 延时ms:SBR0
TITLE=延时,>1ms
BEGIN
Network 1 // 网络标题
// 读32位定时器值
LD SM0.0
BITIM AC0
Network 2
// 循环标记
LBL 1
Network 3
// 比当前时刻
LD SM0.0
CITIM AC0, AC1
Network 4
// 是否已过了1ms以上的时间
LDD< AC1, 2
JMP 1
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK 位输出:SBR1
TITLE=点亮一位LED
VAR_INPUT
BCD:BYTE; // 待显示数,低4位有效
DIG:BYTE; // 选通位,低4位有效
END_VAR
BEGIN
Network 1 // 网络标题
// 1、输出一位。正逻辑,高电平点亮LED。
LD SM0.0
LPS
A L0.3 // BCD8421之8
=I Q1.4 // 立即输出,关键!
LRD
A L0.2 // BCD8421之4
=I Q1.5
LRD
A L0.1 // BCD8421之2
=I Q1.6
LPP
A L0.0 // BCD8421之1
=I Q1.7
Network 2
// 2、若是上升沿锁存,这个延时必须的。否则可省。不清楚就留着。
LD SM0.0
CALL SBR0
Network 3
// 3、输出锁存脉冲
LD SM0.0
LPS
A L1.3
=I Q1.0 // 立即输出,关键!
LRD
A L1.2
=I Q1.1
LRD
A L1.1
=I Q1.2
LPP
A L1.0
=I Q1.3
Network 4
// 4、若是下降沿锁存,这个延时必须的。否则可省。不清楚就留着。
LD SM0.0
CALL SBR0
Network 5
// 5、复位锁在脉冲
LDN SM0.0
=I Q1.0 // 立即输出,关键!
=I Q1.1
=I Q1.2
=I Q1.3
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1
END_INTERRUPT_BLOCK
请填写推广理由:
分享
只看
楼主