1.发送子程序 list p=16c65,f=inhx8m
portb equ6
trisb equ 16h
status equ3
rp0 equ5
org0x100
fs bsf status,rp0;选存储体1
bcf trisb,6 ;置RB6为输出
bcf status,rp0;恢复存储体0
bsf portb,6 ;发准备信号“1”
movlw0x08
movwf1f ;置发送字长
call ystb ;延时同步
movlw0x10
movwf1c
fs1 bcf portb,6 ;发16个起始位
decfsz1c,1
goto fs1
ts call ystj ;延时调节波特率
rrf 16h,1 ;发送字节移位
btfsc status,0
goto ty
movlw0x10
movwf1c
fs2 bcf portb,6 ;位为0,发16个“0”
decfsz1c,1
goto fs2
goto tr
ty movlw0x10
movwf1c
fs3 bsf portb,6 ;位为1,发16个“1”
decfsz1c,1
goto fs3
tr decfsz1f, 1
goto ts ;发送未完,延时发下一位
return ;发送结束返回
end
2.接收子程序
list p=16c65,f=inhx8m
portb equ6
trisb equ 16h
status equ 3
rp0 equ5
org 0x200
js bsf status,rp0 ;选存储体1
bsf trisb,4 ;置RB4为输入
bcf status,rp0 ;恢复存储体0
js1 btfss portb,4 ;检测收到“1”否
goto js1 ;未收到“1”继续检测
movlw0x08 ;置接收字长8位
movwf1f
loop1 movlw0x08 ;置循环次数8
movwf1d
loop btfsc portb,4 ;检测起始位
goto loop1 ;未收到“0”重置8次循环
decfsz1d,1
goto loop ;收到“0”继续检测
jz call ystb ;收到8个“0”,延时同步,接收数据
btfsc portb,4 ;测试接收位
goto jy
bcf status,0 ;收到“0”置c=0
goto j1
jy bsf status,0 ;收到“1”置c=1
j1 rrf 14h,1 ;接收位移入14h
decfsz 1f,1
goto jz ;未接收完,延时接收下一位
return ;接收完返回
end
上面的程序貌似是匠人写的吧,我想问一个延时同步和延时调节波特率是什么?作用呢? |