当前位置:首页 > 单片机 > 单片机
[导读]适合3ePIC试验板,爱晶产品销售服务做的不好,好多C程序都是自己写的,不过汇编程序参考一下不错。;------------------------------------------------------------------------------------------ ;单双位变换显示

适合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
;------------------------------------------------------------------------------------------

;------------------------------------------------------------------------------------------
;软件延时自动计数实验参考程序(实验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按下么?
GOTOLP0;J1没有按下,转到LP0延迟
CALLDELAY10MS;防抖动延迟
BTFSCPORTB,0;J1可靠按下?
GOTOLP0;J1没有按下,转到LP0延迟
PP1BTFSSPORTB,0;J1按下,判J1是否释放
GOTOPP1;没有释放,再判
CALLDELAY10MS;防抖动延时
BTFSSPORTB,0;J1可靠释放?
GOTOPP1;不确定,则再判J1是否释放
DECFPORTD,W;D口减1
ANDLW0FH;屏蔽高四位
MOVWFDSW;送入低4位值存储器
ADDWFGSW,W;高四位加1
MOVWFPORTD;送D口显示
LP0DECFSZ22H,F;延迟程序
GOTOLP0
DECFSZ21H,F
GOTOLP1
DECFSZ20H,F
GOTOLP2
RETURN
DELAY10MS
MOVLW0FH;外循环常数
MOVWF23H;外循环寄存器
LOOP2MOVLW0FH;中循环常数
MOVWF24H;中循环寄存器
L01DECFSZ24H,F;中循环寄存器递减
GOTOL01;继续中循环
DECFSZ23H,F;外循环寄存器递减
GOTOLOOP2;继续外循环
RETURN;返回
;------------------------------------------------------------------------------------------
END
;------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------
;电平变化基本计数实验参考程序(实验2-3.ASM)
;------------------------------------------------------------------------------------------
LISTP=16F877A
INCLUDE"P16F877A.INC"
PB_TEMPEQU40H;定义PORTB临时备份寄存器
;------------------------------------------------------------------------------------------
ORG0000H;复位地址
NOP;MPLAB专用语句
GOTOST;进入主程序
;------------------------------------------------------------------------------------------
;中断服务程序
;------------------------------------------------------------------------------------------
ORG0004H;中断程序入口地址
MOVFPORTB,W;PORTB 内容放到W
MOVWFPB_TEMP;W内容放到PB_TEMP
BTFSSPB_TEMP,4;判断RB4是否为低电平
GOTOPP4;是RB4输入,转到PP4执行PORTD加1
BTFSSPB_TEMP,5;判断RB5是否为低电平
DECFPORTD;RB5低电平,是RB5输入,执行PORTD减1
PPQBCFINTCON,RBIF;B口电平中断标志位清零
RETFIE;中断返回
PP4INCFPORTD;PORTD加1
GOTOPPQ;转到PPQ退出中断
;------------------------------------------------------------------------------------------
;系统主程序
;------------------------------------------------------------------------------------------
STBSFSTATUS,5;选择数据存储器体1
CLRFTRISD;定义RD口为输出
BSF TRISB,4;定义RB4、RB5为输入
BSF TRISB,5
CLRFTRISE;PORTE设置为输出
BCFSTATUS,5;选择数据存储器体0
MOVLWB'10001000';开启RB口电平变化中断
MOVWFINTCON;送W数据到INTCON
CLRFPORTD;PORTD口清零
BCF PORTE,0;RE0清零,选通LED
GOTO$;原地等待
;------------------------------------------------------------------------------------------
END

;------------------------------------------------------------------------------------------
;LCD显示本站网址和电话实验参考程序(实验2-4.ASM)
;进一步熟悉查表程序的用法,LCD的读写方法。
;------------------------------------------------------------------------------------------
LISTP=16F877A
INCLUDE"P16F877A.INC"
INCLUDE"MY.INC";COUNT、TEMP变量已经定义
;------------------------------------------------------------------------------------------
EEQU03H;LCD片选信号脚定义在RB.3脚
RWEQU02H;LCD读/写信号脚定义在RB.2脚
RSEQU01H ;LCD寄存器选择信号脚定义在RB.1脚
;------------------------------------------------------------------------------------------
ORG 0000H
NOP ;放置一条ICD必需的空操作指令
GOTO MAIN
ORG 0008H
;------------------------------------------------------------------------------------------
TABLE ;取第一行的显示码WWW.AJDZ.NET
ADDWF PCL,1 ;地址偏移量加当前PC值
RETLW ' '
RETLW ' '
RETLW 'W'
RETLW 'W'
RETLW 'W'
RETLW '.'
RETLW 'A'
RETLW 'J'
RETLW 'D'
RETLW 'Z'
RETLW '.'
RETLW 'N'
RETLW 'E'
RETLW 'T'
RETLW ' '
RETLW ' '
RETLW 00H;数据结束标记
;------------------------------------------------------------------------------------------
TABLE1 ;取第二行的显示码TEL0575 2263178
ADDWF PCL,1 ;地址偏移量加当前PC值
RETLW 'T'
RETLW 'E'
RETLW 'L'
RETLW ':'
RETLW '0'
RETLW '5'
RETLW '7'
RETLW '5'
RETLW '-'
RETLW '2'
RETLW '2'
RETLW '6'
RETLW '3'
RETLW '1'
RETLW '7'
RETLW '8'
RETLW 00H;数据结束标记
;------------------------------------------------------------------------------------------
MAIN
BSFSTATUS,RP0;选择体1
MOVLW B'11110001'
MOVWF TRISB;PORTB的B1-3定义为输出,其余为输入
CLRF TRISD;PORTD端口定义为输出
BCF STATUS,RP0
CALL DELAY ;调用延时,刚上电LCD复位不一定有PIC快
MOVLW 01H
MOVWF PORTD ;清屏
CALL ENABLE
MOVLW 38H
MOVWF PORTD ;8位2行5x7点阵
CALL ENABLE
MOVLW 0FH ;显示器开、光标开、闪烁开
MOVWF PORTD
CALL ENABLE
MOVLW 06H ;文字不动,光标自动右移
MOVWF PORTD
CALL ENABLE
MOVLW 80H
MOVWF PORTD ;显示位置
CALL ENABLE
CALL WRITE1 ;调用送第一行数子程序“WWW.AJDZ.NET"
MOVLW 0C0H
MOVWF PORTD ;第一行的位置
CALL ENABLE
CALL WRITE2 ;调用送第二行数子程序“TEL0575 2263178"
MOVLW 0C2H
MOVWF PORTD ;第二行的位置
CALL ENABLE
GOTO $
;------------------------------------------------------------------------------------------
WRITE1
CLRF COUNT ;送第一行数字程序
LOOP1
MOVFW COUNT
CALL TABLE
MOVWF TEMP
CALL DATA2LCD
INCF COUNT,F
MOVFW TEMP
XORLW 00H;只影响标记位
BTFSS STATUS,Z;判断第1行数据是否读完,未读完则继续读
GOTO LOOP1
RETLW 0
;------------------------------------------------------------------------------------------
WRITE2 ;送第二行数子程序
CLRF COUNT
LOOP2
MOVFW COUNT
CALL TABLE1
MOVWF TEMP
CALL DATA2LCD
INCF COUNT,1
MOVFW TEMP
XORLW 00H
BTFSS STATUS,Z
GOTO LOOP2
RETLW 0
;------------------------------------------------------------------------------------------
DATA2LCD ;送数据到LCD子程序
MOVWF PORTD
BSF PORTB,RS
BCF PORTB,RW
BCF PORTB,E
CALL DELAY
BSF PORTB,E
RETLW 0
;------------------------------------------------------------------------------------------
ENABLE
BCF PORTB,RS ;写入控制命令的子程序
BCF PORTB,RW
BCF PORTB,E
CALL DELAY
BSF PORTB,E
RETLW 0
;------------------------------------------------------------------------------------------
DELAY
movlw 0ffh ;将外层循环参数值FFH经过W
movwf 20h ;送入用作外循环变量的20H单元
lp0movlw 0ffh ;将内层循环参数值FFH经过W
movwf 21h ;送入用作内循环变量的21H单元
lp1decfsz 21h,1 ;变量21H内容递减,若为0跳跃
goto lp1 ;跳转到LP1处
decfsz 20h,1 ;变量20H内容递减,若为0跳跃
goto lp0 ;跳跃到LP0处
return ;返回主程序
;------------------------------------------------------------------------------------------
END
;------------------------------------------------------------------------------------------

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

includeCBLOCK20HSEC;秒MIN;分HOU;小时DATE;日期MON;月DAY;日YERR;年DDD;写使能位TIME_TX;1302发送寄存器TIME_RX;1302接收寄存...

关键字: 时钟 汇编程序 芯片

我使用的是爱晶3ePIC实验板,以下都是自己写的程序,只是为了纪念和学习交流使用,别无它意。在我的相册里有板子的原理图。跑马灯实验:程序://适合3epic实验板,是跑马灯程序 #include unsigned...

关键字: 数码管显示 跑马灯 pic入门

程序如下://PIC C DS18B20测温,LCD显示.c 时间:2008-8-20 //适合3ePIC实验板 //C语言写的温度计,DS18B20测温,LCD显示,显示到0.1度 //USING 16F877...

关键字: ds18b20 pic入门 测温度

其实一个虚拟指令可以达到这个目的。ESEG指令定义开始的EEPROM部分。汇编源文件可以包含几个EEPROM的部分,这是串连成一个单一的EEPROM部分组装时。一个EEPROM的部分通常只包括数据...

关键字: AVR eprom 数据 汇编程序

例、 将(R2R3R4R5)除于(R6R7),商送(R4R5),余数送(R2R3)。模拟手算方法:1)从被除数高位开始对齐除数,比较。2)若前者大于或等于后者,商位为1,并把被除数减除数,形成部分余数。若前者小于后者,商...

关键字: 单片机 汇编程序 二进制数除法

MSSP模块工作于SPI主控方式,这个可以直接在实验板上执行。程序://适合3EPIC实验板,配置PIC单片机的MSSP模块工作于SPI主控方式下, //通过一个并/串行转换移位寄存器(74HC165)将接收的并行数据...

关键字: pic入门 spi通信 串口调试

本段程序是在STC官方程序的基础上精简而成,只保留了串口单向发送,使用串口助手可以接收到数据。本段代代码目的是为了调试的方便,单片机内部一些工作状态和数据可以通过串口发送出来,比如AD采集到的数据等,对调试

关键字: stc单片机 汇编程序 串口发送数据

实验一:正弦波产生程序://本程序将通过PIC16F877A的I2C方式驱动D/A转换器MAX518,使其D/A0通道输出 //一个连续的正弦波形(注:本程序并没对正弦波的频率进行控制) //适合3EPIC实验板#i...

关键字: iic通信 pic入门 max518

尝试使用一下6410的汇编,发现跟当年的51差不多,一步一步的学习 ;*****************************************************************

关键字: ok6410 汇编程序
关闭
关闭