PIC 实例集源程序.docx
《PIC 实例集源程序.docx》由会员分享,可在线阅读,更多相关《PIC 实例集源程序.docx(235页珍藏版)》请在冰点文库上搜索。
![PIC 实例集源程序.docx](https://file1.bingdoc.com/fileroot1/2023-5/3/74484b5c-bd21-4857-9faa-9ab0b47687d7/74484b5c-bd21-4857-9faa-9ab0b47687d71.gif)
PIC实例集源程序
PIC实例源程序
;#INCLUDE
;;delay0.1secfor16MHz
;defineRAM
CBLOCK
R0_DLY0_1S,R1_DLY0_1S,R2_DLY0_1S
ENDC
DLY0_1S:
MOVLW10;10*10mS=0.1S
MOVWFR2_DLY0_1S
DLY0_1S3:
MOVLW100;100*0.1mS=10mS
MOVWFR1_DLY0_1S******************
DLY0_1S2:
MOVLW100;100*1uS=0.1mS
MOVWFR0_DLY0_1S
DLY0_1S1:
NOP;1ck
DECFSZR0_DLY0_1S;1ck
GOTODLY0_1S1;2ck(totaly4ck=1uS)
DECFSZR1_DLY0_1S
GOTODLY0_1S2
DECFSZR2_DLY0_1S
GOTODLY0_1S3
RETURN************************
;#INCLUDE;
;;delay100usecfor16MHz
;defineRAM
CBLOCK
R0_DLY100uS,R1_DLY100uS
ENDC
DLY100uS:
****************************
MOVLW100;100*1uS=100uS
MOVWFR0_DLY100uS
DLY100uS1:
NOP;1ck
DECFSZR0_DLY100uS;1ck
GOTODLY100uS1;2ck(totaly4ck=1uS)
RETURN***************************
;#INCLUDE;
;;delay2.5msecfor16MHz;
;defineRAM
CBLOCK
R0_DLY2_5mS,R1_DLY2_5mS
ENDC
DLY2_5mS:
MOVLW10;10*250uS=2.5mS
MOVWFR1_DLY2_5mS******************
DLY2_5m1:
MOVLW250;250*1uS=250uS
MOVWFR0_DLY2_5mS
DLY2_5m2:
NOP;1ck
DECFSZR0_DLY2_5mS;1ck
GOTODLY2_5m2;2ck(totaly4ck=1uS)
DECFSZR1_DLY2_5mS
GOTODLY2_5m1
RETURN*************************
;#INCLUDE;
;;delay4msecfor16MHz;
;defineRAM
CBLOCK
R0_DLY4mS,R1_DLY4mS
ENDC
DLY4mS:
MOVLW20;20*200uS=4mS
MOVWFR1_DLY4mS********************
DLY4mS1:
MOVLW200;200*1uS=200uS
MOVWFR0_DLY4mS
DLY4mS2:
NOP;1ck
DECFSZR0_DLY4mS;1ck
GOTODLY4mS2;2ck(totaly4ck=1uS)
DECFSZR1_DLY4mS
GOTODLY4mS1
RETURN************************
LISTP=16F877,R=DEC
INCLUDE
CBLOCK
R0,R1
ENDC
ORG0
NOP
MOVLW5
MOVWFR1
AGAIN2:
MOVLW200
MOVWFR0
AGAIN1:
NOP
DECFSZR0
GOTOAGAIN1
DECFSZR1
GOTOAGAIN2
GOTO$
END***********
LISTP=16F877,R=DEC
INCLUDE
CBLOCKH'20';USEFULFORRAMDECLARATION
ENDC
ORG0
NOP
BANKSELTRISD
MOVLW0
MOVWFTRISD
BANKSELPORTD
AGAIN:
MOVLWB'11111110'
MOVWFPORTD
CALLD100mS
MOVLWB'11111101'
MOVWFPORTD
CALLD100mS
MOVLWB'11111011'
MOVWFPORTD
CALLD100mS
MOVLWB'11110111'
MOVWFPORTD
CALLD100mS
GOTOAGAIN;REPEAT
CBLOCK
R0_D100mS,R1_D100mS,R2_D100mS
ENDC
D100mS:
MOVLW10
MOVWFR0_D100mS
D100mS1:
MOVLW50
MOVWFR1_D100mS
D100mS2:
MOVLW200
MOVWFR2_D100mS
D100mS3:
DECFSZR2_D100mS
GOTOD100mS3
DECFSZR1_D100mS
GOTOD100mS2
DECFSZR0_D100mS
GOTOD100mS1
RETURN
END************
;EX0401.ASM
LISTP=16F877,R=DEC
#INCLUDE
CBLOCK0X20
ENDC
;DEFINERAM
CBLOCK
R0;user'sregister
DATBF1,DATBF2
ENDC
;definepins(example)
PORTSEGEQUPORTD
TRISEGEQUTRISD
PORTCAEQUPORTB
TRICAEQUTRISB
ORG0
NOP
BANKSELTRICA
MOVLW0
MOVWFTRICA
MOVWFTRISEG
BANKSELPORTCA
MOVLW0XFF
MOVWFPORTCA
MOVLWH'12';display'1234'
MOVWFDATBF2*******
MOVLWH'34';
MOVWFDATBF1
FOURLED:
MOVFDATBF1,W
CALLTABLE
MOVWFPORTSEG
MOVLWB'11111110'
MOVWFPORTCA
CALLDLY2_5mS
SWAPFDATBF1,W
CALLTABLE
MOVWFPORTSEG
MOVLWB'11111101'
MOVWFPORTCA
CALLDLY2_5mS
MOVFDATBF2,W
CALLTABLE
MOVWFPORTSEG
MOVLWB'11111011'
MOVWFPORTCA
CALLDLY2_5mS
SWAPFDATBF2,W
CALLTABLE
MOVWFPORTSEG
MOVLWB'11110111'
MOVWFPORTCA
CALLDLY2_5mS
GOTOFOURLED
;TABLEREADER
TABLE
ANDLWB'00001111'
ADDWFPCL
TABLE1
RETLWH'C0';0
RETLWH'F9';1
RETLWH'A4';2
RETLWH'B0';3
RETLWH'99';4
RETLWH'92';5
RETLWH'82';6
RETLWH'F8';7
RETLWH'80';8
RETLWH'90';9
RETLWH'88';A
RETLWH'83';b
RETLWH'C6';C
RETLWH'A1';d
RETLWH'86';E
RETLWH'8E';F
#INCLUDE
;delay2.5msecfor16MHz
END*****************
;EX0501.ASM
LISTP=16F877,R=DEC
#INCLUDE
CBLOCK0X20
ENDC;defineRAM
CBLOCK
KYBUF,R0
ENDC
ORG0
NOP;
BANKSELTRISB
MOVLW0
MOVWFTRISB
MOVWFTRISD
BANKSELPORTB
MOVLWH'FF'
MOVWFPORTB
CLRFDATBF1
CLRFDATBF2
MAIN:
CALLFOURLED
CALLKB4X4;readkyboard
BTFSCKYBUF,4
GOTOMAIN
MOVFKYBUF,W
MOVWFDATBF1
MAIN2:
CALLKB4X4
BTFSSKYBUF,4
GOTOMAIN2
GOTOMAIN;defineport
PORT4X4EQUPORTD
TRIS4X4EQUTRISD
KB4X4:
MOVLWH'FF'
MOVWFPORT4X4
BANKSELTRIS4X4
MOVLWB'00001111'
MOVWFTRIS4X4
BANKSELPORT4X4
MOVLWB'11101111'
MOVWFPORT4X4
MOVLWH'10'**********
BTFSSPORT4X4,0
MOVLW0
BTFSSPORT4X4,1
MOVLW1
BTFSSPORT4X4,2
MOVLW2
BTFSSPORT4X4,3
MOVLW3
MOVWFKYBUF
BTFSSKYBUF,4
GOTOKB4X4_1
BSFPORT4X4,4
BCFPORT4X4,5
CALLKB4X4_DLY
BTFSSPORT4X4,0
MOVLW4
BTFSSPORT4X4,1
MOVLW5
BTFSSPORT4X4,2
MOVLW6
BTFSSPORT4X4,3
MOVLW7
MOVWFKYBUF
BTFSSKYBUF,4
GOTOKB4X4_1
BSFPORT4X4,5
BCFPORT4X4,6
CALLKB4X4_DLY
BTFSSPORT4X4,0
MOVLW8
BTFSSPORT4X4,1
MOVLW9
BTFSSPORT4X4,2
MOVLWH'A'
BTFSSPORT4X4,3
MOVLWH'B'
MOVWFKYBUF
BTFSSKYBUF,4
GOTOKB4X4_1
BSFPORT4X4,6
BCFPORT4X4,7
CALLKB4X4_DLY
BTFSSPORT4X4,0
MOVLWH'C'
BTFSSPORT4X4,1
MOVLWH'D'
BTFSSPORT4X4,2
MOVLWH'E'
BTFSSPORT4X4,3
MOVLWH'F'
MOVWFKYBUF
KB4X4_1:
BSFPORT4X4,7
RETURN
KB4X4_DLY:
NOP
NOP
NOP
RETURN
#INCLUDE
PORTSEGEQUPORTD
TRISEGEQUTRISD
PORTCAEQUPORTB
TRICAEQUTRISB
#INCLUDE
END****************
;EX0601.ASM
LISTP=16F877,R=DEC
#INCLUDEP16F877.INC
CBLOCK0X20
ENDC;defineRAMs
ORG0
NOP
BANKSELTRISB
MOVLW0
MOVWFTRISB
MOVWFPORTD
BANKSELPORTB
MOVLWH'FF'
MOVWFPORTB
CLRFDATBF1
CLRFDATBF2
MAIN:
BANKSELADCON1
MOVLWB'10001110'
MOVWFADCON1
BANKSELADCON0
MOVLWB'01000001'
MOVWFADCON0
CALLDLY2_5mS
MAIN1:
BSFADCON0,GO
MAIN2:
BTFSCADCON0,GO
GOTOMAIN2
BANKSELADRESL
MOVFADRESL,W
BANKSELDATBF1
MOVWFDATBF1
MOVFADRESH,W
MOVWFDATBF2
CALLFOURLED
GOTOMAIN1
#INCLUDE
PORTSEGEQUPORTD
TRISEGEQUTRISD**********
PORTCAEQUPORTB
TRICAEQUTRISB
#INCLUDE
END****************
;8BITSA/D+HEXTOBCDCONVERTER
LISTP=16F877,R=DEC
#INCLUDEP16F877.INC
CBLOCK0X20
ENDC
;DEFINERAM
CBLOCK
BCDBFL,BCDBFH
ENDC
ORG0
NOP
BANKSELTRISB
MOVLW0
MOVWFTRISB
MOVWFPORTD
BANKSELPORTB
MOVLWH'FF';TURNOFFLEDSMOVWFPORTB
CLRFDATBF1
CLRFDATBF2
MAIN:
BANKSELADCON1
MOVLWB'00000100'
MOVWFADCON1
BANKSELADCON0******
MOVLWB'01001001'
MOVWFADCON0
CALLDLY2_5mS
MAIN1:
BSFADCON0,GO
MAIN2:
BTFSCADCON0,GO
GOTOMAIN2
MOVFADRESH,W
CALLHX2BCD
MOVFBCDBFL,W
MOVWFDATBF1
MOVFBCDBFH,W
MOVWFDATBF2
CALLFOURLED
GOTOMAIN1
#INCLUDE
PORTSEGEQUPORTD
TRISEGEQUTRISD
PORTCAEQUPORTB
TRICAEQUTRISB
#INCLUDE
;HEXTOBCDCONVERTER
;convertwtoBCDBFH/BCDBFL
CBLOCK;defineRAM
R0_HX2BCD
ENDC
HX2BCD:
MOVWFR0_HX2BCD
CLRFBCDBFL
CLRFBCDBFH
HX2BCD1:
MOVLW.100
SUBWFR0_HX2BCD,W
SKPC
GOTOHX2BCD2
MOVWFR0_HX2BCD
INCFBCDBFH
GOTOHX2BCD1
HX2BCD2:
MOVLW.10
SUBWFR0_HX2BCD,W
SKPC
GOTOHX2BCD3
MOVWFR0_HX2BCD
MOVLWH'10'
ADDWFBCDBFL
GOTOHX2BCD2
HX2BCD3:
MOVFR0_HX2BCD,W
ADDWFBCDBFL
RETURN
END******************
;16*2dotmatrixLCD
LISTP=16F877,R=DEC
#INCLUDEP16F877.INC
CBLOCK0X20
ENDC;DEFINERAM
CBLOCK
R0,R1
ENDC
ORG0NOP
callInitLCD
callclrLCD
callL1homeLCD
movlw3
callmovcurLCD
movlw'M'
callputcLCD
movlw'i'
callputcLCD
movlw'c'
callputcLCD
movlw'r'
callputcLCD
movlw'o'
callputcLCD
movlw'c'
callputcLCD
movlw'h'
callputcLCD
movlw'i'
callputcLCD
movlw'p'
callputcLCD
callL2homeLCD
MOVLW12
MOVWFR0
CLRFR1
AGAIN:
MOVFR1,W
CALLF877TBL
CALLputcLCD
INCFR1
DECFSZR0
GOTOAGAIN
GOTO$
F877TBL:
ADDWFPCL
DT"PIC16F877"
#INCLUDE
LCD_DATAequPORTB
LCD_CNTLequPORTB
RSequ5
Eequ4
END***************
;MOVINGLEDS
LISTP=16F877,R=DEC
#INCLUDEP16F877.INC
CBLOCK0X20
ENDC
;defineRAM
CBLOCK
R0,USRFLAG
ENDC
DRCTEQU0
ORG0
NOP
GOTOMAIN
ORG4
BTFSSUSRFLAG,DRCT
GOTOINT01
BCFUSRFLAG,DRCT*******
GOTOINT02
INT01:
BSFUSRFLAG,DRCT
INT02:
BTFSSPORTB,0
GOTOINT02
BCFINTCON,INTF
RETFIE
MAIN:
BANKSELTRISD
MOVLW0
MOVWFTRISD
BANKSELPORTD
BSFINTCON,GIE
BSFINTCON,INTE
BCFINTCON,INTF
MOVLWB'11111100'
MOVWFR0
BCFUSRFLAG,DRCT
MAIN1:
MOVFR0,W
MOVWFPORTD
CALLDLY0_2S
BTFSCUSRFLAG,DRCT
GOTORIGHT
LEFT:
CLRC
BTFSCR0,7
SETC
RLFR0,F
GOTOMAIN1
RIGHT:
CLRC
BTFSCR0,0
SETC
RRFR0,F
GOTOMAIN1
#INCLUDE
END****************
;LCD+PRECISIONTIMER(00.00~99.99SEC)(Timer0)
LISTP=16F877,R=DEC
#INCLUDEP16F877.INC
CBLOCK0X20
ENDC;defineRAM
CBLOCK
TIMBFH,TIMBFL
R0_PRC100mS
R0:
2
W_BAK,STATUS_BAK
BCDBFH,BCDBFL
ENDC;definedata
DATMR0EQU256-125
ORG0
NOP
GOTOMAIN;resetvector
ORG4;
MOVWFW_BAK
SWAPFSTATUS,W
MOVWFSTATUS_BAK
MOVLWDATMR0;
ADDWFTMR0
DECFR0_PRC100mS
BCFINTCON,T0IF
SWAPFSTATUS_BAK,W
MOVWFSTATUS
SWAPFW_BAK
SWAPFW_BAK,W
RETFIE
MAIN:
BANKSELOPTION_REG
MOVLWB'00000101'
;PSA(0=PRESCtotimer)
;PS2~0(101=1/64)
MOVWFOPTION_REG
BANKSELTMR0
MOVLWDATMR0
MOVWFTMR0
MOVLW50;50*2mS=100mS
MOVWFR0_PRC100mS
BSFINTCON,T0IE
BSFINTCON,GIE
CLRFTIMBFH
CLRFTIMBFL
CLRFR0
CLRF