合适3ePIC试验板,爱晶产品销售服务做的欠好,很多C程序都是自己写的,不过汇编程序参阅一下不错。
;——————————————————————————————
;单双位改换显现试验参阅程序留意:此程序请用单步履行(试验1-1.asm)
;——————————————————————————————
STATUS EQU03H;特别功用寄存器界说
TRISD EQU88H;特别功用寄存器界说
PORTD EQU08H;特别功用寄存器界说
TRISE EQU89H;特别功用寄存器界说
PORTE EQU09H;特别功用寄存器界说
ORG0000H;复位地址
NOP;MPLAB专用句子
STBSFSTATUS,5;挑选体1
CLRFTRISD;PORTD设置为输出
CLRFTRISE;PORTE设置为输出
BCFSTATUS,5;挑选体0
BCF PORTE,0;RE0清零,选通LED
LOOPMOVLWB‘10101010’
MOVWFPORTD;设置PORTD的值
MOVLWB‘01010101’
MOVWFPORTD;再次设置PORTD的值
GOTOLOOP;循环操作
;——————————————————————————————
END
;——————————————————————————————
本文引证地址: http://www.21ic.com/app/mcu/201810/786583.htm
;——————————————————————————————
;软件延时主动计数试验参阅程序(试验1-2.asm)
;——————————————————————————————
STATUS EQU03H ;特别功用寄存器界说
TRISD EQU88H;特别功用寄存器界说
PORTDEQU08H;特别功用寄存器界说
TRISE EQU89H;特别功用寄存器界说
PORTEEQU09H;特别功用寄存器界说
ORG0000H;复位地址
NOP;MPLAB专用句子
STBSFSTATUS,5;挑选体1
CLRF TRISD;PORTD设置为输出
CLRF TRISE;PORTE设置为输出
BCFSTATUS,5;挑选体0
CLRF PORTD;PORTD清零
BCF PORTE,0;RE0清零,选通LED
LOOPCALL DELAY1S;调用1S推迟程序
INCF PORTD;PORTD+1
GOTO LOOP;循环操作
;——————————————————————————————
;1秒延时子程序参阅程序
;——————————————————————————————
DELAY1S MOVLW 06H;外循环常数
MOVWF 20H;外循环寄存器
LOP0MOVLW 0EBH;中循环常数
MOVWF 21H;中循环寄存器
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;特别功用寄存器界说
PCLEQU02H;特别功用寄存器界说
COUNTEREQU30H;自界说变量
ORG0000H;复位地址
NOP;MPLAB专用句子
STBSFSTATUS,5;挑选数据存储器体1
CLRF TRISD;界说RD口为输出
CLRF TRISE;PORTE设置为输出
BCFSTATUS,5;挑选数据存储器体0
CLRF PORTD;PORTD清零
BCF PORTE,0;RE0清零,选通LED
POPCLRF COUNTER;自界说变量COUNTER清0
LOOPMOVF COUNTER,0;取出变量COUNTER值
CALL TABLE;查表对应数据
MOVWF PORTD;从PORTD输出
CALL DELAY50MS;调用50MS延时
INCF COUNTER,1;循环变量递加
MOVF COUNTER,0;取出当时COUNTER变量值
SUBLW .20;是否已取出20个数据
BTFSC STATUS,2;查验Z标志位
GOTO POP;Z=1,表明一次循环完毕,COUNTER从头复位
GOTO LOOP;回来持续
;——————————————————————————————
;数据表内容
;——————————————————————————————
TABLE
ADDWFPCL,1;调查偏移量
RETLWB‘00011000’;第0种显现状况
RETLWB‘00111100’ ;第1种显现状况
RETLWB‘01111110’ ;第2种显现状况
RETLWB‘11111111’ ;第3种显现状况
RETLWB‘01111110’ ;第4种显现状况
RETLWB‘00111100’;第5种显现状况
RETLWB‘00011000’ ;第6种显现状况
RETLWB‘00000000’;第7种显现状况
RETLWB‘10000001’ ;第8种显现状况
RETLWB‘11000011’;第9种显现状况
RETLWB‘11100111’ ;第10种显现状况
RETLWB‘11111111’;第11种显现状况
RETLWB‘11100111’ ;第12种显现状况
RETLWB‘11000011’;第13种显现状况
RETLWB‘10000001’ ;第14种显现状况
RETLWB‘00000000’;第15种显现状况
RETLWB‘11111111’;第16种显现状况
RETLWB‘00000000’;第17种显现状况
RETLWB‘11111111’;第18种显现状况
RETLWB‘00000000’;第19种显现状况
;——————————————————————————————
;50MS软件延时子程序
;——————————————————————————————
DELAY50MS
MOVLW 41H;外循环常数
MOVWF 20H;外循环寄存器
LOOP1 MOVLW 0FFH;内循环常数
MOVWF 21H;内循环寄存器
LOOP2DECFSZ 21H;内循环寄存器递减
GOTO LOOP2 ;持续内循环
DECFSZ 20H;外循环寄存器递减
GOTO LOOP1 ;持续外循环
RETURN;回来
;——————————————————————————————
END
;——————————————————————————————
;——————————————————————————————
;动态数码主动计数显现试验参阅程序(试验2-1.asm)
;——————————————————————————————
LISTP=16F877A
INCLUDE“P16F877A.INC”;头文件的设定
;——————————————————————————————
;BAW、SHW、 GEW和COUNTER变量的界说
COUNTEREQU71H;可用于循环的次数变量
QWEQU7CH;可用于十进制千位变量
BAWEQU7DH;可用于十进制百位变量
SHWEQU7EH;可用于十进制十位变量
GEWEQU7FH;可用于十进制个位变量
;——————————————————————————————
ORG0000H;复位地址
NOP;MPLAB专用句子
CLRFQW
CLRFBAW
CLRFSHW
CLRFGEW;个、十、百寄存器清零
STBSFSTATUS,RP0;挑选体1
CLRFTRISD;PORTD设置为输出
MOVLWB‘11100001’
MOVWFTRISB;PORTB的B2-5设置为输出,其他输入
BCFSTATUS,RP0;挑选体0
CLRFPORTD;PORTD清零
LGEWMOVFGEW,W;个位计数处理
SUBLW09H
BTFSCSTATUS,Z
GOTOLSHW;个位有进位,转十位计数处理
INCFGEW,F;无进位,各位加1
MOVFGEW,W
MOVWF60H;存入个位寄存器
GOTOPINC;数值动态显现
LSHWCLRFGEW;十位计数处理
CLRF60H;个位有进位,个位清零
MOVFSHW,W;十位处理
SUBLW09H
BTFSCSTATUS,Z
GOTOLBAW;十位有进位,转百位计数处理
INCFSHW,F
MOVFSHW,W
MOVWF61H
GOTOPINC;数值动态显现
LBAWCLRFSHW;百位计数处理
CLRF61H;百位有进位,十位清零
MOVFBAW,W
SUBLW09H
BTFSCSTATUS,Z
GOTOLQW;百位有进位,转千位计数处理
INCFBAW,F
MOVFBAW,W
MOVWF62H
GOTOPINC
LQWCLRFBAW;千位计数处理
CLRF62H;千位有进位,百位清零
MOVFQW,W
SUBLW09H
BTFSCSTATUS,Z
GOTOQL;千位有进位,转清零处理
INCFQW,F
MOVFQW,W
MOVWF63H
GOTOPINC
QLCLRFGEW;个位计数处理
CLRFSHW;十位计数处理
CLRFBAW;百位计数处理
CLRFQW;千位计数处理
PINCNOP;数值动态显现处理
DTJPMOVLW19H
MOVWFCOUNTER;递加计数时刻常数设置
LJ DECFSZCOUNTER,1
GOTOLS;时刻未到,持续动态扫描显现
GOTOLR;时刻到,递加计数
LSBCFPORTB,1;显现个位数值编码
BSFPORTB,2
BSFPORTB,3
BSFPORTB,4
MOVFGEW,W
CALLBMA;调要显现的数值的编码
MOVWFPORTD
CALLDELAY10MS;动态扫描转换时刻操控
BSFPORTB,1;显现十位数值编码
BCFPORTB,2
BSFPORTB,3
BSFPORTB,4
MOVFSHW,W
CALLBMA;调要显现的数值的编码
MOVWFPORTD
CALLDELAY10MS;调用延时10MS程序
BSFPORTB,1;显现百位数值的编码
BSFPORTB,2
BCFPORTB,3
BSFPORTB,4
MOVFBAW,W
CALLBMA;调要显现的数值的编码
MOVWFPORTD
CALLDELAY10MS;调用延时10MS程序
BSFPORTB,1;显现千位数值的编码
BSFPORTB,2
BSFPORTB,3
BCFPORTB,4
MOVFQW,W
CALLBMA;调要显现的数值的编码
MOVWFPORTD
CALLDELAY10MS;调用延时10MS程序
GOTO LJ;回来显现时刻记时
LR GOTOLGEW;回来主程序
;—————————————————————————————–
;10MS延时
;—————————————————————————————–
DELAY10MS
MOVLW03H;0fh外循环常数
MOVWF20H;外循环寄存器
LOOP2MOVLW0FFH;中循环常数
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位主动计数低4位手动计数显现试验参阅程序(试验2-2.asm)
;——————————————————————————————
LISTP=16F877A
INCLUDE“P16F877A.INC”;头文件的设定
;——————————————————————————————
AAAEQU10H;高4位计数递加常数
GSWEQU30H;高4位值寄存器
DSWEQU31H;低4位值寄存器
ORG0000H ;复位地址
NOP ;MPLAB专用句子
STBSFSTATUS,RP0;挑选体1
MOVLW00H
MOVWFTRISD;PORTD设置为输出
MOVLW0FFH
MOVWFTRISB;PORTB设置为输入
MOVLW0FFH
MOVWFTRISC;PORTC设置为输入
CLRFTRISE;PORTE设置为输出
BCFSTATUS,RP0;挑选体0
CLRFPORTD;PORTD端口清零
BCF PORTE,0;RE0清零,选通LED
CLRFGSW;高4位值寄存器清零
CLRFDSW;低4位值寄存器清零
GOTOMAIN;转至MAIN
MAINNOP;高4位主动计数程序段
MOVLWAAA;送高4位计数递加常数
ADDWFPORTD,W
ANDLW0F0H;屏蔽低4位
MOVWFGSW
ADDWFDSW,W;高4位与低4位组成
MOVWFPORTD;送显
CALLDELAY1S;调用延时约1秒的子程序
GOTOMAIN
DELAY1S;含按键扫描的1秒延时子程序
MOVLW6H
MOVWF20H
LP2MOVLW0EAH
MOVWF21H
LP1MOVLW0FFH
MOVWF22H
J0BTFSCPORTC,5;J0按下么?
GOTOJ1;去判别J1是否按下
CALLDELAY10MS;防抖动推迟
BTFSCPORTC,5;J0按下承认
GOTOJ1;去判别J1是否按下
PP0BTFSSPORTC,5;J0按下,判J0是否开释
GOTOPP0;没有开释,再判
CALLDELAY10MS;防抖动推迟
BTFSSPORTC,5;J0牢靠开释?
GOTOPP0;不确定,则再判J0是否开释
INCFPORTD,W;D口加1
ANDLW0FH;屏蔽高四位
MOVWFDSW;送入低4位值存储器
ADDWFGSW,W;高四位加1
MOVWFPORTD;送D口显现
J1 BTFSCPORTB,0;J1按下么?
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/347026.html