PIC单片机的基本编程汇总,初学者必看.doc

上传人:白大夫 文档编号:3270758 上传时间:2019-08-07 格式:DOC 页数:21 大小:81KB
返回 下载 相关 举报
PIC单片机的基本编程汇总,初学者必看.doc_第1页
第1页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《PIC单片机的基本编程汇总,初学者必看.doc》由会员分享,可在线阅读,更多相关《PIC单片机的基本编程汇总,初学者必看.doc(21页珍藏版)》请在三一文库上搜索。

1、PIC单片机的基本编程汇总,初学者必看适合3ePIC试验板,爱晶产品销售服务做的不好,好多C程序都是自己写的,不过汇编程序参考一下不错。;-;单双位变换显示实验参考程序注意:此程序请用单步执行(实验1-1.asm);-STATUS EQU03H;特殊功能寄存器定义TRISD EQU88H;特殊功能寄存器定义PORTD EQU08H;特殊功能寄存器定义TRISE EQU89H;特殊功能寄存器定义PORTE EQU09H;特殊功能寄存器定义ORG0000H;复位地址NOP;MPLAB专用语句STBSFSTATUS,5;选择体1CLRFTRISD;PORTD设置为输出CLRFTRISE;PORTE设

2、置为输出BCFSTATUS,5;选择体0BCF PORTE,0;RE0清零,选通LEDLOOPMOVLWB10101010MOVWFPORTD;设置PORTD的值MOVLWB01010101MOVWFPORTD;再次设置PORTD的值GOTOLOOP;循环操作;-END;-本文引用地址: http:/21ic/app/mcu/201810/786583;-;软件延时自动计数实验参考程序(实验1-2.asm);-STATUS EQU03H ;特殊功能寄存器定义TRISD EQU88H;特殊功能寄存器定义PORTDEQU08H;特殊功能寄存器定义TRISE EQU89H;特殊功能寄存器定义PORT

3、EEQU09H;特殊功能寄存器定义ORG0000H;复位地址NOP;MPLAB专用语句STBSFSTATUS,5;选择体1CLRF TRISD;PORTD设置为输出CLRF TRISE;PORTE设置为输出BCFSTATUS,5;选择体0CLRF PORTD;PORTD清零BCF PORTE,0;RE0清零,选通LEDLOOPCALL DELAY1S;调用1S延迟程序INCF PORTD;PORTD+1GOTO LOOP;循环操作;-;1秒延时子程序参考程序;-DELAY1S MOVLW 06H;外循环常数MOVWF 20H;外循环寄存器LOP0MOVLW 0EBH;中循环常数MOVWF 21

4、H;中循环寄存器LOP1MOVLW 0ECH;内循环常数MOVWF 22H;内循环寄存器LOP2DECFSZ 22H;内循环寄存器递减GOTO LOP2;继续内循环DECFSZ 21H;中循环寄存器递减GOTO LOP1;继续中循环DECFSZ 20H;外循环寄存器递减GOTO LOP0;继续外循环RETURN;返回;-END;-;霓虹灯显示实验参考程序(实验1-3.ASM);-STATUS EQU03H;特殊功能寄存器定义TRISD EQU88H;特殊功能寄存器定义PORTDEQU08H;特殊功能寄存器定义TRISE EQU89H;特殊功能寄存器定义PORTEEQU09H;特殊功能寄存器定义

5、PCLEQU02H;特殊功能寄存器定义COUNTEREQU30H;自定义变量ORG0000H;复位地址NOP;MPLAB专用语句STBSFSTATUS,5;选择数据存储器体1CLRF TRISD;定义RD口为输出CLRF TRISE;PORTE设置为输出BCFSTATUS,5;选择数据存储器体0CLRF PORTD;PORTD清零BCF PORTE,0;RE0清零,选通LEDPOPCLRF COUNTER;自定义变量COUNTER清0LOOPMOVF COUNTER,0;取出变量COUNTER值CALL TABLE;查表对应数据MOVWF PORTD;从PORTD输出CALL DELAY50M

6、S;调用50MS延时INCF COUNTER,1;循环变量递增MOVF COUNTER,0;取出当前COUNTER变量值SUBLW .20;是否已取出20个数据BTFSC STATUS,2;查验Z标志位GOTO POP;Z=1,表示一次循环结束,COUNTER重新复位GOTO LOOP;返回继续;-;数据表内容;-TABLEADDWFPCL,1;考察偏移量RETLWB00011000;第0种显示状态RETLWB00111100 ;第1种显示状态RETLWB01111110 ;第2种显示状态RETLWB11111111 ;第3种显示状态RETLWB01111110 ;第4种显示状态RETLWB0

7、0111100;第5种显示状态RETLWB00011000 ;第6种显示状态RETLWB00000000;第7种显示状态RETLWB10000001 ;第8种显示状态RETLWB11000011;第9种显示状态RETLWB11100111 ;第10种显示状态RETLWB11111111;第11种显示状态RETLWB11100111 ;第12种显示状态RETLWB11000011;第13种显示状态RETLWB10000001 ;第14种显示状态RETLWB00000000;第15种显示状态RETLWB11111111;第16种显示状态RETLWB00000000;第17种显示状态RETLWB11

8、111111;第18种显示状态RETLWB00000000;第19种显示状态;-;50MS软件延时子程序;-DELAY50MSMOVLW 41H;外循环常数MOVWF 20H;外循环寄存器LOOP1 MOVLW 0FFH;内循环常数MOVWF 21H;内循环寄存器LOOP2DECFSZ 21H;内循环寄存器递减GOTO LOOP2 ;继续内循环DECFSZ 20H;外循环寄存器递减GOTO LOOP1 ;继续外循环RETURN;返回;-END;-;-;动态数码自动计数显示实验参考程序(实验2-1.asm);-LISTP=16F877AINCLUDE“P16F877A.INC”;头文件的设定;-

9、;BAW、SHW、 GEW和COUNTER变量的定义COUNTEREQU71H;可用于循环的次数变量QWEQU7CH;可用于十进制千位变量BAWEQU7DH;可用于十进制百位变量SHWEQU7EH;可用于十进制十位变量GEWEQU7FH;可用于十进制个位变量;-ORG0000H;复位地址NOP;MPLAB专用语句CLRFQWCLRFBAWCLRFSHWCLRFGEW;个、十、百寄存器清零STBSFSTATUS,RP0;选择体1CLRFTRISD;PORTD设置为输出MOVLWB11100001MOVWFTRISB;PORTB的B2-5设置为输出,其余输入BCFSTATUS,RP0;选择体0CL

10、RFPORTD;PORTD清零LGEWMOVFGEW,W;个位计数处理SUBLW09HBTFSCSTATUS,ZGOTOLSHW;个位有进位,转十位计数处理INCFGEW,F;无进位,各位加1MOVFGEW,WMOVWF60H;存入个位寄存器GOTOPINC;数值动态显示LSHWCLRFGEW;十位计数处理CLRF60H;个位有进位,个位清零MOVFSHW,W;十位处理SUBLW09HBTFSCSTATUS,ZGOTOLBAW;十位有进位,转百位计数处理INCFSHW,FMOVFSHW,WMOVWF61HGOTOPINC;数值动态显示LBAWCLRFSHW;百位计数处理CLRF61H;百位有进

11、位,十位清零MOVFBAW,WSUBLW09HBTFSCSTATUS,ZGOTOLQW;百位有进位,转千位计数处理INCFBAW,FMOVFBAW,WMOVWF62HGOTOPINCLQWCLRFBAW;千位计数处理CLRF62H;千位有进位,百位清零MOVFQW,WSUBLW09HBTFSCSTATUS,ZGOTOQL;千位有进位,转清零处理INCFQW,FMOVFQW,WMOVWF63HGOTOPINCQLCLRFGEW;个位计数处理CLRFSHW;十位计数处理CLRFBAW;百位计数处理CLRFQW;千位计数处理PINCNOP;数值动态显示处理DTJPMOVLW19HMOVWFCOUNT

12、ER;递增计数时间常数设置LJ DECFSZCOUNTER,1GOTOLS;时间未到,继续动态扫描显示GOTOLR;时间到,递增计数LSBCFPORTB,1;显示个位数值编码BSFPORTB,2BSFPORTB,3BSFPORTB,4MOVFGEW,WCALLBMA;调要显示的数值的编码MOVWFPORTDCALLDELAY10MS;动态扫描转换时间控制BSFPORTB,1;显示十位数值编码BCFPORTB,2BSFPORTB,3BSFPORTB,4MOVFSHW,WCALLBMA;调要显示的数值的编码MOVWFPORTDCALLDELAY10MS;调用延时10MS程序BSFPORTB,1;显

13、示百位数值的编码BSFPORTB,2BCFPORTB,3BSFPORTB,4MOVFBAW,WCALLBMA;调要显示的数值的编码MOVWFPORTDCALLDELAY10MS;调用延时10MS程序BSFPORTB,1;显示千位数值的编码BSFPORTB,2BSFPORTB,3BCFPORTB,4MOVFQW,WCALLBMA;调要显示的数值的编码MOVWFPORTDCALLDELAY10MS;调用延时10MS程序GOTO LJ;返回显示时间记时LR GOTOLGEW;返回主程序;-;10MS延时;-DELAY10MSMOVLW03H;0fh外循环常数MOVWF20H;外循环寄存器LOOP2M

14、OVLW0FFH;中循环常数MOVWF21H;中循环寄存器L01DECFSZ21H,1;中循环寄存器递减GOTOL01;继续中循环DECFSZ20H,1;外循环寄存器递减GOTOLOOP2;继续外循环RETURN;返回;-;编码查询;-BMAADDWFPCL,F;考察偏移量RETLW3FH;“0” 编码RETLW06H;“1” 编码RETLW5BH;“2” 编码RETLW4FH;“3” 编码RETLW66H;“4” 编码RETLW6DH;“5” 编码RETLW7DH;“6” 编码RETLW07H;“7” 编码RETLW7FH;“8” 编码RETLW6FH;“9” 编码;-END;-;-;高4位

15、自动计数低4位手动计数显示实验参考程序(实验2-2.asm);-LISTP=16F877AINCLUDE“P16F877A.INC”;头文件的设定;-AAAEQU10H;高4位计数递增常数GSWEQU30H;高4位值寄存器DSWEQU31H;低4位值寄存器ORG0000H ;复位地址NOP ;MPLAB专用语句STBSFSTATUS,RP0;选择体1MOVLW00HMOVWFTRISD;PORTD设置为输出MOVLW0FFHMOVWFTRISB;PORTB设置为输入MOVLW0FFHMOVWFTRISC;PORTC设置为输入CLRFTRISE;PORTE设置为输出BCFSTATUS,RP0;选

16、择体0CLRFPORTD;PORTD端口清零BCF PORTE,0;RE0清零,选通LEDCLRFGSW;高4位值寄存器清零CLRFDSW;低4位值寄存器清零GOTOMAIN;转至MAINMAINNOP;高4位自动计数程序段MOVLWAAA;送高4位计数递增常数ADDWFPORTD,WANDLW0F0H;屏蔽低4位MOVWFGSWADDWFDSW,W;高4位与低4位合成MOVWFPORTD;送显CALLDELAY1S;调用延时约1秒的子程序GOTOMAINDELAY1S;含按键扫描的1秒延时子程序MOVLW6HMOVWF20HLP2MOVLW0EAHMOVWF21HLP1MOVLW0FFHMO

17、VWF22HJ0BTFSCPORTC,5;J0按下么?GOTOJ1;去判断J1是否按下CALLDELAY10MS;防抖动延迟BTFSCPORTC,5;J0按下确认GOTOJ1;去判断J1是否按下PP0BTFSSPORTC,5;J0按下,判J0是否释放GOTOPP0;没有释放,再判CALLDELAY10MS;防抖动延迟BTFSSPORTC,5;J0可靠释放?GOTOPP0;不确定,则再判J0是否释放INCFPORTD,W;D口加1ANDLW0FH;屏蔽高四位MOVWFDSW;送入低4位值存储器ADDWFGSW,W;高四位加1MOVWFPORTD;送D口显示J1 BTFSCPORTB,0;J1按下

18、么?GOTOLP0;J1没有按下,转到LP0延迟CALLDELAY10MS;防抖动延迟BTFSCPORTB,0;J1可靠按下?GOTOLP0;J1没有按下,转到LP0延迟PP1BTFSSPORTB,0;J1按下,判J1是否释放GOTOPP1;没有释放,再判CALLDELAY10MS;防抖动延时BTFSSPORTB,0;J1可靠释放?GOTOPP1;不确定,则再判J1是否释放DECFPORTD,W;D口减1ANDLW0FH;屏蔽高四位MOVWFDSW;送入低4位值存储器ADDWFGSW,W;高四位加1MOVWFPORTD;送D口显示LP0DECFSZ22H,F;延迟程序GOTOLP0DECFSZ

19、21H,FGOTOLP1DECFSZ20H,FGOTOLP2RETURNDELAY10MSMOVLW0FH;外循环常数MOVWF23H;外循环寄存器LOOP2MOVLW0FH;中循环常数MOVWF24H;中循环寄存器L01DECFSZ24H,F;中循环寄存器递减GOTOL01;继续中循环DECFSZ23H,F;外循环寄存器递减GOTOLOOP2;继续外循环RETURN;返回;-END;-;-;电平变化基本计数实验参考程序(实验2-3.ASM);-LISTP=16F877AINCLUDE“P16F877A.INC”PB_TEMPEQU40H;定义PORTB临时备份寄存器;-ORG0000H;复位

20、地址NOP;MPLAB专用语句GOTOST;进入主程序;-;中断服务程序;-ORG0004H;中断程序入口地址MOVFPORTB,W;PORTB 内容放到WMOVWFPB_TEMP;W内容放到PB_TEMPBTFSSPB_TEMP,4;判断RB4是否为低电平GOTOPP4;是RB4输入,转到PP4执行PORTD加1BTFSSPB_TEMP,5;判断RB5是否为低电平DECFPORTD;RB5低电平,是RB5输入,执行PORTD减1PPQBCFINTCON,RBIF;B口电平中断标志位清零RETFIE;中断返回PP4INCFPORTD;PORTD加1GOTOPPQ;转到PPQ退出中断;-;系统主

21、程序;-STBSFSTATUS,5;选择数据存储器体1CLRFTRISD;定义RD口为输出BSF TRISB,4;定义RB4、RB5为输入BSF TRISB,5CLRFTRISE;PORTE设置为输出BCFSTATUS,5;选择数据存储器体0MOVLWB10001000;开启RB口电平变化中断MOVWFINTCON;送W数据到INTCONCLRFPORTD;PORTD口清零BCF PORTE,0;RE0清零,选通LEDGOTO$;原地等待;-END;-;LCD显示本站网址和电话实验参考程序(实验2-4.ASM);进一步熟悉查表程序的用法,LCD的读写方法。;-LISTP=16F877AINCL

22、UDE“P16F877A.INC”INCLUDE“MY.INC”;COUNT、TEMP变量已经定义;-EEQU03H;LCD片选信号脚定义在RB.3脚RWEQU02H;LCD读/写信号脚定义在RB.2脚RSEQU01H ;LCD寄存器选择信号脚定义在RB.1脚;-ORG 0000HNOP ;放置一条ICD必需的空操作指令GOTO MAINORG 0008H;-TABLE ;取第一行的显示码WWW.AJDZ.NETADDWF PCL,1 ;地址偏移量加当前PC值RETLW RETLW RETLW WRETLW WRETLW WRETLW 。RETLW ARETLW JRETLW DRETLW Z

23、RETLW 。RETLW NRETLW ERETLW TRETLW RETLW RETLW 00H;数据结束标记;-TABLE1 ;取第二行的显示码TEL0575 2263178ADDWF PCL,1 ;地址偏移量加当前PC值RETLW TRETLW ERETLW LRETLW :RETLW 0RETLW 5RETLW 7RETLW 5RETLW -RETLW 2RETLW 2RETLW 6RETLW 3RETLW 1RETLW 7RETLW 8RETLW 00H;数据结束标记;-MAINBSFSTATUS,RP0;选择体1MOVLW B11110001MOVWF TRISB;PORTB的B1

24、-3定义为输出,其余为输入CLRF TRISD;PORTD端口定义为输出BCF STATUS,RP0CALL DELAY ;调用延时,刚上电LCD复位不一定有PIC快MOVLW 01HMOVWF PORTD ;清屏CALL ENABLEMOVLW 38HMOVWF PORTD ;8位2行5x7点阵CALL ENABLEMOVLW 0FH ;显示器开、光标开、闪烁开MOVWF PORTDCALL ENABLEMOVLW 06H ;文字不动,光标自动右移MOVWF PORTDCALL ENABLEMOVLW 80HMOVWF PORTD ;显示位置CALL ENABLECALL WRITE1 ;调

25、用送第一行数子程序“WWW.AJDZ.NET“MOVLW 0C0HMOVWF PORTD ;第一行的位置CALL ENABLECALL WRITE2 ;调用送第二行数子程序“TEL0575 2263178”MOVLW 0C2HMOVWF PORTD ;第二行的位置CALL ENABLEGOTO $;-WRITE1CLRF COUNT ;送第一行数字程序LOOP1MOVFW COUNTCALL TABLEMOVWF TEMPCALL DATA2LCDINCF COUNT,FMOVFW TEMPXORLW 00H;只影响标记位BTFSS STATUS,Z;判断第1行数据是否读完,未读完则继续读GO

26、TO LOOP1RETLW 0;-WRITE2 ;送第二行数子程序CLRF COUNTLOOP2MOVFW COUNTCALL TABLE1MOVWF TEMPCALL DATA2LCDINCF COUNT,1MOVFW TEMPXORLW 00HBTFSS STATUS,ZGOTO LOOP2RETLW 0;-DATA2LCD ;送数据到LCD子程序MOVWF PORTDBSF PORTB,RSBCF PORTB,RWBCF PORTB,ECALL DELAYBSF PORTB,ERETLW 0;-ENABLEBCF PORTB,RS ;写入控制命令的子程序BCF PORTB,RWBCF PORTB,ECALL DELAYBSF PORTB,ERETLW 0;-DELAYmovlw 0ffh ;将外层循环参数值FFH经过Wmovwf 20h ;送入用作外循环变量的20H单元lp0movlw 0ffh ;将内层循环参数值FFH经过Wmovwf 21h ;送入用作内循环变量的21H单元lp1decfsz 21h,1 ;变量21H内容递减,若为0跳跃goto lp1 ;跳转到LP1处decfsz 20h,1 ;变量20H内容递减,若为0跳跃goto lp0 ;跳跃到LP0处return ;返回主程序;-END;-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1