clrf TRISA ; bit<0> 用于红色移位数据输出, bit<1>用于绿色. bit<2>为移位脉冲,bit<3>为锁存脉冲
return ; 返回
;******************************************************************************
;* *
;* 将一个字节移入列寄存器 *
;* *
;* 入口参数: *
;* AX 中为移位数据 *
;* BX 中为起始位0=D7,1=D6,... *
;* CX 中为移动计数 *
;* 出口参数: *
;* 无 *
;* *
;******************************************************************************
SHIFT_BYTE:
MOV f BX,f ; 是从D7开如写入列寄存器?
skpnz
goto SHIFT_BYTE_2
SHIFT_BYTE_1:
rlf AX,f ; 从AX中移去多余的数据位
decfsz BX,f
goto SHIFT_BYTE_1
SHIFT_BYTE_2:
BANKSEL PORTA ; 选择端口A的所在页面
SHIFT_BYTE_3:
MOV lw 0x03 ; 预置,红、绿都为亮
rlf AX,f
skpc
MOV lw 0x00 ; 红、绿都为灭
andwf ctrl_byte,w ; 确定显示的颜色
andlw 0x03 ; 屏蔽多余的位
MOV wf PORTA ; 数据输出到移位总线上,PORT A的BIT<0:1>
nop
nop
nop
iorlw 0x04 ; 在PORT A的BIT<2>上生成一个上升沿移位脉冲,将数据移入列寄存器
MOV wf PORTA ; 置PORT A的BIT<2>为高电平
nop
nop
nop
andlw 0x03
MOV wf PORTA ; 置PORT A的BIT<2>为低电平
nop ; 完成移位脉冲输出
nop
nop
decfsz CX,f ; 是否输出了所有的数据位
goto SHIFT_BYTE_2 ; 继续下一位输出
return ; 完成一个字节的移位输出,返回
;******************************************************************************
;* *
;* 将列寄存器的内容输出显示 *
;* *
;* 入口参数: *
;* 无 *
;* 出口参数: *
;* 无 *
;* *
;******************************************************************************
LATCH_REGISTER:
BANKSEL PORTA ; 选择端口A的所在页面
MOV lw 0x00 ; 在PORT A的BIT<3>上生成一个↑上升沿锁存脉冲 ,将移位数据打入锁存器
MOV wf PORTA
nop
上一页 [1] [2] [3] [4] [5] 下一页
本文关键字:暂无联系方式PIC单片机,单片机-工控设备 - PIC单片机