ĹָעͽǰָевͬǰָעʱǶָɵĹܸ˵עͷԳѧȷʵڽܺ⣬ʵӦеPICƷԵעͨԳҪʲô(ָ)˵ֱָӹܡԭָעͽıȥעͷóӦע͡
10ijֽڽָ
ָʽSWAPFfd
˵SWAPFSwap fĺдfdǰָͬĹǼĴfĸ4λ4λִָǰĴf8λ״̬ΪD7D6D5D4D3D2D1D0ִк8λ״̬ΪD3D2D1D0D7D6D5D4W(d=0)f(d=1)С
ʵжֳжϼҪ֡PIC16CָϵͳûнջPUSHͳջPOPָָֻʵ֡ΪгõĴW״̬ĴSTATUSжֳҪĴWSTATUS
ǶPIC16C7ϵоƬжֳʵ
MOVWF W_TEMP Wݴ뵽ʱĴ
W_TEMP
SWAPF STATUSW STATUSW
MOVWF STATUS_TEMP STATUSݴ뵽
ʱĴSTATUS_TEMP
жϷ
SWAPF STATUS_TEMPWSTATUS_TEMPW
MOVWF STATUS STATUSԭԭ״̬
SWAPF W_TEMPF
SWAPF W_TEMPWWԭԭ״̬
˵иָעͻ϶ԳӦﵽĿĶע͵ģÿָĹܼδ漰dzѧӦرעġ
11ӳָ(Subroutine Call)
ָʽCALL kkΪַ
˵ӳãͬͺоƬʵַͬ乲ͬȽصַ((PC)1)ѹջתõӳڵִַ(MCS51ָ)
ָʽģʽHERE CALL DELAYʱӳ
DELAY MOVLW 0x80ʱӳ
RETLW 0
˵ִָǰPC=ַHERE
ִָкPC=ַDELAY()ջָTOS=HERE1(صַ)
ʵָʵ
12Ĵȡָ
ָʽCOMFfd
˵COMFComplement fдd=1ʱ(f)fd=0ʱ(f)w
ܣĴfȡW(d=0)f(d=1)
ʵ ORG 0x1FF
GOTO MAIN
ORG 0
DELAY
MAIN MOVLW 0 ʼ
TRTS 5 RAΪ
BCF 50
RA0λΪ0
LOOP CALL DELAYʱ
COMF 5 RA(
)
GOTO LOOP ѭ
˵ָһPIC16C54 LEDʵ鲿ֳʱӳDELYδгӰ챾ָʶеʼָѽܹŵCALLָǵִӳڵַΪDELAYӳִнִCOMF
5LED𡭡ָһGOTO LOOPָǴﵽLEDѭĿġ
13λIJָ(4PICƷһ)
ָһλ⣬һĴfλb1ָλָ(PICƷһfbλתָ)
(1)λ1ָָʽ BSFfb
˵BSFBit Set fдFbǰָͬĹǽĴfbλ1
(2)λԡΪָָʽ BTFSC fb
˵BTFSCBit TestSkip if ClearдָDzԼĴfλbΪ0һָΪ1˳ִУf(b)=0ʱͲִеǰִָһָ()һָNOPԸָռ2ָڡ
(3)λԡΪ1ָָʽ BTFSSfb
˵BTFSSBit TestSkip if Setдָ෴λf(b)=1ͼִУf(b)=0˳ִС
ܵPIC 8λƬָDzָѭָWͼĴfࡰӡࡰ롱ָͽ˯߷ʽָڱֽƣһһܣڳӦ˵ɶʷΪ
֪ʶ⣺
13гעͣеġ5RA(F5)ڣ6RB(F6)ڡ
CLRW MOVLW OFFH
TRIS 5 TRIS 6
BCF 51 BCF 50
BSF 50 Ž
|